Zwcad 2019 .NET publisher


K.R

Recommended Posts

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.

 

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...