哪些格式可转换为2D PDF?
PdfExport作为通用模块,支持转换所有ODA SDK兼容的格式。
是否支持直接导出到连接的打印机,还是仅能输出PDF格式?
PdfExport模块仅支持.pdf格式导出。但您可通过使用系统打印功能处理生成的PDF文件实现打印
ODA PDF导出功能是否支持自定义输入/数据库,还是必须使用特定格式?
PdfExport是独立于数据库的产品,理论上可支持任意格式。但实际使用时需注意:
需为特定实体实现必要的协议扩展
必须支持ODA矢量化处理流程
是否可以在导出PDF时添加自定义数据表格?
支持,可通过Publish API实现。具体示例参见OdPdfPublishEx(OdPdfPublishCADEx示例)
如何在PRC中创建点云?
可使用"OdPrcPointSet"类实现,参考示例代码位于:Prc\Examples\OdPrcCreate\RepresentationItemExample.cpp
查看方法:OdPrcRepresentationItemPtr CreatePointSet(OdPrcFileStructure &newStructure)
操作步骤(通过OdaPrcApp.exe):
文件/新建
工具/加载应用程序
加载OdPrcExCommands.tx
编辑/注册命令/Prc创建示例/RepresentationItemPointSet
执行矢量化
PRC导出3D PDF时,OdPrcPointSetPtr是否存在创建数量限制?
单个OdPrcPointSet对象的点数上限:UINT_MAX
OdPrcPointSet对象总数限制:仅受地址空间容量限制
我在查看Drawing\Imports\PdfImport\下的TD_PdfImport项目时,未能找到获取PDF文件路径并转换为DWG的示例。
关于PdfImport的使用示例,请参考ODA绘图调试工具(OdaMfcApp)和我们ODA的官方文档
在将DWG图纸导出为PDF时,白色填充多段线的颜色会反转为黑色。是否有方法避免这种颜色反转?
解决方案:通过设置背景色参数保持原始色彩,例如:
PDFExportParams params;
params.setBackground(ODRGB(127, 127, 127));
此配置将生成灰色背景的PDF文件
我尝试下载PdfModuleVI(VI-PDF...)模块时,收到权限不足无法访问的提示。
该VI PDF支持模块已停止维护。
可免费获取的Kernel归档文件中包含TD_Pdfium.dll模块(新PDF处理模块)
具体版本兼容性说明请查阅此处文档链接 here.
能否通过Publish SDK获取支持文本搜索的PDF?
ODA SDK可以提供将文本作为PDF字体导出的PDF文件,即使将文本导出为几何图元,也可以通过PDF注释使其可搜索。
使用OdPdfExportEx.exe将DWG导出为PDF时,3D文件(特别是着色模式)是否支持图层提取?
若执行常规导出(非PRC导出),着色模式会生成图片式PDF,此时:
图层功能自动禁用
所有内容被合并为单一图像
当导出结果为图片格式时,无法保留图层结构支持
是否可以使用Publish SDK编辑现有PDF文件?
不支持。Publish SDK仅提供新建PDF功能,无法修改已有文件
我正在使用OdPdfExportEx示例转换DWG文件。生成的PDF在以下方面存在差异:颜色和色调不一致/布局中缺失部分结构/模型页面没有渲染任何内部结构
这是因为您以ZoomToExtents模式导出模型空间(即使您没有设置,PlotSettings中也有"Extents"打印区域)。要解决此问题,您应该设置正确的打印设置,比如将打印区域设为"Display",并且不要在pdf导出标志中使用ZoomToExtents标志。
您可以在OdaMfcApp中检查图纸 - 我们导出的结果与渲染效果一致。当我们在OdaMfcApp中渲染时,我们也看不到墙上的砖块、地板上的木材和其他细节。在使用"着色"视觉样式(或"真实"样式)时,pdf导出是通过渲染成图片实现的,因此这个问题更像是渲染问题,与pdf导出本身无关。
是否可以更改"纸张"尺寸或使其自动适应块表记录中的几何图形?
当前尺寸(通常还包括位置)与导出的几何图形不匹配。
您可以计算模型空间实体的范围,并尝试据此设置图纸空间的纸张尺寸。但设置的纸张尺寸可能仍无法正确呈现您的几何图形。
或者您可以设置以下打印参数:
OdDbPlotSettings *pPlotSettings = pLayout.get();
OdDbPlotSettingsValidatorPtr pValidator = pPlotSettings->database()->appServices()->plotSettingsValidator();
pValidator->setStdScaleType(pPlotSettings, OdDbPlotSettings::kScaleToFit);
pValidator->setPlotType(pPlotSettings, OdDbPlotSettings::kExtents);
//可选
pValidator->setPlotCentered(pPlotSettings, true);
这样您的几何图形将缩放以适应所选纸张尺寸。
要更改纸张尺寸,您可以使用:
pPlotValidator->setCanonicalMediaName(pPlotSettings, OD_T("ISO_A1_(841.00_x_594.00_MM)"));
"ISO_A1_(841.00_x_594.00_MM)" - 这是众多可选尺寸之一。
能否为OdPrcMarkupTessBufText对象设置注释比例?
在PRC中,您只能通过以下模式控制OdPrcMarkupTessBufText的定位:
面视图模式(OdPrcMarkupTessBufFaceView)
所有绘图实体平行于屏幕(广告牌效果)
双精度参数点对应新坐标系原点,实体将平行于屏幕绘制
帧绘制模式(OdPrcMarkupTessBufFrame)
所有绘图实体在二维空间中定义
双精度参数点对应投影到屏幕的3D点,作为二维绘制坐标系原点
固定尺寸模式(OdPrcMarkupTessBufFixedSize)
所有实体以固定尺寸绘制(与缩放无关)
双精度参数点对应固定尺寸绘制的新坐标系原点
(注:Adobe对此模式支持存在兼容性问题)
矩阵模式(OdPrcMarkupTessBufMatrix)
所有实体通过双精度参数矩阵变换(右乘当前变换矩阵)
模式结束后恢复原有变换矩阵
应用方法:
将OdPrcMarkupTessBufText对象通过setNextInBlock()函数放入BufBlock,示例代码
OdPrcMarkupTessPtr CreatePlainTextMarkup (OdPrcFileStructure &pCurFS)
{
//...
pCurMkpTess = pCurMkpTess->setNext(OdPrcMarkupTessBufMatrix::createObject());
OdGePoint3d origP(3, 3, 0);
((OdPrcMarkupTessBufMatrixPtr &) pCurMkpTess)->setMatrix(OdGeMatrix3d::translation(origP.asVector()));
OdPrcMarkupTessBufTextPtr pBufText = OdPrcMarkupTessBufText::createObject();
ODA_VERIFY(pBufText->setText(L"Markup with Text type", 20, 4) == eOk);
((OdPrcMarkupTessBufMatrixPtr &) pCurMkpTess)->setNextInBlock(pBufText);
//...
}
是否可以通过编程方式在从PRC发布3D PDF时,修改BREP和/或MESH的透明度/半透明度(不透明度)?
支持。您可以使用以下函数实现:
OdPrcCategory1LineStyle::setTransparency (OdInt8 transparency);
仅针对相应对象的线型
如何为OdPrcPointSet对象中的单个点设置颜色?
PRC规范不支持此功能。解决方案:
需为不同颜色的点创建独立的PointSet对象
通过PartDefinition将它们合并为一个逻辑单元
...
OdPrcPartDefinitionPtr newDefinition = OdPrcPartDefinition::createObject();
pPrc_FileStructure->addObject(newDefinition);
...
for (int k = 0; k < num_point; ++k)
{
OdPrcPointSetPtr pPointSet = OdPrcPointSet::createObject();
pPointSet->styleId() = OdPrcCategory1LineStyle::createByColor(getR(k), getG(k), getB(k), *pPrc_FileStructure);
OdPrcName name;
name.setName(<point name>);
pPointSet->name() = name;
pPointSet->setBehaviourBitField(PRC_GRAPHICS_Show);
pPrc_FileStructure->addObject(pPointSet);
pPointSet->point().push_back(OdGePoint3d(X(k), Y(k), Z(k)));
newDefinition->representationItem().push_back(pPointSet->objectId());
}
newDefinition->setBehaviourBitField(PRC_GRAPHICS_Show);
pPrc_FileStructure->fileStructureTree().partDefinition().push_back(newDefinition->objectId());
...
如何在使用新版PDF导入器(PDFium)时提取光栅图像数据?
通过调用OdDbRasterImageDef::sourceFileName()方法可获取raster file的存储路径。
是否可以将DWG图纸按当前缩放状态(而非范围视图)导出为PDF?
此即为默认导出行为。具体参数控制请参阅PdfExportParams.h中的:
viewExtents()
setViewExtents()
当我尝试将.dwg图纸导出为.pdf文件时,若.dwg文件中存在未闭合括号的图层名称且启用了""enable layer support""功能,生成的.pdf文件显示为空。
实际上.pdf文件并非空文件,但Adobe®软件无法打开它。如果您从.pdf文件的图层名称中移除'( '字符,Adobe软件将能够加载该文件。
PdfModule是否支持将.pdf文件转换为.dwg文件?
不支持,但您可以使用免费的Pdfium模块。更多信息请参见此处 here.
是否可以在.prc文件中定义截面?
您可以使用OdPrcFromCurvesSurface类,它实现了.prc格式的PRC_TYPE_SURF_FromCurves类型,然后执行以下操作:
eval_point = first_curve.evaluate(param.u) + second_curve.evaluate(param.v) – origin;
另一种方法是使用NURB曲面(如果您有将截面曲面转换为NURB曲面的代码)。
请参阅OdPrcCreate示例应用程序(Prc/Examples/OdPrcCreate):
获取创建OdPrcFromFromCuresSurface类对象的示例代码(示例案例为"BrepModelFromCurves")。
获取创建OdPrcNurbsSurface类对象的示例代码(示例案例为"BrepModelNURBS")。
是否可以使用prcToPdf()方法创建多页PDF文件?
不支持,prcToPdf()方法不具备多页处理能力。您需要选用支持此功能的PDF处理工具包。需注意:
• 该方法并非PDF文件生成器,核心功能是将PRC内容插入PDF并渲染
• Teigha平台不提供类PDF编辑器的功能模块
如何在支持.prc的PDF导出中设置默认背景色?
当前版本不直接提供背景色设置功能,您只能在PDF文件层级进行修改。例如,若PDF文件包含以下数据结构:
<<
/Type /Annot
/Subtype /3D
/Rect [0 123 594 718]
/P 2 0 R
/F 68
/Contents 9 0 R
/3DA <<
/Transparent true
/A /PO
/D /XD
>>
/3DV <<
/Type /3DView
/XN (Default View)
/MS /M
/CO 3.334073
/C2W [1.000000 0.000000 0.000000 0.000000 1.000000 0.000000 0.000000 0.000000 -1.000000 7.712374 5.931818 3.334073 ]
/P <<
/Subtype /O
/OB /Max
/OS 0.519500
>>
>>
修改步骤如下:
将键值
/Transparent true
改为/Transparent false
在
/CO
和/C2W
键之间插入背景色定义:
/BG <<
/C [
0.0
0.0
1.0
]
/Subtype /SC
>>
如何从OdDbPdfReference对象获取PDF文件名?
参考以下代码片段:
OdDbObjectId idDefinition = pPdfRef->definitionId();
OdDbPdfDefinitionPtr pDef = idDefinition.openObject();
OdString strActiveFileName = pDef->activeFileName();
OdString strSourceFileName = pDef->sourceFileName();
此代码假设:
变量pPdfRef是指向OdDbPdfReference实例的智能指针
该实例已正确创建并添加到图纸数据库
我已将.dwg文件导出为.pdf文件并关闭了缩放到范围标志,但图纸未显示。为什么?
当缩放到范围标志设为false时,输出页面参数取自布局属性,自定义应用程序无法更改这些参数。
请参阅OdaMfcApp示例应用程序中的页面设置对话框。要打开页面设置对话框,请使用主菜单中的文件->页面设置。
Publish SDK是否支持导出为.pdf/a格式?
支持。PDF导出功能可生成归档级PDF/A文档,通过PDFExportParams类中的PDF_A_mode枚举指定版本。
当前支持的PDF/A版本:
• PDF/A-1b
• PDF/A-2b
透明度在导出到.pdf文件时不起作用。
透明度功能实际正常工作,但需要通过打印设置启用才能导出到.pdf文件:
OdDbLayoutPtr pLayout = OdDbBlockTableRecordPtr(pDb->getActiveLayoutBTRId().safeOpenObject())->getLayoutId().safeOpenObject(OdDb::kForWrite);
pLayout->setPlotTransparency(true);
exportToPdf(pDb);
请注意,从4.2版本开始,PDFExportParams类不再包含kSupportTransparency标志
是否支持将多个.dwg文件合并导出至单个.pdf文件(逐个图纸追加到同一PDF)?
现阶段不可行。
替代方案建议:
方案一:
合并多个图纸数据库为单一数据库后导出
方案二:
• 将各图纸数据库分别导出为独立.pdf文件
• 使用免费PDF工具合并输出文件
哪些绘图实体可以导出为支持.prc格式的.pdf文件?
所有绘图实体都可以以常规方式导出。
如何从.prc数据库生成.pdf文件?
请参考以下代码示例:
{
// open .prc for read and write access
OdStreamBufPtr pPrcStream = odrxSystemServices()->createFile("\\input.prc", Oda::kFileRead, Oda::kShareDenyNo, Oda::kOpenExisting);
// load special module
OdPrcToPdfModulePtr pModule = ::odrxDynamicLinker()->loadModule(OdPrcToPdfModuleName, false);
// create new .pdf file
OdStreamBufPtr pPdf = odrxSystemServices()->createFile("\\output.pdf", Oda::kFileWrite, Oda::kShareDenyNo, Oda::kCreateAlways);
// insert .prc to .pdf with some default paper and 3D View parameters.
OdResult res = pModule->prcToPdf(pPrcStream, pPdf);
ODA_ASSERT(res == eOk);
}
您也可以使用更复杂的prcToPdf()方法版本:
virtual OdResult prcToPdf(OdStreamBufPtr pPrcStream, OdStreamBufPtr pPdfStream, const OdGsPageParams &pdfParams, const OdGeMatrix3d &C2W, double CO, double OS);
有关C2W、CO和OS参数的更多信息,请参阅Adobe®便携式文档格式规范。 Adobe® Portable Document Format specification.
如何编辑.pdf文件中的内容或选择对象?
ODA不提供编辑.pdf文件或选择其中对象的功能。请使用第三方应用程序来实现这些目的。
如何在Publish SDK中创建带动画的PDF文件?
动画功能属于PDF格式特性而非PRC格式范畴。需注意:
• Publish SDK未提供PDF文件编辑API
• 当前版本不支持直接生成动画PDF
是否可以使用 prcToPdf() 方法压缩 .pdf 文件?
由 prcToPdf() 方法创建的 .pdf 文件已包含压缩内容。