首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >改为Pdf转换

改为Pdf转换
EN

Stack Overflow用户
提问于 2016-09-27 09:20:27
回答 2查看 1.4K关注 0票数 0

我正在尝试自动化在Revit 2017中使用Revit和空闲事件处理程序打印pdf的过程。我正在使用OpenDocumentFile方法打开修改文档,而不是在任何地方使用ActiveUIDocument。此进程正在生成无效的操作异常。我不知道为什么会出现异常,或者是否允许使用Revit。请帮帮忙。谢谢。

日刊产出:

代码语言:javascript
复制
' 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) 

代码背后:

代码语言:javascript
复制
 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();
                        }

                } 
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-09-27 11:54:52

除了IsPrintable字段之外,您还需要检查视图是否实际上是一个视图模板。使用IsTemplate来检查这一点。

票数 2
EN

Stack Overflow用户

发布于 2016-09-29 08:34:18

这对我来说太费解了,也许对Revit也是如此。

您有一个过滤过的元素收集器。

在对这些元素进行迭代的过程中,您尝试启动一个事务+打印。

保持简单和聪明!

首先,分离过滤元素迭代、事务处理和打印三种完全独立的操作。

然后想想这三者是如何相互作用的。

尽量减少互动,你的问题就应该得到解决。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39720839

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档