• Добро пожаловать на Форум пользователей ПО АСКОН. Пожалуйста, авторизуйтесь.
 

Уважаемые пользователи,

Хотим проинформировать вас о режиме работы регистрации на нашем сайте.

Регистрация будет доступна с 8:00 (мск) 12 января.

Благодарим вас за понимание и сотрудничество. Мы ценим ваше терпение и стремимся предоставить вам лучший опыт использования нашего сервиса.

С уважением,
Команда Ascon

Как программно конвертировать файл чертежа в PDF?

Автор maksim krotov, 03.05.26, 10:26:31

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

maksim krotov

Можно ли программно конвертировать файл чертежа в PDF? Если да, то как?

p3452

Много раз обсуждалось на Форуме...
Самый простой вариант (для старших версий) - Save as...

Греков О

maksim krotov, если сделаете как на рисунке, то ответы будете читать
в течение недели.

maksim krotov

Цитата: p3452 от 03.05.26, 11:03:19Много раз обсуждалось на Форуме...
Самый простой вариант (для старших версий) - Save as...
Ладно. Попробую так. Главное, чтобы в 23 работал)))

lavgirb

Цитата: maksim krotov от 03.05.26, 23:04:35Ладно. Попробую так. Главное, чтобы в 23 работал)))
Это не главное.
Главное, что Вам ответили на вопрос.
Дали наводку. Вот это - главное.

freestyler

Цитата: maksim krotov от 03.05.26, 10:26:31Можно ли программно конвертировать файл чертежа в PDF? Если да, то как?

        public static string MakePDF(string drawFnFull)
        {
            try
            {
                string pdfFnFull = drawFnFull + ".pdf";
                Converter conv = _application7.Converter[@"C:\Program Files\ASCON\KOMPAS-3D v22\Bin\Pdf2d.dll"];
                conv.Convert(drawFnFull, pdfFnFull, 0, false);

                return pdfFnFull;
            }
            catch
            {
                return "";
            }
        }
+ Благодарностей: 1

freestyler

Аппну эту же тему чтобы не плодить сущности.
Программно создаю pdf из чертежа. Код в сообщении выше (я же им там и делился). Как задать границы pdf по границам листов в Компасе? А то если где-то что-то чуть-чуть выступает за границу листа, пользователь зачастую это не видит, а при создании pdf получается пустая область вне рамки:
Снимок.PNG

lavgirb

Цитата: freestyler от 10.08.26, 10:35:32Аппну эту же тему чтобы не плодить сущности.
Программно создаю pdf из чертежа. Код в сообщении выше (я же им там и делился). Как задать границы pdf по границам листов в Компасе? А то если где-то что-то чуть-чуть выступает за границу листа, пользователь зачастую это не видит, а при создании pdf получается пустая область вне рамки:
Если чертеж сделан грамотно, ничего не должно вылезать.
Пусть "пользователь" доводит чертеж до ума.

freestyler

Цитата: lavgirb от 10.08.26, 12:36:25Если чертеж сделан грамотно, ничего не должно вылезать.
Пусть "пользователь" доводит чертеж до ума.
Пользователь, конечно, косячник, но он даже не видит этого, пока на него Нормоконтроль не начинает ругаться.
А когда увидит, еще не сразу сможет понять что именно вылезло за границы.
Софт должен облегчать работу, а не усложнять. Это же так просто: жахнуть в pdf не всё подряд, а только то, что в рамочке. Или хотя бы сообщить, что "вид такой-то выходит за границы листа".
Снимок.PNG

lavgirb

Цитата: freestyler от 10.08.26, 12:59:25Пользователь, конечно, косячник, но он даже не видит этого, пока на него Нормоконтроль не начинает ругаться.
Это со временем проходит и пользователь начинает все видеть и делать правильно. Было бы желание.


Student2025

Цитата: freestyler от 10.08.26, 12:59:25Пользователь, конечно, косячник, но он даже не видит этого, пока на него Нормоконтроль не начинает ругаться.

Получается нужно доработать код так, что бы он проверял все выступы и наличие объектов за рамкой чертежа ?

freestyler

Цитата: Student2025 от 11.08.26, 05:56:11Получается нужно доработать код так, что бы он проверял все выступы и наличие объектов за рамкой чертежа ?

Ну или так, но это сложный вариант.
Или более простой и реалистичный: указать конвертеру координаты того, что надо перевести в pdf. В данном случае перечислить все листы и указать их координаты. Я надеялся что кто-нибудь даст наводку в какую сторону искать.

Student2025

Цитата: freestyler от 12.08.26, 11:01:07Или более простой и реалистичный: указать конвертеру координаты того, что надо перевести в pdf.
Там так нельзя..

Цитата: freestyler от 12.08.26, 11:01:07Ну или так, но это сложный вариант.
Это единственный способ.

Обработайте контейнер объектов чертежа.
+ Благодарностей: 1

Kaimen

import pythoncom
from win32com.client import gencache, Dispatch

ks_constants = gencache.EnsureModule("{75C9F5D0-B5B8-4526-8681-9903C567D2ED}", 0, 1, 0).constants
ks_constants_3d = gencache.EnsureModule("{2CAF168C-7961-4B90-9DA2-701419BEEFE3}", 0, 1, 0).constants
KAPI = gencache.EnsureModule("{0422828C-F174-495E-AC5D-D31014DBBE87}", 0, 1, 0)
kompas_object = KAPI.KompasObject(Dispatch("Kompas.Application.5")._oleobj_.QueryInterface(
    KAPI.KompasObject.CLSID, pythoncom.IID_IDispatch))
#  Получи API интерфейсов версии 7
KAPI7 = gencache.EnsureModule("{69AC2981-37C0-4379-84FD-5DD2F3C0A520}", 0, 1, 0)
application = KAPI7.IApplication(Dispatch("Kompas.Application.7")._oleobj_.QueryInterface(
    KAPI7.IApplication.CLSID, pythoncom.IID_IDispatch))


if __name__ == '__main__':

    kompas_document = application.ActiveDocument
    layouts_sheets = kompas_document.LayoutSheets
    layouts_sheet = layouts_sheets.Item(0)
    res, left, top, right, bottom= layouts_sheet.GetPlaceInsideFrames(0, 0, 0, 0)
    ks_document_2d = kompas_object.ActiveDocument2D()
    ks_document_2d.ksPoint(left-20, top+19 , 0)
    ks_document_2d.ksPoint(right+5, bottom-60,0)

Запускать на активном чертеже.

Student2025