大規模で複雑な図面全体ではなく、その一部をPDFにエクスポートできます。たとえば、以下で青色にハイライト表示されている選択したブロックのみをエクスポートしたい場合があります。
図面のPlotSettings内のkWindow領域を使用してPDFにエクスポートできます(「ウィンドウプロット領域をPDFにエクスポート」で説明されているように)。ただし、この領域に他のエンティティまたはその一部がある場合、結果のPDFファイルに表示される可能性があります。
特定のエンティティのみをPDFにエクスポートするより信頼性の高い方法は、OdDbSelectionSetオブジェクトを使用することです。
たとえば、次のコードフラグメントを使用します。
- データベース内の図面コンテンツを読み込みます。
OdDbDatabasePtr pDb = pHostApp->readFile("SelectionSet.dwg"); - PDFエクスポートパラメータを設定します。
OdPdfExportModulePtr pPdfModule = ::odrxDynamicLinker()->loadApp(OdPdfExportModuleName); OdPdfExportPtr exporter = pPdfModule->create(); PDFExportParams params; params.setDatabase(pDb); params.setExportFlags(PDFExportParams::kZoomToExtentsMode); - 空のOdSelectionSet配列を作成します。次に、OdSelectionSetオブジェクトを作成し、必要なエンティティの識別子をそれに付加します。その後、OdSelectionSetオブジェクトを配列に付加し、その配列をPDFExportParamsオブジェクトに関連付けます。
注: 上記のコードフラグメントで使用されているデータベースハンドル (0xBE および 0xAB) はハードコードされています。代わりに、ご自身の図面データベースのハンドルを使用してください。OdArraypSSets; OdDbSelectionSetPtr pSs = OdDbSelectionSet::createObject(pDb); pSs->append(pDb->getOdDbObjectId(OdDbHandle(0xBE))); pSs->append(pDb->getOdDbObjectId(OdDbHandle(0xAB))); pSSets.append(pSs); params.setSelectionSetsArray(pSSets);
- 図面をエクスポートします。
OdUInt32 errCode = exporter->exportPdf(params);
出力PDFドキュメント:
上記の例は、1つのレイアウトのみを持つ図面の一部をエクスポートする方法を示しています。複数のレイアウトを含む可能性のある、より複雑な図面から特定のエンティティをエクスポートするための一般的なアプローチを検討してみましょう。
複数のレイアウトをエクスポートするには、エクスポートするレイアウトの名前を含む配列を作成します。各レイアウトは、出力PDFファイル内で個別のページに変換されます。
PDFExportParamsクラスインターフェースは、PDFファイルにエクスポートされる元の図面レイアウトのリストを管理するメソッドを提供します。
- addLayout() — エクスポートされたレイアウトの配列に新しいレイアウト名を追加します。
- setLayouts() — エクスポートされたレイアウトの名前を含む文字列配列を設定します。
- layouts() — PDFExportParams オブジェクトに関連付けられた、エクスポートされたレイアウトの名前を含む現在の文字列配列を返します。
レイアウトのエクスポートに関する追加情報については、「PDF のレイアウトのエクスポートとページ パラメーターの設定」を参照してください。
エクスポートするレイアウトの配列を設定した後、エクスポートしたいレイアウト上のエンティティを指定できます。一部のレイアウトでは、すべてのエンティティをエクスポートしたい場合があります。どちらの場合も、OdDbSelectionSetオブジェクトの配列を作成する必要があります。この配列の各要素は、図面データベースからエクスポートされたレイアウトに対応し、PDFファイルにエクスポートされるレイアウトエンティティの識別子を含みます。
OdDbSelectionSet配列は、エクスポートしたい図面レイアウトの配列と同じサイズである必要があります。レイアウト全体(レイアウトに属するすべてのエンティティ)をエクスポートするには、対応するOdDbSelectionSet要素が空である必要があります(選択セットにはエンティティ識別子が含まれていません)。
PDFExportParamsオブジェクト内のエクスポートされるレイアウトの配列には、エクスポートされるすべてのレイアウトの名前を持つ要素が含まれている必要があります。
たとえば、図面に2つのレイアウトがあり、最初のレイアウトに属する特定のエンティティと、2番目のレイアウトのすべてのエンティティをエクスポートしたいとします。エクスポートされるレイアウトの配列には、すでにレイアウト名を持つ2つの要素が含まれていると仮定します。この場合、エクスポートされるエンティティが最初のレイアウトにのみ存在する場合でも、2つのOdDbSelectionSetオブジェクトを作成する必要があります。次に、最初のOdDbSelectionSetオブジェクトに最初のレイアウトからエクスポートするエンティティの識別子を追加し、2番目のOdDbSelectionSetオブジェクトは空のままにします。
OdDbSelectionSet配列をエクスポートパラメータを処理するPDFExportParamsクラスインスタンスに関連付けるには、setSelectionSetsArray()メソッドを呼び出します。
このアプローチには制限があります。選択されたエンティティ(またはブロック)は、モデル空間やペーパー空間などのトップレベルブロックに属している必要があります。エンティティが非トップレベルブロックに属している場合、そのトップレベルの親ブロックがOdDbSelectionSetオブジェクトに追加されない限り、PDFにはエクスポートされません。逆に、トップレベルブロックがOdDbSelectionSetオブジェクトに追加されると、そのすべての子エンティティがエクスポートされます。
部分的なPDFエクスポートに対するPRCサポート
OdDbSelectionSet配列を使用した部分的なPDFエクスポートは、PRCデータにも適用されます。たとえば、下の図は2つのソリッドを持つ図面を示しています。
上記のように、選択したソリッドの識別子をOdDbSelectionSet配列に追加し、ソリッドエンティティのみを3D PDF (PRC) 形式にエクスポートできます。
PRCを使用したPDFエクスポートの詳細については、「PRCを使用したPDFへのエクスポート」を参照してください。