[返回博客](/cn/blog) # 关于 PDF 导出设置和打印设置的问答

Sergey Sherstnev 八月 24, 2017 [\#export](/cn/blog/tag/export) [\#pdf](/cn/blog/tag/pdf) [\#Example](/cn/blog/tag/example)

<a class="a2a_button_facebook"></a><a class="a2a_button_twitter"></a><a class="a2a_button_linkedin"></a>

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

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

![image1](/files/inline-images/image001_10.png)更多详细信息请参阅 docs.opendesign.com 上关于打印设置的文档（需要登录）：

![image2](/files/inline-images/image002_4.png)要访问这些设置，请打开一个用于写入的 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](/files/inline-images/image003_5.png)更多详细信息请参阅 docs.opendesign.com 上文档的相应部分（需要登录）：

![image4](/files/inline-images/image004_4.png)这些设置易于使用：

```
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](/files/inline-images/image005_2.png)更多详细信息请参阅 docs.opendesign.com 上文档的相应部分（需要登录）：

![image6](/files/inline-images/image006_2.png)要使用打印样式，请执行以下操作：

```
_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 天。  
无风险，无需信用卡。**

[免费试用](https://www.opendesign.com/cn/free-trial)
