c++使用pdfium10.0以上版本库将pdf文件发送到打印机打印
时间: 2023-12-10 11:06:03 浏览: 318
从pdfium 10.0版本开始,pdfium库不再支持打印功能,因此如果需要在c++中使用pdfium库将pdf文件发送到打印机打印,你需要选择pdfium 9.0版本或更早的版本。
以下是一个使用pdfium 9.0版本实现pdf打印的示例代码:
```c++
#include <windows.h>
#include "fpdfview.h"
#include "fpdf_print.h"
int main()
{
// 加载PDF文件
FPDF_DOCUMENT doc = FPDF_LoadDocument("test.pdf", nullptr);
if (!doc) {
printf("Failed to load PDF file!\n");
return -1;
}
// 获取打印机信息
PRINTER_INFO_2 printerInfo;
ZeroMemory(&printerInfo, sizeof(printerInfo));
printerInfo.pPrinterName = L"Printer Name";
DWORD dwNeeded = 0;
if (!GetPrinter(nullptr, 2, (LPBYTE)&printerInfo, 0, &dwNeeded)) {
printf("Failed to get printer information!\n");
FPDF_CloseDocument(doc);
return -1;
}
// 创建打印作业
HDC printerDC = CreateDC(nullptr, printerInfo.pDriverName, printerInfo.pPrinterName, nullptr);
if (!printerDC) {
printf("Failed to create printer DC!\n");
FPDF_CloseDocument(doc);
return -1;
}
DOCINFO docInfo;
ZeroMemory(&docInfo, sizeof(docInfo));
docInfo.cbSize = sizeof(docInfo);
docInfo.lpszDocName = L"PDF Print Job";
StartDoc(printerDC, &docInfo);
StartPage(printerDC);
// 设置打印机属性
int pageCount = FPDF_GetPageCount(doc);
DEVMODE devMode;
ZeroMemory(&devMode, sizeof(devMode));
devMode.dmSize = sizeof(devMode);
devMode.dmFields = DM_COPIES | DM_ORIENTATION | DM_PAPERSIZE;
devMode.dmCopies = 1;
devMode.dmOrientation = DMORIENT_PORTRAIT;
devMode.dmPaperSize = DMPAPER_A4;
ResetDC(printerDC, &devMode);
// 逐页打印
for (int i = 0; i < pageCount; i++) {
FPDF_PAGE page = FPDF_LoadPage(doc, i);
if (!page) {
printf("Failed to load page %d!\n", i+1);
break;
}
int pageWidth = FPDF_GetPageWidth(page);
int pageHeight = FPDF_GetPageHeight(page);
RECT rect;
rect.left = 0;
rect.top = 0;
rect.right = pageWidth;
rect.bottom = pageHeight;
FPDF_PrintPage(printerDC, page, &rect, 0, 0);
FPDF_ClosePage(page);
}
// 结束打印作业
EndPage(printerDC);
EndDoc(printerDC);
DeleteDC(printerDC);
// 释放资源
FPDF_CloseDocument(doc);
return 0;
}
```
以上示例代码使用pdfium 9.0版本加载pdf文件,并通过Windows GDI API将pdf文件发送到打印机打印。在逐页打印时,使用FPDF_PrintPage函数打印当前页,并传入RECT结构体,设置打印页面大小和位置。在打印之前,使用Windows GDI API设置打印机的打印属性,包括打印份数、方向和纸张大小等。在打印完成后,使用Windows GDI API结束打印作业。
请注意,以上示例代码仅供参考,实际使用时还需要根据自己的需求进行修改和调整。
阅读全文