.dgn ファイルの PDF 添付ファイルを作成およびレンダリングする

ODAプラットフォームは、さまざまな方法でPDFを扱います。一般的な機能の1つは、RxPdfToRasterサービスモジュールを使用して図面用のPDF添付ファイルを作成およびレンダリングすることです。.dgnファイルと.dwgファイルの両方でプロセスは似ており、この記事では.dgn図面での動作について説明します。 まず、空のデータベースを作成します。
OdDgDatabasePtr pDb = app->createDatabase();
次に、PDFコンバーターモジュールを準備します (変換は行われませんが、.pdfファイルからいくつかの情報を取得する必要があります)。
OdRxPdfToRasterServicesPtr pSvcs = odrxDynamicLinker()->loadApp(RX_PDF_TO_RASTER_SERVICES_APPNAME);
pConverter = pSvcs->createConverter();
.pdfファイルをロードし、必要な情報を取得します。
pConverter->loadPdf(L"file.pdf");
OdUInt16 count = pConverter->getPagesCount();
pConverter->setActivePage(2); //first page is active by default
OdPdfLayerArray layers;
pConverter->getLayers(layers); //we can enable/disable necessary layers in attachment with set layers[index].is_on
OdGsDCRect pageSize;
pConverter->getPageSize(pageSize); //page size measured in 1/72 inches
.dgn 用のラスター添付ファイルを準備します。
OdDgModelPtr pModel = pDb->getActiveModelId().openObject(OdDg::kForWrite);
OdDgRasterFramePtr pRasterFrame = OdDgRasterFrame::createObject();
OdDgRasterAttachmentHeaderPtr raster = OdDgRasterAttachmentHeader::createObject();

pModel->addElement(raster);
pModel->addElement(pRasterFrame);

raster->setFilename(L"file.pdf");
必要な設定を添付ファイルに適用し、添付ファイルを .dgn 図面に保存します。
//calculate size in meters
double width = (double)pageSize.m_max.x * .0254 / 72.;
double height = (double)pageSize.m_max.y  * .0254 / 72.;

OdDgModel::StorageUnitDescription description;
pModel->getStorageUnit(description);

//calculate size in master units
width = width * description.m_numerator / description.m_denominator;
height = height * description.m_numerator / description.m_denominator;

raster->setExtent(OdGePoint2d(width, height));
int iDefaultDpi = 96; //96 is default system resolution
#if defined (ODA_WINDOWS)
  DISPLAY_DEVICE dd;
  dd.cb = sizeof(dd);
  if (EnumDisplayDevices(NULL, 0, &dd, 0) != FALSE)
  {
    HDC hDC = CreateDC(dd.DeviceName, dd.DeviceName, NULL, NULL);
    int iDpiX = GetDeviceCaps(hDC, LOGPIXELSX);
    int iDpiY = GetDeviceCaps(hDC, LOGPIXELSY);
    DeleteDC(hDC);
    iDefaultDpi = iDpiX > iDpiY ? iDpiX : iDpiY;
  }
#endif
pRasterFrame->setScanningResolution(OdGePoint2d(iDefaultDpi, iDefaultDpi));
pRasterFrame->setRasterReferenceId(raster->id());
pRasterFrame->setPrintableFlag(true);
pRasterFrame->setPageNumber(2);
for (OdUInt16 i = 0; i < layers.size(); i++)
  pRasterFrame->setPdfLayerVisibility(layers[i].layer_name, layers[i].is_on);
そして、それを再描画します。
pModel->fitToView();
添付ファイルをレンダリングするには、使用しているコンパイラが C++11 (vc14/15、gcc 4.8 以降など) をサポートしていれば、特別な操作は必要ありません。

今すぐ始める

ODAソフトウェアを60日間無料でお試しください。
リスクなし、クレジットカード不要。

無料で試す