如何在PDFium中将PDF页面呈现为EMF或元文件

时间:2018-03-07 13:58:40

标签: pdfium

目前,我已使用FPDF_RenderPageBitmap方法将PDF页面生成为位图。

是否有任何方法可以将PDF页面呈现为EMF或PDF中的图元文件?

2 个答案:

答案 0 :(得分:2)

在pdfium项目中,有一个示例文件夹,其中包含pdfium_test.cc文件,其中包含不同格式的输出示例。 PNG,EMF,BMP,TXT和PPM都在目前。

呈现EMF的当前代码

void WriteEmf(FPDF_PAGE page, const char* pdf_name, int num) {
  int width = static_cast<int>(FPDF_GetPageWidth(page));
  int height = static_cast<int>(FPDF_GetPageHeight(page));

  char filename[256];
  snprintf(filename, sizeof(filename), "%s.%d.emf", pdf_name, num);

  HDC dc = CreateEnhMetaFileA(nullptr, filename, nullptr, nullptr);

  HRGN rgn = CreateRectRgn(0, 0, width, height);
  SelectClipRgn(dc, rgn);
  DeleteObject(rgn);

  SelectObject(dc, GetStockObject(NULL_PEN));
  SelectObject(dc, GetStockObject(WHITE_BRUSH));
  // If a PS_NULL pen is used, the dimensions of the rectangle are 1 pixel less.
  Rectangle(dc, 0, 0, width + 1, height + 1);

  FPDF_RenderPage(dc, page, 0, 0, width, height, 0,
                  FPDF_ANNOT | FPDF_PRINTING | FPDF_NO_CATCH);

  DeleteEnhMetaFile(CloseEnhMetaFile(dc));
}

答案 1 :(得分:1)

在Windows上,您要调用FPDF_RenderPage并传入HDC,这样可以让您获取EMF数据。您可以看到铬印刷代码,例如用法。还有FPDF_SetPrintMode可让您设置不同的模式。