Zwcad 2019 .NET publisher


K.R

Rekomendowane odpowiedzi

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.

 

Odnośnik do komentarza
Udostępnij na innych stronach

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.

Odnośnik do komentarza
Udostępnij na innych stronach

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Gość
Dodaj odpowiedź do tematu...

×   Wklejono zawartość z formatowaniem.   Usuń formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

Ładowanie