Revit到Pdf的转换 [英] Revit to Pdf Conversion

查看:167
本文介绍了Revit到Pdf的转换的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试使用带有空闲事件处理程序的Revit API在Revit 2017中自动执行pdf打印过程.我正在使用OpenDocumentFile方法打开revit文档,而不在任何地方使用ActiveUIDocument.此过程正在生成无效的操作异常.我不确定为什么会给出异常或是否允许使用Revit API.请帮忙.谢谢.

I am trying to automate the process of pdf printing in Revit 2017 using Revit API with Idling event handler. I am opening the revit document using OpenDocumentFile method and not using ActiveUIDocument anywhere. This process is generating Invalid Operation Exception. I am not sure why is it giving the exception or whether it is allowed using Revit API. Please help. Thanks.

日志输出:

' 1:< 0 <-pushSettingsIntoDriver 
' C 27-Sep-2016 14:45:22.641;   1:< ExportToRequestedFormat() : Pdf Print Exception : InvalidOperationExceptionAt least one view from the view set could not be printed.
' at Autodesk.Revit.DB.Document.Print(ViewSet views, View viewTemplate, Boolean useCurrentPrintSettings)
' at Autodesk.Revit.DB.Document.Print(ViewSet views, Boolean useCurrentPrintSettings)
' at RevitCommandListener.RevitCommandListenerService.ExportToRequestedFormat(UIApplication uiapp) 

后面的代码:

 using (FilteredElementCollector viewCollector = new FilteredElementCollector(doc))
 {
       ViewSet set = new ViewSet();
       ElementClassFilter viewFilter = null;
       PrintManager pm = PrinterDriverSettings.GetPrintManager(doc, _ifcSaveFile, PrinterDriver.Bullzip);

       switch (_pdfExportSetting)
       {
           case PDFExportOptions.SheetsOnly:
                viewFilter = new ElementClassFilter(typeof(Autodesk.Revit.DB.ViewSheet));
                viewCollector.WherePasses(viewFilter);

                foreach (Autodesk.Revit.DB.ViewSheet vw in viewCollector)
                {
                      if (vw.CanBePrinted && !vw.IsTemplate)
                           set.Insert(vw);
                }
                break;

           case PDFExportOptions.ViewsOnly:
                viewFilter = new ElementClassFilter(typeof(Autodesk.Revit.DB.View));
                viewCollector.WherePasses(viewFilter);

                foreach (Autodesk.Revit.DB.View vw in viewCollector)
                {
                      if (vw.CanBePrinted  && !vw.IsTemplate && !(vw.GetType() == typeof(ViewSheet))) //Skip sheets
                          set.Insert(vw);
                }
                      break;


           case PDFExportOptions.ViewsAndSheets:

                viewFilter = new ElementClassFilter(typeof(Autodesk.Revit.DB.View));
                viewCollector.WherePasses(viewFilter);

                foreach (Autodesk.Revit.DB.View vw in viewCollector)
                {
                    if (vw.CanBePrinted  && !vw.IsTemplate)
                         set.Insert(vw);
                }
                break;

            case PDFExportOptions.Sections:
                 viewFilter = new ElementClassFilter(typeof(Autodesk.Revit.DB.ViewSection));
                 viewCollector.WherePasses(viewFilter);
                 foreach (Autodesk.Revit.DB.ViewSection vw in viewCollector)
                 {
                      if (vw.CanBePrinted &&  && !vw.IsTemplate !(vw.ViewType == ViewType.Elevation))
                         set.Insert(vw);
                 }

                 break;

            case PDFExportOptions.Elevations:
                 viewFilter = new ElementClassFilter(typeof(Autodesk.Revit.DB.ViewSection));
                 viewCollector.WherePasses(viewFilter);

                 foreach (Autodesk.Revit.DB.ViewSection vw in viewCollector)
                 {
                      if (vw.CanBePrinted  && !vw.IsTemplate && vw.ViewType == ViewType.Elevation)
                      {
                           set.Insert(vw);
                      }

                  }
                  break;

             case PDFExportOptions.Schedules:
                  viewFilter = new ElementClassFilter(typeof(ViewSchedule));
                  viewCollector.WherePasses(viewFilter);

                  foreach (ViewSchedule vw in viewCollector)
                  {
                       if (vw.CanBePrinted && !vw.IsTemplate)
                            set.Insert(vw);
                  }
                  break;
               }

               if (_pdfExportSetting != PDFExportOptions.None && set.Size > 0)
               {
                    Transaction tr = new Transaction(doc, "tr_pdf_print");

                        try
                        {
                             tr.Start();
                             doc.Print(set, true);
                             tr.Commit();
                        }
                        catch(Autodesk.Revit.Exceptions.InvalidOperationException iopex)
                        {
                                uiapp.Application.WriteJournalComment("ExportToRequestedFormat() : Pdf Print Exception : InvalidOperationException" + iopex.Message + Environment.NewLine + iopex.StackTrace, true);
                        }
                            catch(Autodesk.Revit.Exceptions.ArgumentNullException argsex)
                        {
                                uiapp.Application.WriteJournalComment("ExportToRequestedFormat() : Pdf Print Exception : ArgumentNullException" + argsex.Message + Environment.NewLine + argsex.StackTrace, true);
                        }
                            catch(Autodesk.Revit.Exceptions.ArgumentException arex)
                        {
                                uiapp.Application.WriteJournalComment("ExportToRequestedFormat() : Pdf Print Exception : ArgumentException" + arex.Message + Environment.NewLine + arex.StackTrace, true);
                        }
                            catch(Autodesk.Revit.Exceptions.ApplicationException appex)
                        {
                                uiapp.Application.WriteJournalComment("ExportToRequestedFormat() : Pdf Print Exception : ApplicationException" + appex.Message + Environment.NewLine + appex.StackTrace, true);
                        }
                        finally
                        {
                            set.Dispose();
                            viewFilter.Dispose();
                            viewCollector.Dispose();
                            pm.Dispose();
                            tr.Dispose();
                        }

                } 

推荐答案

除了IsPrintable字段外,您还需要检查的另一件事是视图是否实际上是视图模板.使用IsTemplate进行检查.

In addition to the IsPrintable field, the other thing you'll need to check for is whether the View is actually a View Template. Use IsTemplate to check that.

这篇关于Revit到Pdf的转换的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆