private string plot_pdf(string file_name, string out_path, Layout lay, Extents2d window, double x, double y, string stamp_handle, bool monochrome)
{
//название напечатанной страницы
string plot_list = "";
//если ничего не печатается то начинаем печать
if (PlotFactory.ProcessPlotState == ProcessPlotState.NotPlotting)
{
using (PlotEngine pe = PlotFactory.CreatePublishEngine())
{
PlotProgressDialog ppd = new PlotProgressDialog(false, 1, true);
using (ppd)
{
//устанавливавем параметры для печати
PlotInfo pi = new PlotInfo();
PlotInfoValidator piv = new PlotInfoValidator();
piv.MediaMatchingPolicy = MatchingPolicy.MatchEnabled;
ObjectId layoutId = lay.Id;
LayoutManager.Current.CurrentLayout = lay.LayoutName;
PlotSettings ps = new PlotSettings(lay.ModelType);
ps.CopyFrom(lay);
try
{
ps.ShowPlotStyles = true;
ps.PrintLineweights = true;
ps.PlotTransparency = true;
}
catch
{ }
using (PlotSettingsValidator psv = PlotSettingsValidator.Current)
{
//в каких границах печатаем
psv.SetPlotWindowArea(ps, window);
//область печати
psv.SetPlotType(ps, Autodesk.AutoCAD.DatabaseServices.PlotType.Window);
//поворот
psv.SetPlotRotation(ps, PlotRotation.Degrees090);
//масштабирование и расположение
psv.SetUseStandardScale(ps, true);
psv.SetStdScaleType(ps, StdScaleType.ScaleToFit);
psv.SetPlotCentered(ps, true);
//выбираем принтер
psv.SetPlotConfigurationName(ps, "DWG To PDF.pc3", null);
psv.RefreshLists(ps);
//считываем форматы печати
StringCollection strings = psv.GetCanonicalMediaNameList(ps);
//создаем переменную для выходного формата
string format = "";
//проходим по форматам
foreach (String s in strings)
{
//ищем формат соответствующий габаритам штампа
if (
s.Contains(Math.Round(y).ToString() + ".00" + "_x_" + Math.Round(x).ToString() + ".00") |
s.Contains(Math.Round(y).ToString() + ".00" + " x " + Math.Round(x).ToString() + ".00")
)
{
if (s.Contains("full_bleed") | s.Contains("UserDefinedMetric"))
{
//если находим то записываем его
format = s;
break;
}
}
}
//если формат не найден записываем в лог ошибку и пропускаем эту страницу
if (format == "")
{
using (StreamWriter writer = new StreamWriter("C:\\ProgramData\\My_catalog\\print_log.txt", true))
{
writer.WriteLine("_error1___" + "\t" + stamp_handle);
writer.Close();
}
return plot_list;
}
//устанавливаем найденный формат для печати
psv.SetPlotConfigurationName(ps, "DWG To PDF.pc3", format);
try
{
if (monochrome)
{
psv.SetCurrentStyleSheet(ps, "monochrome.ctb");
}
else
{
psv.SetCurrentStyleSheet(ps, "acad.ctb");
}
}
catch
{ }
psv.RefreshLists(ps);
try
{
ps.PlotPlotStyles = true;
//ps.ShowPlotStyles = true;
ps.PrintLineweights = true;
ps.PlotTransparency = true;
}
catch
{ }
pi.Layout = lay.Id;
pi.OverrideSettings = ps;
piv.Validate(pi);
//получаем название напечатанного листа и печатаем
int list = 1;
string page = out_path + "\\" + list + ".pdf";
while (System.IO.File.Exists(page))
{
list++;
page = out_path + "\\" + list + ".pdf";
}
//печатаем
pe.BeginPlot(ppd, null);
pe.BeginDocument(pi, file_name, null, 1, true, page);
PlotPageInfo ppi = new PlotPageInfo();
pe.BeginPage(ppi, pi, true, null);
pe.BeginGenerateGraphics(null);
pe.EndGenerateGraphics(null);
pe.EndPage(null);
pe.EndDocument(null);
pe.EndPlot(null);
//если досюда дошло то по идее все распечатано, записываем в файл лога
using (StreamWriter writer = new StreamWriter("C:\\ProgramData\\My_catalog\\print_log.txt", true))
{
writer.WriteLine("_norm_____" + "\t" + stamp_handle);
writer.Close();
}
return page;
}
}
}
}
return plot_list;
}