public void SetLayoutSize(Size need_layout_size, ObjectId layout_id, string printer_device_name) {
var doc = Application.DocumentManager.MdiActiveDocument;
using (doc.LockDocument()) {
using (var tr = doc.TransactionManager.StartTransaction()) {
using (var layout = tr.GetObject(layout_id, OpenMode.ForWrite) as Layout) {
if (layout == null) throw new Exception("Не найден только что созданный лист");
var psv = PlotSettingsValidator.Current;
psv.SetPlotConfigurationName(layout, printer_device_name, null);
psv.RefreshLists(layout);
// psv.SetClosestMediaName(layout, need_layout_size.Width, need_layout_size.Height, PlotPaperUnit.Millimeters, true); // не понятно почему, но тут постоянно вываливается с ошибкой eInvalidInput, поэтому пришлось писать свою функцию взамен стандартной
var media_name = GetClosestMediaName(psv.GetCanonicalMediaNameList(layout), printer_device_name, need_layout_size);
if (media_name == "") {
throw new Exception("Лист с подходящим размером найти не удалось");
}
psv.SetCanonicalMediaName(layout, media_name);
psv.SetPlotPaperUnits(layout, PlotPaperUnit.Millimeters);
psv.SetPlotRotation(layout, PlotRotation.Degrees000);
psv.SetPlotOrigin(layout, Point2d.Origin);
psv.SetPlotWindowArea(layout, new Extents2d(0, 0, need_layout_size.Width, need_layout_size.Height));
psv.SetPlotType(layout, PlotType.Window);
// layout.PlotPaperMargins = new Extents2d(0, 0, 0, 0);
if (!layout.TabSelected) {
LayoutManager.Current.CurrentLayout = layout.LayoutName;
}
}
tr.Commit();
}
}
}