一般のプロット設定と、図面を.pdfファイルにエクスポートするための特定の設定との間には、しばしば誤解が生じます。これにより、図面をエクスポートする機能の実装方法について誤解が生じたり、その機能がすでに一般のプロット設定に存在する場合でも、PDFエクスポート設定に機能を追加するよう提案を受けることがあります。
まず、図面のプロットは.pdfファイルへのプロットだけではないことを理解する必要があります。PDFへの印刷は非常に一般的な印刷タイプですが、図面のプロットには、.pdfファイルであろうと紙であろうと、印刷の種類に関わらず図面に適用されなければならない設定が含まれます。例えば、プロット領域、図面方向、尺度係数などです。これらの設定の完全なリストは、OdaMfcAppサンプルアプリケーションのページ設定ダイアログで利用できます。
プロット設定に関する詳細は、docs.opendesign.comのドキュメントに記載されています(ログインが必要です):
これらの設定にアクセスするには、OdDbPlotSettingsから継承された書き込み用のOdDbLayoutを開きます。
OdDbObjectId idLayout = OdDbBlockTableRecordPtr(pDb->getActiveLayoutBTRId().safeOpenObject())->getLayoutId();
OdDbLayoutPtr pLayout = idLayout.safeOpenObject(OdDb::kForWrite);
OdDbPlotSettings *pPlotSettings = pLayout.get();
そして、PlotSettingsValidatorを使用して必要なパラメータを設定します。
OdDbPlotSettingsValidatorPtr pValidator = pDb->appServices()->plotSettingsValidator();
pValidator->setPlotType(pPlotSettings, OdDbPlotSettings::kWindow);
pValidator->setPlotWindowArea(pPlotSettings,min_x, min_y, max_x, max_y);
pValidator->setPlotCentered(pPlotSettings, true);
pValidator->setStdScaleType(pPlotSettings, OdDbPlotSettings::kScaleToFit);
またはOdDbLayout自体を使用します。
pLayout->setPrintLineweights(bUseLW);
pLayout->setPlotPlotStyles(bUsePS);
pLayout->setScaleLineweights(bScaleLW);
次に、図面をエクスポートします。
exportToPdf(pDb);
次に、PDFエクスポート設定自体を見てみましょう。この設定グループはPDFエクスポートに適用され、他の種類の印刷には関係ありません。設定には、データ圧縮、テキストエクスポート(ジオメトリとして、またはテキストとして)、長期アーカイブ(pdf/a)またはWeb公開(線形化)のためのドキュメント準備などが含まれます。これらの設定の完全なリストは、OdaMfcAppサンプルアプリケーションのPDFエクスポートダイアログで利用できます。
詳細は、docs.opendesign.comのドキュメントの該当セクションに記載されています(ログインが必要です):
これらの設定は簡単に使用できます。
PDFExportParams params;
params.setVersion(PDFExportParams::kPDFv1_5);
params.setExportFlags(PDFExportParams::PDFExportFlags(
PDFExportParams::kSHXTextAsGeometry | PDFExportParams::kTTFTextAsGeometry | PDFExportParams::kUseHLR | PDFExportParams::kFlateCompression));
params.setGeomDPI(m_iGeomRes);
params.setDatabase(pDb);
PDFエクスポート設定に属しながら、一部の一般的なプロット設定を置き換える設定が1つあります。それはPDFExportParams::kZoomToExtentsModeです。この設定は、特定の用紙サイズに適用できるプロット設定OdDbPlotSettings::kExtents、OdDbPlotSettings::kScaleToFit、PlotCentered == trueとほぼ同等です。
params.setExportFlags(PDFExportParams::PDFExportFlags(PDFExportParams::kZoomToExtentsMode));
OdGsPageParams pageParams;
pageParams.set(dPaperW, dPaperH);
params.pageParams().resize(nPages, pageParams);
これは、Teighaで最も使いやすいPDFエクスポート設定となるように特別に実装されました。
これら2種類の混同の良い例は、図面の透明な要素の印刷です。kExportTrancparencyは、元々誤ってPDFエクスポート設定に追加されました。
params.setExportFlags(PDFExportParams::PDFExportFlags(PDFExportParams::kExportTrancparency));
しかし、Teigha 4.2.1では、kExportTrancparencyはプロット設定の正しい位置にありました。その後、透明度をサポートする.pdfファイルの作成に関して多くの質問がありました。一方、PDFエクスポート設定を使用して透明度をサポートするよりも、それほど難しくはありません。
OdDbLayoutPtr pLayout = OdDbBlockTableRecordPtr(pDb->getActiveLayoutBTRId().safeOpenObject())->getLayoutId().safeOpenObject(OdDb::kForWrite);
pLayout->setPlotTransparency(bPrintTransparency);
最後に、エクスポートおよび印刷された図面の視覚的な外観に影響を与えるもう1つの設定グループであるプロットスタイルについて見てみましょう。プロットスタイルを使用すると、線種、線の太さ、線の結合タイプ、線の終端タイプ、その他のパラメータを設定できます。プロットスタイルは、OdaMfcAppサンプルアプリケーションのプロットスタイルテーブルエディタダイアログで利用できます。
詳細は、docs.opendesign.comのドキュメントの該当セクションに記載されています(ログインが必要です):
プロットスタイルを使用するには、次の手順を実行します。
_tputenv(L"DDPLOTSTYLEPATHS=Path_to_plotstyles_directory");
OdDbLayoutPtr pLayout = OdDbBlockTableRecordPtr(pDb->getActiveLayoutBTRId().safeOpenObject())->getLayoutId().safeOpenObject(OdDb::kForWrite);
OdDbPlotSettingsValidatorPtr pValidator = pDb->appServices()->plotSettingsValidator();
pValidator->refreshLists(0);
pValidator->setCurrentStyleSheet((OdDbPlotSettings*)pLayout, "plotstyle.stb");
pLayout->setPlotPlotStyles(true);
exportToPdf(pDb);