PDF and PRC Questions

  1. FAQ
  2. »
  3. Products Overview
  4. »
  5. PDF and PRC Questions

哪些格式可转换为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):

 

  1. 文件/新建

  2. 工具/加载应用程序

  3. 加载OdPrcExCommands.tx

  4. 编辑/注册命令/Prc创建示例/RepresentationItemPointSet

  5. 执行矢量化

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
>>
>>

修改步骤如下:

  1. 将键值 /Transparent true 改为 /Transparent false

  2. /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 文件已包含压缩内容。