ODAプラットフォームは、Google Pdfiumライブラリを使用して.pdfファイルを扱うことをサポートしています。ODAのTD_Pdfiumモジュールに基づいたODA SDK RxPdfToRasterSevicesモジュールを使用して、.pdfファイル(またはファイルの一部)をラスター画像に変換できます。
このモジュールを使用すると、.pdfエクスポートのプレビュー、.pdf添付ファイルの追加など、さまざまな機能をアプリケーションに実装できます。RxPdfToRasterSevicesモジュールは使いやすく、変換のための柔軟な設定が可能です。
その仕組みを見て、次の.pdfファイルを変換してみましょう。
まず、コンバーターを作成します。
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);
結果は以下の画像です。
別の例は、ODA Drawings Debugアプリケーション (OdaMfcApp.exe) のExportToPdfPreviewダイアログで利用できます。
RxPdfToRasterServicesモジュールは、C++11をサポートするプラットフォーム (vc14/15、gcc 4.8以降など) で使用できます。