Как установить свойство onlyThinLine? Не срабатывает.

Автор biomotor, 06.06.22, 09:32:55

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

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

biomotor

06.06.22, 09:32:55 Последнее редактирование: 06.06.22, 09:45:07 от biomotor
Устанавливаются:
rasterPar.format=2
rasterPar.greyScale=1
rasterPar.extResolution=600

Не устанавливается:
rasterPar.onlyThinLine=FALSE # Не выводить тонкими линиями

Почему?
видимо при сохранении в pdf, нужно по другому указать свойства сохранения.
не SaveAsToRasterFormat а SaveAs.

Подскажите как?

Михаил88

Я попробовал все работает, это для картинок
в свойстве format
Screenshot_1.bmp

biomotor

Цитата: Михаил88 от 06.06.22, 10:37:04Я попробовал все работает, это для картинок
в свойстве format
Screenshot_1.bmp

Да, но как сделать то же для экспорта в pdf?

в IPrintJob_OutputParameters есть свойство OnlyThinLines - Вывод тонкими линиями,
не могу достучаться до IPrintJob_OutputParameters. не знаете как?

Михаил88


biomotor

06.06.22, 10:46:51 #4 Последнее редактирование: 06.06.22, 11:07:19 от biomotor
Цитата: Михаил88 от 06.06.22, 10:44:08Где то делал вроде, поищу

вот еще пример, https://forum.ascon.ru/index.php?topic=29649.0
но все равно не получается.

Блин опять забыл к какому синтаксису относится python...
1) Синтаксис Automation В системах, поддерживающих работу со свойствами, например, Visual Basic, Delphi, Builder.
2) Синтаксис Automation В системах, не поддерживающих работу со свойствами, например, C.
3) Синтаксис COM

Михаил88

+ Благодарностей: 1

biomotor

я бы сделал так.
PrintParameters = KAPI7.IPrintJob_OutputParameters(kompas_document)
PrintParameters.onlyThinLines=0

1 строка вроде как прокатывает а вот 2 нет...

Михаил88

# -*- coding: utf-8 -*-
from win32com.client import Dispatch

application = Dispatch('Kompas.Application.7')

Converter = application.Converter('C:\\Program Files\\ASCON\\KOMPAS-3D v18\\Bin\\Pdf2d.dll')
pPdf2dParam = Converter.ConverterParameters(0)
pPdf2dParam.OnlyThinLine = 0
Converter.Convert('', r'C:\Users\root\Desktop\Новая папка\Чертеж.pdf', 0, False)

biomotor

Цитата: Михаил88 от 06.06.22, 11:31:56# -*- coding: utf-8 -*-
from win32com.client import Dispatch

application = Dispatch('Kompas.Application.7')

Converter = application.Converter('C:\\Program Files\\ASCON\\KOMPAS-3D v18\\Bin\\Pdf2d.dll')
pPdf2dParam = Converter.ConverterParameters(0)
pPdf2dParam.OnlyThinLine = 0
Converter.Convert('', r'C:\Users\root\Desktop\Новая папка\Чертеж.pdf', 0, False)


ЭЭЭ... а обязательно явно указывать конвертер?

Михаил88

я другого способа не знаю
думаю по другому не получится

biomotor

Цитата: Михаил88 от 06.06.22, 11:35:48я другого способа не знаю
думаю по другому не получится

Команда kompas_document.SaveAs(...) работает без dll файла, а значит не через этот конвертер.
Чисто теоретически способ должен быть, но не факт что предусмотрели данную возможность через API.
SDK пишет так: IDispatch -> IKompasAPIObject -> IPrintJob_OutputParameters -> свойство PageOutputOrder - Порядок вывода страниц на печать

Михаил88

конвертер позволяет задать эти параметры
Screenshot_5.png

если просто через SaveAs, то параметры не изменить

Михаил88


biomotor

Цитата: Михаил88 от 06.06.22, 11:46:10А чем конвертер не устраивает?

1) Не хотел указывать явный путь к конвертеру.
2) т.к. я использую SaveAs то хотел через него.
3) Если данная возможность есть в SDK, то почему не получается ее применить?

biomotor

06.06.22, 12:06:03 #14 Последнее редактирование: 06.06.22, 12:28:00 от biomotor
В принципе если устанавливать параметр через конвертер и сохранять как обычно это прокатывает,
но как указать сокращенный путь к конвертеру?

О, еще раз внимательно прочитал:
Интерфейс IPrintJob
Примечание:
1. Интерфейс можно получить у интерфейса приложения КОМПАС с помощью свойства IApplication::PrintJob.
2. Посредством вызова метода IUnknown::QueryInterface (const GUID far& iid, void** pif) у данного интерфейса можно получить дополнительный интерфейс IPrintJob_OutputParameters.

Значит чтобы воспользоваться IPrintJob_OutputParameters нужно указать GUID и пр...

biomotor

Цитата: Михаил88 от 06.06.22, 11:46:10А чем конвертер не устраивает?

Нашел такое в файлах питона:
Screenshot_6.jpg
Можно ли вызвать указатель объекта по его CLSID = IID?

Михаил88

Цитата: biomotor от 06.06.22, 12:06:03В принципе если устанавливать параметр через конвертер и сохранять как обычно это прокатывает,
но как указать сокращенный путь к конвертеру?


# -*- coding: utf-8 -*-
import pythoncom
from win32com.client import Dispatch, gencache

#  Подключим описание интерфейсов API7
kompas_api7_module = gencache.EnsureModule("{69AC2981-37C0-4379-84FD-5DD2F3C0A520}", 0, 1, 0)
application = kompas_api7_module.IApplication(
    Dispatch("Kompas.Application.7")._oleobj_.QueryInterface(kompas_api7_module.IApplication.CLSID,
                                                            pythoncom.IID_IDispatch))

library_manager = application.LibraryManager
# Список библиотек
procedures_libraries = library_manager.ProceduresLibraries
count = len(procedures_libraries)

for i in range(0, count):
    # Получаем библиотеку по индексу
    library = procedures_libraries.Item(i)
    # print(library)
    # Получаем название библиотеки
    name = library.Name
    # print(name)
    # Имя файла библиотеки
    path_name = library.PathName
    # print(path_name)
    if name == 'Библиотека экспорта в PDF':
        print(path_name)

biomotor

Цитата: Михаил88 от 06.06.22, 12:46:33....

Можете помочь собрать логику?

Как это понимаю я:
class IPrintJob_OutputParameters(DispatchBaseClass):
'Задание на печать::Интерфейс параметров вывода'
Означает что это дополнительный интерфейс который вызывается через основной.
основным является
class IPrintJob(DispatchBaseClass):
'Задание на печать'

значит чтобы вызвать указатель на параметры, нужно написать так:
iPrintPar = iPrintJob.IPrintJob_OutputParametersМне пока что не понятно как должен вызываться IPrintJob.
Нужно ли указывать активный документ или все же IPrintJob вызывается по аналогии с IApplication?
kompas_api7_module = gencache.EnsureModule("{69AC2981-37C0-4379-84FD-5DD2F3C0A520}", 0, 1, 0)
iPrintJob = kompas_api7_module.IPrintJob(Dispatch("Kompas.Application.7")._oleobj_.QueryInterface(kompas_api7_module.IPrintJob.CLSID, pythoncom.IID_IDispatch))

Михаил88

print_job = application.PrintJob
print(print_job)
iPrintJob_OutputParameters = kompas_api7_module.IPrintJob_OutputParameters(print_job)
print(iPrintJob_OutputParameters)
iPrintJob_OutputParameters.OnlyThinLines = False
print(iPrintJob_OutputParameters.OnlyThinLines)

biomotor

Цитата: Михаил88 от 06.06.22, 13:39:54print_job = application.PrintJob
print(print_job)
iPrintJob_OutputParameters = kompas_api7_module.IPrintJob_OutputParameters(print_job)
print(iPrintJob_OutputParameters)
iPrintJob_OutputParameters.OnlyThinLines = False
print(iPrintJob_OutputParameters.OnlyThinLines)

Screenshot_7.jpg
сохраняет все равно в тонких линиях.