关于 PDF 导出设置和打印设置的问答

通常,人们对通用打印设置和将绘图导出到 .pdf 文件的特定设置存在误解。这可能导致对如何实现绘图导出功能的误解,而且我们还会收到建议,要求将功能添加到 PDF 导出设置中,而这些功能实际上已存在于通用打印设置中。

首先,有必要了解,打印绘图不仅仅是打印到 .pdf 文件,尽管打印到 PDF 是一种非常流行的打印类型。打印绘图涉及必须应用于绘图的设置,无论打印类型如何,无论是打印到 .pdf 文件还是打印到纸张。例如,打印区域、绘图方向、比例系数等。这些设置的完整列表可在 OdaMfcApp 示例应用程序的“页面设置”对话框中找到。

image1

更多详细信息请参阅 docs.opendesign.com 上关于打印设置的文档(需要登录):

image2

要访问这些设置,请打开一个用于写入的 OdDbLayout,它继承自 OdDbPlotSettings:

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”对话框中找到:

image3

更多详细信息请参阅 docs.opendesign.com 上文档的相应部分(需要登录):

image4

这些设置易于使用:

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 导出设置,但它替换了一些通用打印设置: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 导出设置而实现的。

一个将这两种设置混淆的典型例子是打印绘图的透明元素。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);

最后,让我们看看影响导出和打印绘图视觉外观的另一组设置:打印样式。打印样式允许您设置线型、线宽、线连接和线端类型以及其他参数。打印样式可在 OdaMfcApp 示例应用程序的“打印样式表编辑器”对话框中找到:

image5

更多详细信息请参阅 docs.opendesign.com 上文档的相应部分(需要登录):

image6

要使用打印样式,请执行以下操作:

_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);

今天就开始行动

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

免费试用