Сообщество программистов Autodesk в СНГ

ADN Club => AutoCAD .NET API => Тема начата: Алексей (IdeaSoft) от 08-12-2017, 15:05:00

Название: Пакетная печать
Отправлено: Алексей (IdeaSoft) от 08-12-2017, 15:05:00
Мне нужно программно сделать пакетную печать pdf

Подскажите  с чего начать?
Первое это наверное получить список конфигураций печати
выбрать нужный и назначить его текущим.

По условию задачи я  заранее знаю имя конфигурации для печати

Название: Re: Пакетная печать
Отправлено: Александр Пекшев aka Modis от 08-12-2017, 15:11:05
Я бы начал отсюда (http://through-the-interface.typepad.com/through_the_interface/2007/09/driving-a-multi.html)
Название: Re: Пакетная печать
Отправлено: Александр Ривилис от 08-12-2017, 19:15:07
Еще вариант: http://adn-cis.org/forum/index.php?topic=1692.0
Поискам у нас на форуме находится еще не один вариант.
Название: Re: Пакетная печать
Отправлено: Алексей (IdeaSoft) от 12-12-2017, 09:37:06
Что не совсем понятно что нужно подключить чтобы были доступны функции
acedTrans(p1.ToArray(), rbFrom.UnmanagedObject, rbTo.UnmanagedObject,  0, p1res);
acedTrans(p2.ToArray(), rbFrom.UnmanagedObject, rbTo.UnmanagedObject,  0, p2res);
Они же хранятся в файле
acedads.h
Это если на С++ писать
А на  C#?
Название: Re: Пакетная печать
Отправлено: Александр Пекшев aka Modis от 12-12-2017, 09:59:21
Алексей (IdeaSoft), посмотрите код внимательней. Это импорт методов из COM-библиотек
Код - C# [Выбрать]
  1. [DllImport("accore.dll", CallingConvention = CallingConvention.Cdecl, EntryPoint = "acedTrans")]
  2.       static extern int acedTrans13(double[] point, IntPtr fromRb,  IntPtr toRb, int disp, double[] result);
  3.       [DllImport("acad.exe", CallingConvention = CallingConvention.Cdecl, EntryPoint = "acedTrans")]
  4.       static extern int acedTrans12(double[] point, IntPtr fromRb, IntPtr toRb,  int disp, double[] result);
  5.       static int acedTrans(double[] point, IntPtr fromRb, IntPtr toRb, int disp, double[] result)
  6.       {
  7.         return Application.Version.Major > 12 ?
  8.           acedTrans13(point, fromRb, toRb, disp, result) :
  9.           acedTrans12(point, fromRb, toRb, disp, result);
  10.       }
Название: Re: Пакетная печать
Отправлено: Алексей (IdeaSoft) от 12-12-2017, 11:17:47
Еще вариант: http://adn-cis.org/forum/index.php?topic=1692.0

Использую AutoCAD  Civil 3d 2018

Добавил код этого теста в проект
В результате
Появляется пустой лист формата pdf

Почему пустой понять не могу?
Я же нарисовал прямоугольник (0,0, 210, 297) и диагональные линии
по прямоугольнику чтобы наверняка попали они в область печати.

В командной строке пишет
Печатная область чертежа: ширина - 295.41; высота - 208.41
Название: Re: Пакетная печать
Отправлено: Дмитрий Загорулькин от 12-12-2017, 13:40:43
Это импорт методов из COM-библиотек
DllImport - импорт из COM? Оговорка? Используется пространство имён System.Runtime.InteropServices, но этот атрибут, вроде как, не относится к COM Interop.
Название: Re: Пакетная печать
Отправлено: Александр Ривилис от 12-12-2017, 13:41:24
Они же хранятся в файле
acedads.h
Нет. Хранятся они в accore.dll в версиях начиная с AutoCAD 2013 и в acad.exe в более старых версиях.
Название: Re: Пакетная печать
Отправлено: Александр Ривилис от 12-12-2017, 13:42:21
Это импорт методов из COM-библиотек
К COM это не имеет никакого отношения. Это "native" (иногда "mixed") dll-файлы.
Название: Re: Пакетная печать
Отправлено: Александр Ривилис от 12-12-2017, 13:44:22
Еще вариант: http://adn-cis.org/forum/index.php?topic=1692.0

Использую AutoCAD  Civil 3d 2018

Добавил код этого теста в проект
В результате
Появляется пустой лист формата pdf

Почему пустой понять не могу?
Я же нарисовал прямоугольник (0,0, 210, 297) и диагональные линии
по прямоугольнику чтобы наверняка попали они в область печати.

В командной строке пишет
Печатная область чертежа: ширина - 295.41; высота - 208.41

Использовал мой код: http://adn-cis.org/forum/index.php?topic=1692.msg6306#msg6306 ?
Там заданы точки рамки:
Код - C# [Выбрать]
  1. Point3d p1 = new Point3d(0.126985232607694, -0.501646732562222, 0);
  2. Point3d p2 = new Point3d(10500.1269852326, 14849.4983532674, 0);
Тебе нужно поменять на твои.
Название: Re: Пакетная печать
Отправлено: Алексей (IdeaSoft) от 12-12-2017, 14:12:49
Использовал мой код

Да я твой код использовал все как есть ни чего не менял

Не понятно зачем 

var scale = 50;

И выходит пустой белый лист pdf формата A4
Название: Re: Пакетная печать
Отправлено: Александр Пекшев aka Modis от 12-12-2017, 14:30:45
Дмитрий Загорулькин, Александр Ривилис, да, я неправильно сказал. В этой теме не силен, а dllimport вообще стараюсь избегать максимально
Название: Re: Пакетная печать
Отправлено: Александр Ривилис от 12-12-2017, 17:13:18
Да я твой код использовал все как есть ни чего не менял

Не понятно зачем

var scale = 50;

И выходит пустой белый лист pdf формата A4
Не нужно уж так незадумываясь копипастить. Если у тебя масштаб 1:1, то поставь scale = 1. Ну и задай правильно точки рамки.