2016-08-24 12 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