将 PDF 文件转换为栅格图像

ODA 平台支持使用 Google Pdfium 库处理 .pdf 文件。您可以使用基于 ODA TD_Pdfium 模块的 ODA SDK RxPdfToRasterSevices 模块将 .pdf 文件(或文件的一部分)转换为栅格图像。

通过该模块,您可以在应用程序中实现各种功能,例如 .pdf 导出预览、添加 .pdf 附件等。RxPdfToRasterSevices 模块易于使用,并具有灵活的转换设置。

让我们看看它是如何工作的,并转换以下 .pdf 文件。

 

image1

 

首先,创建转换器:

OdRxPdfToRasterServicesPtr pSvcs = odrxDynamicLinker()->loadApp(RX_PDF_TO_RASTER_SERVICES_APPNAME);
OdPdf2ImageConverterPtr pConverter = pSvcs->createConverter();

然后,从磁盘或内存流加载 .pdf 文件:

pConverter->loadPdf(L"file.pdf");

如果 .pdf 文件包含多个页面,并且我们不想转换第一个页面,请设置活动页面(默认情况下转换第一个页面):


pConverter->getPagesCount();
pConverter->setActivePage(2);

如果我们要按原样转换 .pdf 文件,这已经足够了,但假设我们想裁剪页面并只生成页面的一部分图片。那么,我们需要了解页面大小:


OdGsDCRect rect;
pConverter->getPageSize(rect);

现在,rect 包含页面大小,以 .pdf 坐标(1/72 英寸)测量。对于当前文件,它是 595x842。让我们设置裁剪区域(如果此区域超出页面,结果将是空图像(空指针)):


OdPdf2ImageConversionParams params;
OdGsDCRect cropArea;
cropArea.m_min.x = 100;
cropArea.m_min.y = 100;
cropArea.m_max.x = 500;
cropArea.m_max.y = 500;
params.cropArea = cropArea;

我们还可以设置分辨率和背景颜色:

params.bg_color = 0xFFFFFFFF;
params.dpi = 300;

默认情况下,分辨率为 72(标准 PDF 分辨率),背景颜色为白色。如果文件包含 PDF 图层,我们还可以启用或禁用它们:

OdPdfLayerArray layers;
pConverter->getLayers(layers);
layers.at(2).is_on = false; //layer "Layer2" for this pdf file
params.layers = layers;

现在我们只需调用转换:

OdGiRasterImagePtr pImg;
pImg = pConverter->convertPdf(params);

结果如下图所示:

 

image2

 

另一个示例可在 ODA Drawings Debug 应用程序 (OdaMfcApp.exe) 的 ExportToPdfPreview 对话框中找到。

RxPdfToRasterServices 模块可用于提供 C++11 支持的平台(vc14/15、gcc 4.8 及更高版本等)。

今天就开始行动

免费试用 ODA 软件 60 天。
无风险,无需信用卡。

免费试用