[返回博客](/cn/blog) # 将 PDF 文件转换为栅格图像

Sergey Sherstnev 五月 16, 2019 [\#pdf](/cn/blog/tag/pdf) [\#Raster image](/cn/blog/tag/raster-image)

<a class="a2a_button_facebook"></a><a class="a2a_button_twitter"></a><a class="a2a_button_linkedin"></a>

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

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

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

![image1](/files/inline-images/1_3.jpg)首先，创建转换器：

```
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](/files/inline-images/2_3.jpg)另一个示例可在 ODA Drawings Debug 应用程序 (OdaMfcApp.exe) 的 ExportToPdfPreview 对话框中找到。

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

## 今天就开始行动

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

[免费试用](https://www.opendesign.com/cn/free-trial)
