Rekomendowane odpowiedzi

Opublikowano

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.

 

Opublikowano

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.

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się