EasyPrinter.h 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. #ifndef ___EASYPRINTER__
  2. #define ___EASYPRINTER__
  3. /************************************************************************/
  4. /* Copyright (C), 2016-2020, [Jeff], 保留所有权利;
  5. /* 模 块 名:;
  6. /* 描 述:;
  7. /*
  8. /* 版 本:[V.1.1];
  9. /* 作 者:[Jeff];
  10. /* 日 期:[3/6/2017];
  11. /*
  12. /*
  13. /* 注 意:关于打印机纸张物理大小相同,DPI值不同的情况下,打印错位的问题可能会发生。
  14. /* 但由于没有多台不同DPI实验打印机做测试,无法预见Bug;
  15. /*
  16. /* 必须从左到右,从上到下来排版.
  17. /*
  18. /* 修改记录:[Jeff];
  19. /* 修改日期:[3/13/2017];
  20. /* 修改版本:v.1.1;
  21. /* 修改内容:添加打印图片;
  22. /* 修改记录:[Jeff];
  23. /* 修改日期:
  24. /* 修改版本:v.1.1;
  25. /* 修改内容:添加打印图片;
  26. | |
  27. | A |
  28. ------------------------------------------------ top水平线;
  29. | |
  30. D | 换页表格E; | B
  31. | |
  32. ------------------------------------------------ bottom水平线;
  33. | C |
  34. | |
  35. /* 1.首先,根据表格属性,计算出变化后的表格大小;
  36. /* 2.其次,从变化后的表格中筛选出换页的表格;
  37. /* 3.然后,计算出筛选表格的ABCD区域的表格集合
  38. /* (如B区域可能有三个或更多表格存在,需要随E变化高度,只要top底于top水平线的,都需要变化高度);
  39. v.1.0:表格固定,只打印文本;
  40. v.1.1:添加打印图片;
  41. v.1.2:添加打印条形码;
  42. v.1.3:添加打印二维码;
  43. v.1.4:实现换页功能;
  44. /************************************************************************/
  45. #pragma once
  46. #include "PrinterDef.h"
  47. #define DPI_MUL (m_lfDPIY/72)
  48. //////////////////////////////////////////////////////////////////////////
  49. // 所有设备的最小dpi是72,打印机最小dpi也是72,最大2400;
  50. // 计算字体高度;
  51. #define CALC_FONT_HEIGHT(x) (-MulDiv(x, m_lfDPIY, 72))
  52. #define CALC_PHYSICALX(x) (MulDiv(x, m_lfDPIX, 72))
  53. #define CALC_PHYSICALY(y) (MulDiv(y, m_lfDPIY, 72))
  54. class CEasyPrinter
  55. {
  56. public:
  57. CEasyPrinter(void);
  58. ~CEasyPrinter(void);
  59. protected:
  60. static ULONG m_gdiplusToken;
  61. // 文本字体;
  62. CFont m_cfont;
  63. CFont *m_pOldfont;
  64. // 当前打印机DC环境;
  65. HDC m_PrinterDC;
  66. CDC m_dcPrinter;
  67. // 当前打印机对话框;
  68. CPrintDialog *m_pPrintDlg;
  69. // 0:表示纵向打印; 1:表示横向打印;
  70. INT m_nPrintOrientation;
  71. // 方向长度,纵向表示宽度,横向表示高度;
  72. INT m_nOrientationLength;
  73. // 当前打印名称;
  74. CString m_strCurPrinterName;
  75. // 当前打印机预设的纸张大小;
  76. CSize m_CurPrinterDefaultPaperSize;
  77. // 当前打印机的dpi值(dpi Dots Per Inch(每英寸所打印的点数)的缩写);
  78. double m_lfDPIX;
  79. double m_lfDPIY;
  80. // dpi/72倍数;
  81. double m_lf72DPIMul;
  82. #ifdef _DEBUG
  83. public:
  84. #endif
  85. // 打印列表;
  86. PrintList m_printlist;
  87. // 打印机句柄;
  88. HANDLE m_hPrinter;
  89. public:
  90. void SetTextFont(IN INT nTextFontSize, IN BOOL bBold, IN BOOL bItalic, IN TString strTextFontName);
  91. public:
  92. BOOL InitialzePrinter(IN LPCTSTR lpPrinterName = NULL, IN BOOL bShowDlg = FALSE);
  93. TString GetDefaultPrinter();
  94. #ifdef _VER_WINAPI_
  95. BOOL InitPrinter(IN LPCTSTR lpPrinter = NULL);
  96. #endif
  97. BOOL StartPrint();
  98. void EndofPrint();
  99. BOOL StartPage();
  100. void NewAnPage();
  101. void EndofPage();
  102. public:
  103. // 加载Json;
  104. BOOL LoadTemplateFromJson(IN TString strTemplateJson);
  105. // 从文件加载;
  106. BOOL LoadTemplateFromFile(IN TString strTemplateFile);
  107. // 设置打印机;
  108. void SetPrinter(IN TString strPrinterName);
  109. BOOL LoadValuesFromJson(IN TString strJsonValues);
  110. BOOL LoadValuesFromFile(IN TString strJsonFile);
  111. };
  112. #endif //___EASYPRINTER__