123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131 |
- #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__
|