APS环境下Revit 2021及更早版本平面图PDF打印方案咨询
APS环境下兼容旧版Revit(2019/2020)生成PDF平面图的方案
我开发了一款Revit插件,可将平面图用作PDF背景。通过SubmitPrint方法和PrintManager配置,借助PDF995/Adobe Acrobat虚拟打印机驱动,可将视图打印为PDF并作为Xyicon应用的背景,核心代码如下:
using (var tr = new Transaction(document, "Xyicon printer settings creation")) { tr.Start(); document.PrintManager.SelectNewPrintDriver(printer); var printManager = document.PrintManager; printManager.PrintRange = PrintRange.Select; ViewSheetSetting viewSheetSetting = printManager.ViewSheetSetting; viewSheetSetting.CurrentViewSheetSet.Views = viewSet; viewSheetSetting.SaveAs("Xyicon_ViewSet"); PaperSize paperSize = null; foreach (PaperSize ps in printManager.PaperSizes) { if (ps.Name.Equals("ARCH E")) { paperSize = ps; break; } } printManager.PrintSetup.CurrentPrintSetting.PrintParameters.PaperSize = paperSize; printManager.PrintSetup.CurrentPrintSetting.PrintParameters.PaperPlacement = PaperPlacementType.Center; printManager.PrintSetup.CurrentPrintSetting.PrintParameters.ZoomType = ZoomType.FitToPage; printManager.PrintSetup.CurrentPrintSetting.PrintParameters.PageOrientation = PageOrientationType.Landscape; printManager.PrintSetup.CurrentPrintSetting.PrintParameters.HiddenLineViews = HiddenLineViewsType.VectorProcessing; printManager.PrintSetup.CurrentPrintSetting.PrintParameters.RasterQuality = RasterQualityType.High; printManager.PrintSetup.CurrentPrintSetting.PrintParameters.ColorDepth = ColorDepthType.GrayScale; printManager.PrintSetup.CurrentPrintSetting.PrintParameters.HideCropBoundaries = false; printManager.PrintSetup.CurrentPrintSetting.PrintParameters.HideReforWorkPlanes = false; printManager.PrintSetup.CurrentPrintSetting.PrintParameters.HideUnreferencedViewTags = false; printManager.PrintToFileName = viewPdfFilePath; printManager.PrintToFile = true; printManager.Apply(); printManager.PrintSetup.SaveAs("Xyicon_PinterSettings"); tr.Commit(); } using (var tr = new Transaction(document, "Print selected view")) { tr.Start(); var printManager = document.PrintManager; if (elementIdListToHide.Count != 0) view.HideElementsTemporary(elementIdListToHide); document.Regenerate(); printManager.SubmitPrint(); while (!IsPDFHeaderExists(viewPdfFilePath)) Thread.Sleep(1000); tr.Commit(); }
近期将插件迁移至APS(Autodesk Platform Services)并与Xyicon集成时,遇到关键视图打印问题:APS无法支持Revit 2021及更早版本(用户仍在使用2020、2019等版本)的平面图打印。新版Revit提供的PDFExport功能可生成PDF,但无法兼容旧版本。
我考虑过几种实现方式:
- 在APS工作项处理期间将旧版本升级至新版本(升级耗时久,尤其关联文件较多时)
- 在APS服务器上安装虚拟打印机(不确定是否可行)
- 先导出DWG,再用AutoCAD的“DWG to PDF.pc3”打印机生成PDF(耗时久且需跨存储桶转移文件)
- 使用ForgeViewer(仅支持3D,无法处理2D平面图)
可行解决方案
1. 自定义APS工作容器部署虚拟打印机
APS支持创建自定义工作项镜像,你可以在镜像中预装轻量级无界面虚拟打印机(如PDFCreator、CutePDF Writer),并提前配置好打印参数(纸张尺寸、灰度、适配方式等)。这样处理旧版Revit文件时,可直接复用原有的PrintManager+SubmitPrint逻辑生成PDF,和本地插件行为一致。需注意:
- 选择支持无桌面环境运行的虚拟打印机,避免弹窗或交互依赖
- 在镜像中预配置打印机默认设置,减少代码中的参数调整
- 测试容器内打印机的输出稳定性,确保PDF生成完整
2. 先导出DWF再转PDF
旧版Revit(2019/2020)支持通过API导出2D视图为DWF格式,在APS工作项中可借助开源转换工具(如libdwf)将DWF转为PDF:
- 调用
Document.Export方法将目标视图导出为DWF - 在工作项中执行DWF转PDF的转换命令
- 转换完成后直接交付PDF给Xyicon应用
3. 按Revit版本分支处理
针对不同版本的Revit文件,在APS工作项中匹配对应版本的引擎:
- 对于Revit 2021+文件,直接使用
PDFExportAPI高效生成PDF - 对于2021以下版本,使用预装虚拟打印机的容器执行原打印逻辑
这种方式兼顾兼容性和效率,避免不必要的文件升级或转换步骤
内容的提问来源于stack exchange,提问作者SergeySSH
相关产品推荐
相关产品推荐

