2016-08-24 83 views
-1

这是我的代码,它创建了一个dwg文件的PDF,但它给了我MultiSheetPdf附近的错误。请给我同样的解决方案。 我认为链接是问题,但我无法确定请给我解决方案。代码在MultiSheetsPdf中给出错误

namespace Plottings 
    { 
    public class MultiSheetsPdf 
    { 
    private string dwgFile, pdfFile, dsdFile, outputDir; 
    private int sheetNum; 
    private IEnumerable<Layout> layouts; 

    private const string LOG = "publish.log"; 

    public MultiSheetsPdfPlot(string pdfFile, IEnumerable<Layout> layouts) 
    { 
     Database db = HostApplicationServices.WorkingDatabase; 
     this.dwgFile = db.Filename; 
     this.pdfFile = pdfFile; 
     this.outputDir = Path.GetDirectoryName(this.pdfFile); 
     this.dsdFile = Path.ChangeExtension(this.pdfFile, "dsd"); 
     this.layouts = layouts; 
    } 

    public void Publish() 
    { 
     if (TryCreateDSD()) 
     { 
      Publisher publisher = AcAp.Publisher; 
      PlotProgressDialog plotDlg = new PlotProgressDialog(false, this.sheetNum, true); 
      publisher.PublishDsd(this.dsdFile, plotDlg); 
      plotDlg.Destroy(); 
      File.Delete(this.dsdFile); 
     } 
    } 

    private bool TryCreateDSD() 
    { 
     using (DsdData dsd = new DsdData()) 
     using (DsdEntryCollection dsdEntries = CreateDsdEntryCollection(this.layouts)) 
     { 
      if (dsdEntries == null || dsdEntries.Count <= 0) return false; 

      if (!Directory.Exists(this.outputDir)) 
       Directory.CreateDirectory(this.outputDir); 

      this.sheetNum = dsdEntries.Count; 

      dsd.SetDsdEntryCollection(dsdEntries); 

      dsd.SetUnrecognizedData("PwdProtectPublishedDWF", "FALSE"); 
      dsd.SetUnrecognizedData("PromptForPwd", "FALSE"); 
      dsd.SheetType = SheetType.MultiDwf; 
      dsd.NoOfCopies = 1; 
      dsd.DestinationName = this.pdfFile; 
      dsd.IsHomogeneous = false; 
      dsd.LogFilePath = Path.Combine(this.outputDir, LOG); 

      PostProcessDSD(dsd); 

      return true; 
     } 
    } 

    private DsdEntryCollection CreateDsdEntryCollection(IEnumerable<Layout> layouts) 
    { 
     DsdEntryCollection entries = new DsdEntryCollection(); 

     foreach (Layout layout in layouts) 
     { 
      DsdEntry dsdEntry = new DsdEntry(); 
      dsdEntry.DwgName = this.dwgFile; 
      dsdEntry.Layout = layout.LayoutName; 
      dsdEntry.Title = Path.GetFileNameWithoutExtension(this.dwgFile) + "-" + layout.LayoutName; 
      dsdEntry.Nps = layout.TabOrder.ToString(); 
      entries.Add(dsdEntry); 
     } 
     return entries; 
    } 

    private void PostProcessDSD(DsdData dsd) 
    { 
     string str, newStr; 
     string tmpFile = Path.Combine(this.outputDir, "temp.dsd"); 

     dsd.WriteDsd(tmpFile); 

     using (StreamReader reader = new StreamReader(tmpFile, Encoding.Default)) 
     using (StreamWriter writer = new StreamWriter(this.dsdFile, false, Encoding.Default)) 
     { 
      while (!reader.EndOfStream) 
      { 
       str = reader.ReadLine(); 
       if (str.Contains("Has3DDWF")) 
       { 
        newStr = "Has3DDWF=0"; 
       } 
       else if (str.Contains("OriginalSheetPath")) 
       { 
        newStr = "OriginalSheetPath=" + this.dwgFile; 
       } 
       else if (str.Contains("Type")) 
       { 
        newStr = "Type=6"; 
       } 
       else if (str.Contains("OUT")) 
       { 
        newStr = "OUT=" + this.outputDir; 
       } 
       else if (str.Contains("IncludeLayer")) 
       { 
        newStr = "IncludeLayer=TRUE"; 
       } 
       else if (str.Contains("PromptForDwfName")) 
       { 
        newStr = "PromptForDwfName=FALSE"; 
       } 
       else if (str.Contains("LogFilePath")) 
       { 
        newStr = "LogFilePath=" + Path.Combine(this.outputDir, LOG); 
       } 
       else 
       { 
        newStr = str; 
       } 
       writer.WriteLine(newStr); 
      } 
     } 
     File.Delete(tmpFile); 
    } 

    [CommandMethod("PlotPdf")] 
    public void PlotPdf() 
    { 
     Database db = HostApplicationServices.WorkingDatabase; 
     short bgp = (short)Application.GetSystemVariable("BACKGROUNDPLOT"); 
     try 
     { 
      Application.SetSystemVariable("BACKGROUNDPLOT", 0); 
      using (Transaction tr = db.TransactionManager.StartTransaction()) 
      { 
       List<Layout> layouts = new List<Layout>(); 
       DBDictionary layoutDict = 
        (DBDictionary)db.LayoutDictionaryId.GetObject(OpenMode.ForRead); 
       foreach (DBDictionaryEntry entry in layoutDict) 
       { 
        if (entry.Key != "Model") 
        { 
         layouts.Add((Layout)tr.GetObject(entry.Value, OpenMode.ForRead)); 
        } 
       } 
       layouts.Sort((l1, l2) => l1.TabOrder.CompareTo(l2.TabOrder)); 

       string filename = Path.ChangeExtension(db.Filename, "pdf"); 

       MultiSheetsPdf plotter = new MultiSheetsPdf(filename, layouts); 
       plotter.Publish(); 

       tr.Commit(); 
      } 
     } 
     catch (System.Exception e) 
     { 
      Editor ed = Application.DocumentManager.MdiActiveDocument.Editor; 
      ed.WriteMessage("\nError: {0}\n{1}", e.Message, e.StackTrace); 
     } 
     finally 
     { 
      Application.SetSystemVariable("BACKGROUNDPLOT", bgp); 
     } 
    } 
} 
} 
+0

能否请你告诉你得到了什么* *错误? – MrClan

+0

CS1520 \t方法必须具有返回类型\t CS1729 \t'MultiSheetsPdf'不包含带有2个参数的构造函数 – jackson

+0

好吧,因为您打算在那里定义构造函数。尝试更改您的**公共MultiSheetsPdfPlot(字符串pdfFile,IEnumerable 布局)**为**公共MultiSheetsPdf(字符串pdfFile,IEnumerable 布局)**。 – MrClan

回答

0

在这里你去:(尽量注意和了解您的版本和这个版本之间的差异)

namespace Plottings 
    { 

    public class MultiSheetsPdf 
    { 
     private string dwgFile, pdfFile, dsdFile, outputDir; 
     private int sheetNum; 
     private IEnumerable<Layout> layouts; 

     private const string LOG = "publish.log"; 
     public MultiSheetsPdf(){} 
     public MultiSheetsPdf(string pdfFile, IEnumerable<Layout> layouts) 
     { 
      Database db = HostApplicationServices.WorkingDatabase; 
      this.dwgFile = db.Filename; 
      this.pdfFile = pdfFile; 
      this.outputDir = Path.GetDirectoryName(this.pdfFile); 
      this.dsdFile = Path.ChangeExtension(this.pdfFile, "dsd"); 
      this.layouts = layouts; 
     } 

     public void Publish() 
     { 
      if (TryCreateDSD()) 
      { 
       Publisher publisher = AcAp.Publisher; 
       PlotProgressDialog plotDlg = new PlotProgressDialog(false, this.sheetNum, true); 
       publisher.PublishDsd(this.dsdFile, plotDlg); 
       plotDlg.Destroy(); 
       File.Delete(this.dsdFile); 
      } 
     } 

     private bool TryCreateDSD() 
     { 
      using (DsdData dsd = new DsdData()) 
      using (DsdEntryCollection dsdEntries = CreateDsdEntryCollection(this.layouts)) 
      { 
       if (dsdEntries == null || dsdEntries.Count <= 0) return false; 

       if (!Directory.Exists(this.outputDir)) 
        Directory.CreateDirectory(this.outputDir); 

       this.sheetNum = dsdEntries.Count; 

       dsd.SetDsdEntryCollection(dsdEntries); 

       dsd.SetUnrecognizedData("PwdProtectPublishedDWF", "FALSE"); 
       dsd.SetUnrecognizedData("PromptForPwd", "FALSE"); 
       dsd.SheetType = SheetType.MultiDwf; 
       dsd.NoOfCopies = 1; 
       dsd.DestinationName = this.pdfFile; 
       dsd.IsHomogeneous = false; 
       dsd.LogFilePath = Path.Combine(this.outputDir, LOG); 

       PostProcessDSD(dsd); 

       return true; 
      } 
     } 

     private DsdEntryCollection CreateDsdEntryCollection(IEnumerable<Layout> layouts) 
     { 
      DsdEntryCollection entries = new DsdEntryCollection(); 

      foreach (Layout layout in layouts) 
      { 
       DsdEntry dsdEntry = new DsdEntry(); 
       dsdEntry.DwgName = this.dwgFile; 
       dsdEntry.Layout = layout.LayoutName; 
       dsdEntry.Title = Path.GetFileNameWithoutExtension(this.dwgFile) + "-" + layout.LayoutName; 
       dsdEntry.Nps = layout.TabOrder.ToString(); 
       entries.Add(dsdEntry); 
      } 
      return entries; 
     } 

     private void PostProcessDSD(DsdData dsd) 
     { 
      string str, newStr; 
      string tmpFile = Path.Combine(this.outputDir, "temp.dsd"); 

      dsd.WriteDsd(tmpFile); 

      using (StreamReader reader = new StreamReader(tmpFile, Encoding.Default)) 
      using (StreamWriter writer = new StreamWriter(this.dsdFile, false, Encoding.Default)) 
      { 
       while (!reader.EndOfStream) 
       { 
        str = reader.ReadLine(); 
        if (str.Contains("Has3DDWF")) 
        { 
         newStr = "Has3DDWF=0"; 
        } 
        else if (str.Contains("OriginalSheetPath")) 
        { 
         newStr = "OriginalSheetPath=" + this.dwgFile; 
        } 
        else if (str.Contains("Type")) 
        { 
         newStr = "Type=6"; 
        } 
        else if (str.Contains("OUT")) 
        { 
         newStr = "OUT=" + this.outputDir; 
        } 
        else if (str.Contains("IncludeLayer")) 
        { 
         newStr = "IncludeLayer=TRUE"; 
        } 
        else if (str.Contains("PromptForDwfName")) 
        { 
         newStr = "PromptForDwfName=FALSE"; 
        } 
        else if (str.Contains("LogFilePath")) 
        { 
         newStr = "LogFilePath=" + Path.Combine(this.outputDir, LOG); 
        } 
        else 
        { 
         newStr = str; 
        } 
        writer.WriteLine(newStr); 
       } 
      } 
      File.Delete(tmpFile); 
     } 

     [CommandMethod("PlotPdf")] 
     public void PlotPdf() 
     { 
      Database db = HostApplicationServices.WorkingDatabase; 
      short bgp = (short)Application.GetSystemVariable("BACKGROUNDPLOT"); 
      try 
      { 
       Application.SetSystemVariable("BACKGROUNDPLOT", 0); 
       using (Transaction tr = db.TransactionManager.StartTransaction()) 
       { 
        List<Layout> layouts = new List<Layout>(); 
        DBDictionary layoutDict = 
         (DBDictionary)db.LayoutDictionaryId.GetObject(OpenMode.ForRead); 
        foreach (DBDictionaryEntry entry in layoutDict) 
        { 
         if (entry.Key != "Model") 
         { 
          layouts.Add((Layout)tr.GetObject(entry.Value, OpenMode.ForRead)); 
         } 
        } 
        layouts.Sort((l1, l2) => l1.TabOrder.CompareTo(l2.TabOrder)); 

        string filename = Path.ChangeExtension(db.Filename, "pdf"); 

        MultiSheetsPdf plotter = new MultiSheetsPdf(filename, layouts); 
        plotter.Publish(); 

        tr.Commit(); 
       } 
      } 
      catch (System.Exception e) 
      { 
       Editor ed = Application.DocumentManager.MdiActiveDocument.Editor; 
       ed.WriteMessage("\nError: {0}\n{1}", e.Message, e.StackTrace); 
      } 
      finally 
      { 
       Application.SetSystemVariable("BACKGROUNDPLOT", bgp); 
      } 
     } 
    } 
} 
+0

由于方法必须有返回类型,所以在构造函数“public MultiSheetsPdf(){}”上仍然给出错误。 – jackson

+0

抱歉错误的放置。将该代码移动到现有构造函数上方。现在它不应该有任何构造函数相关的错误。 – MrClan

+0

工作。谢谢。 – jackson