#ifndef ___EASYPRINTER__ #define ___EASYPRINTER__ /************************************************************************/ /* Copyright (C), 2016-2020, [Jeff], 保留所有权利; /* 模 块 名:; /* 描 述:; /* /* 版 本:[V.1.1]; /* 作 者:[Jeff]; /* 日 期:[3/6/2017]; /* /* /* 注 意:关于打印机纸张物理大小相同,DPI值不同的情况下,打印错位的问题可能会发生。 /* 但由于没有多台不同DPI实验打印机做测试,无法预见Bug; /* /* 必须从左到右,从上到下来排版. /* /* 修改记录:[Jeff]; /* 修改日期:[3/13/2017]; /* 修改版本:v.1.1; /* 修改内容:添加打印图片; /* 修改记录:[Jeff]; /* 修改日期: /* 修改版本:v.1.1; /* 修改内容:添加打印图片; | | | A | ------------------------------------------------ top水平线; | | D | 换页表格E; | B | | ------------------------------------------------ bottom水平线; | C | | | /* 1.首先,根据表格属性,计算出变化后的表格大小; /* 2.其次,从变化后的表格中筛选出换页的表格; /* 3.然后,计算出筛选表格的ABCD区域的表格集合 /* (如B区域可能有三个或更多表格存在,需要随E变化高度,只要top底于top水平线的,都需要变化高度); v.1.0:表格固定,只打印文本; v.1.1:添加打印图片; v.1.2:添加打印条形码; v.1.3:添加打印二维码; v.1.4:实现换页功能; /************************************************************************/ #pragma once #include "PrinterDef.h" #define DPI_MUL (m_lfDPIY/72) ////////////////////////////////////////////////////////////////////////// // 所有设备的最小dpi是72,打印机最小dpi也是72,最大2400; // 计算字体高度; #define CALC_FONT_HEIGHT(x) (-MulDiv(x, m_lfDPIY, 72)) #define CALC_PHYSICALX(x) (MulDiv(x, m_lfDPIX, 72)) #define CALC_PHYSICALY(y) (MulDiv(y, m_lfDPIY, 72)) class CEasyPrinter { public: CEasyPrinter(void); ~CEasyPrinter(void); protected: static ULONG m_gdiplusToken; // 文本字体; CFont m_cfont; CFont *m_pOldfont; // 当前打印机DC环境; HDC m_PrinterDC; CDC m_dcPrinter; // 当前打印机对话框; CPrintDialog *m_pPrintDlg; // 0:表示纵向打印; 1:表示横向打印; INT m_nPrintOrientation; // 方向长度,纵向表示宽度,横向表示高度; INT m_nOrientationLength; // 当前打印名称; CString m_strCurPrinterName; // 当前打印机预设的纸张大小; CSize m_CurPrinterDefaultPaperSize; // 当前打印机的dpi值(dpi Dots Per Inch(每英寸所打印的点数)的缩写); double m_lfDPIX; double m_lfDPIY; // dpi/72倍数; double m_lf72DPIMul; #ifdef _DEBUG public: #endif // 打印列表; PrintList m_printlist; // 打印机句柄; HANDLE m_hPrinter; public: void SetTextFont(IN INT nTextFontSize, IN BOOL bBold, IN BOOL bItalic, IN TString strTextFontName); public: BOOL InitialzePrinter(IN LPCTSTR lpPrinterName = NULL, IN BOOL bShowDlg = FALSE); TString GetDefaultPrinter(); #ifdef _VER_WINAPI_ BOOL InitPrinter(IN LPCTSTR lpPrinter = NULL); #endif BOOL StartPrint(); void EndofPrint(); BOOL StartPage(); void NewAnPage(); void EndofPage(); public: // 加载Json; BOOL LoadTemplateFromJson(IN TString strTemplateJson); // 从文件加载; BOOL LoadTemplateFromFile(IN TString strTemplateFile); // 设置打印机; void SetPrinter(IN TString strPrinterName); BOOL LoadValuesFromJson(IN TString strJsonValues); BOOL LoadValuesFromFile(IN TString strJsonFile); }; #endif //___EASYPRINTER__