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.