K.R Posted October 10, 2019 Report Share Posted October 10, 2019 vernum = "2019.01.28(41803)_x64" Witam, czy ktoś korzystał z klasy publisher do wydruku do PDF? nie mogę w żaden sposób zmusić Zwcada do wydruku do PDF. Quote Link to comment Share on other sites More sharing options...
kruszynski Posted October 10, 2019 Report Share Posted October 10, 2019 Proszę napisać coś więcej. Co się dzieje ? A co dziać się powinno, ale się nie dzieje? Quote Link to comment Share on other sites More sharing options...
K.R Posted October 10, 2019 Author Report Share Posted October 10, 2019 Poniższy kod (działający w ACAD) powinien jako wyjście dać wielostronicowy plik PDF umieszczony w katalogu rysunku: using (Transaction tr = db.TransactionManager.StartTransaction()) { DsdEntryCollection collection = new DsdEntryCollection(); foreach (ObjectId layoutId in layoutList) { Layout layout = tr.GetObject(layoutId, OpenMode.ForRead) as Layout; if (!layout.LayoutName.Contains("Model") && layout.LayoutName.Contains(layoutName)) { DsdEntry entry = new DsdEntry { DwgName = doc.Name, Layout = layout.LayoutName, Title = layout.LayoutName, Nps = layout.PlotSettingsName, NpsSourceDwg = doc.Name }; collection.Add(entry); } } string pdfFile = (path == "" ? dwgPath : path) + name + ".pdf"; DsdData dsdData = new DsdData { SheetType = SheetType.MultiPdf, ProjectPath = path == "" ? dwgPath : path, DestinationName = (path == "" ? dwgPath : path) + name + ".DWG", IncludeLayerInfo = true, PromptForDwfName = false }; string dsdFile = dwgPath + name + ".dsd"; if (System.IO.File.Exists(dsdFile)) System.IO.File.Delete(dsdFile); dsdData.SetDsdEntryCollection(collection); string str, newStr; string tmpFile = Path.Combine(dwgPath, "temp.dsd"); dsdData.WriteDsd(tmpFile); using (StreamReader reader = new StreamReader(tmpFile)) using (StreamWriter writer = new StreamWriter(dsdFile)) { while (!reader.EndOfStream) { str = reader.ReadLine(); if (str.Contains("Has3DDWF")) { newStr = "Has3DDWF=0"; } else if (str.Contains("OriginalSheetPath")) { newStr = "OriginalSheetPath=" + dsdData.DestinationName; } else if (str.Contains("OUT")) { newStr = "OUT=" + dwgPath; } 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(dwgPath, "print.log"); } else { newStr = str; } writer.WriteLine(newStr); } } File.Delete(tmpFile); dsdData.ReadDsd(dsdFile); if (System.IO.File.Exists(pdfFile)) System.IO.File.Delete(pdfFile); using (PlotConfig pc = PlotConfigManager.SetCurrentConfig("DWG to PDF.pc5")) { publisher.PublishExecute(dsdData, pc); } tr.Commit(); } Przygotowany plik .dsd jest poprawny. Wykonanie metody publisher.PublishExecute(dsdData, pc); nie powoduje nic, ani błędu, ani poprawnego działania, czyli wyświetlenia okna z postępem drukowania. Quote Link to comment Share on other sites More sharing options...
kruszynski Posted October 14, 2019 Report Share Posted October 14, 2019 Nie pracowałem wcześniej z DSD, więc nie umiem powiedzieć nic pewnego, ale chciałem dopytać w ZWSOFT o szczegóły. Przesłany kod, to tylko fragment większej całości. Zakładam, że mógłbym obudować ten fragment całością, którą dałoby się skompilować, i przetestować, ale mogłoby się okazać, że coś zrobiliśmy inaczej, co da różne wyniki. W związku z tym proszę o przesłanie szerszego fragmentu, pozwoli na wierne odtworzenie sytuacji. Quote Link to comment Share on other sites More sharing options...
kruszynski Posted October 14, 2019 Report Share Posted October 14, 2019 Mam przykład, który tworzy PDFa z aktualnego rysunku. Może się przydać. Nie wykorzystuje Dsd, ale tworzy PDFa. TestPlot.rar Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.