使用 C++ 在打印机上可视化打印 PDF 文件
visual printing pdf file on printer using c++
在我的c ++应用程序(dll)中,我在不使用打印对话框的情况下打印位图,即从后端代码打印,而不提示用户选择文件。此功能工作正常。现在我尝试实现另一种方法,该方法将在打印机上打印已经存在的pdf文件。现有功能特定于位图,我很困惑如何将pdf文件发送到打印机。以下是工作代码
DOCINFO diDocInfo = {0};
diDocInfo.cbSize = sizeof( DOCINFO );
diDocInfo.lpszDocName = L"printTest";
if( StartDoc( memDC.GetSafeHdc(), &diDocInfo ) > 0 )
{
if( StartPage( memDC.GetSafeHdc() ) > 0 )
{
CBitmap bitmap;
CImage frontImage;
frontImage.Load(_T("C:Test.bmp"));
bitmap.Attach(frontImage.Detach());
BITMAP bm;
bitmap.GetBitmap(&bm);
int w = bm.bmWidth;
int h = bm.bmHeight;
// create memory device context
CDC tempDC;
tempDC.CreateCompatibleDC(&memDC);
CBitmap *pBmp = tempDC.SelectObject(&bitmap);
tempDC.SetMapMode(memDC.GetMapMode());
memDC.SetStretchBltMode(HALFTONE);
memDC.StretchBlt(0, 0, 994, 624, &tempDC, 0, 0, 994, 624, 13369376);
EndPage(memDC.GetSafeHdc());
}
}
我找不到某种方法将 pdf 文件而不是位图传递给 DC
位图是操作系统可立即访问的原始数据。PDF文件是相当复杂的野兽,如果从头开始编写,则必须解析(困难)和渲染(困难)。
您最好的做法是使用一些现有的PDF访问库(如MuPDF)为您完成繁重的工作。这样,您应该生成 PDF 的光栅化,或发送到 GDI 进行打印的矢量绘图命令。幸运的是,PDF (-1/A) 不会执行无法映射到 GDI 的操作;最困难的部分是处理嵌入字体;如果不想栅格化它们,则必须将字形数据上传到用于打印的 GDI 上下文中。
相关文章:
- 如何循环打印顶点结构
- 为什么在popback()操作之后,它仍然打印完整的矢量
- 如何在c++中打印目录
- 有一个打印语句的函数是一种糟糕的编程实践吗
- 在线编译器中的分段C++没有打印消息
- 如何使用打印到 PDF 打印机在 MFC 和 CView 中以编程方式打印而不提示输入文件名?
- 将 QTableWidget 内容打印为 PDF
- 从QT打印PDF文件
- 如何使用QPainter将多个Qwidgets在不同页面中打印到PDF
- 如何判断Microsoft打印到 PDF 打印机驱动程序何时完成
- 使用 QT 打印为 pdf
- 使用 Qt 打印 PDF 文件
- cmd.exe打开PDF并打印它
- 使用libharu在pdf中打印日语字符
- 在 Mac 上检测 PDF 打印
- Libharu pdf创建:如何知道打印文本的大小
- 使用MFC打印PDF文件
- 如何在Qt中打印pdf文件
- 使用 C++ 在打印机上可视化打印 PDF 文件
- 使用Boost.regex从目录中打印.pdf文件名