Я пытаюсь использовать COM API Autodesk Inventor для создания сценария python, который будет генерировать PDF-файлы с подборкой на чертежах Inventor. Затем эти PDF-файлы будут обрабатываться определенными способами, которые не важны для моего вопроса. Я использую pywin32 для доступа к COM API, но я не очень знаком с тем, как используются COM API, и с модулем pywin32.
Это уровень документации API Inventor, который Мне удалось найти (схема справочного документа по объектной модели API) , и я не смог найти документацию по отдельным перечисленным объектам. Таким образом, я основываю свое понимание использования этих объектов на том, что я могу найти из примеров в Интернете (все на VB или iLogi c - собственный простой встроенный язык Inventor).
Большой Проблема, с которой я сталкиваюсь, заключается в создании объектов, которые я хотел бы использовать. Упрощенный пример ниже:
from win32com.client import *
# user chooses file paths for open and save here...
drawing_filepath = ""
# Open Inventor application, and set visible (so I can tell it's opened for now)
app = Dispatch('Inventor.Application')
app.Visible = True
# Open the file to be saved as a pdf (returns a Document object)
app.Documents.Open(drawing_filepath)
# Cast the opened Document object to a DrawingDocument object (it is guaranteed to be a drawing)
drawing = CastTo(app.ActiveDocument, "DrawingDocument")
# Create and setup a print manager (so can use "Adobe PDF" printer to convert the drawings to PDF)
print_manager = ??? # How can I create this object
# I've tried:
# print_manager = Dispatch("Inventor.Application.Documents.DrawingDocument.DrawingPrintManager") #"Invalid class string"
# print_manager = drawing.DrawingPrintManager() #"object has no attribute 'DrawingPrintManger'
# print_manager = drawing.DrawingPrintManager # same as above
# print_manager = drawing.PrintManger # worked in the end
print_manager.Printer = "Adobe PDF"
print_manager.NumberOfCopies = 1
print_manager.ScaleMode = print_manager.PrintScaleModeEnum.kPrintFullScale
print_manager.PaperSize = print_manager.PrintSizeEnum.kPaperSizeA3
# Print PDF
print_manager.SubmitPrint()
Так что я не могу понять, как создать DrawingPrintManager для использования! Вы можете видеть, что я избегал этой проблемы при создании своего объекта DrawingDocument, так как я только что узнал, что есть атрибут ActiveDocument, который я могу получить из самого приложения.
Я также:
- не знаю, каков полный список атрибутов и методов для DrawingPrintManager, поэтому я не знаю, как установить местоположение для сохранения
- не знаю точно, что два перечисления I ' m, которые я пытаюсь использовать, на самом деле определены в DrawingPrintManager, но я могу понять это, когда у меня действительно будет DrawingPrintManager для работы с
Если кто-то с большим опытом использования COM API или pywin32 может мне помочь, Я был бы очень благодарен. И то же самое, если кто-то может указать мне на какую-либо фактическую документацию по объектам API Inventor, которая облегчит задачу.
Спасибо
Редактировать: После публикации я почти сразу обнаружил, что я можно получить PrintManager (не могу определить, является ли PrintManager или DrawingPrintManager), открыв drawing.PrintManager
вместо drawing.DrawingPrintManager
.
Однако это обходной путь, поскольку он не отвечает на мой вопрос о том, как создавать объекты внутри pywin32.
Моя проблема в продвижении вперед заключается в том, чтобы найти, где я могу получить доступ к объектам PrintScaleModeEnum и PrintSizeEnum, и найти способ установить местоположение для сохранения напечатанного PDF (который, я думаю, будет отдельным вопросом, так как это, вероятно, не связанные с COM API).