0

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

有什么方法可以将 PDF 页面呈现为 EMF 或 PDFium 中的元文件?

4

2 回答 2

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));
}
于 2018-03-10T15:50:14.913 回答
1

在 Windows 上,您要调用FPDF_RenderPage并传入HDCthis 应该允许您获取 EMF 数据。您可以查看铬打印代码示例用法。还有一个FPDF_SetPrintMode可以让你设置不同的模式。

于 2018-03-08T02:26:55.423 回答