| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: PDF erstellen (1762 mal gelesen)
|
Fiedel93felix Mitglied Konstrukteur
Beiträge: 448 Registriert: 19.02.2014 Autodesk Inventor 2014 Microsoft Visual Basic 2010
|
erstellt am: 08. Apr. 2015 14:12 <-- editieren / zitieren --> Unities abgeben:
Hallo miteinander, ich soll ein Programm machen womit ich alle Blätter einer Zeichnung als PDF drucke. Funktioniert auch soweit: Public ThisApplication As Inventor.Application Public oDoc As Inventor.Document Sub main() ThisApplication = GetObject(, "Inventor.Application") oDoc = ThisApplication.ActiveDocument Dim osource As String Dim odest As String Dim Blattname As String oDoc = ThisApplication.ActiveDocument osource = oDoc.FullFileName odest = Mid(osource, 1, Len(osource) - 4) Dim osheet As Inventor.Sheet Dim counter As String counter = 1 For Each osheet In oDoc.Sheets osheet.Activate() Blattname = Left(osheet.Name, Len(osheet.Name) - 2) Call oDoc.SaveAs(odest & counter & Blattname & ".pdf",True) counter = counter + 1 Next End Sub Zum Problem: Ich soll die entstandenen PDF's zusätzlich in einer neuen PDF zusammenfassen. Hat sowas schonmal jemand gemacht? Ist das irgendwie realisierbar? Ich habe schon gesucht aber ich habe nichts gefunden was funktioniert.... danke schonmal MfG Felix
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
fons Mitglied
Beiträge: 32 Registriert: 30.03.2009
|
erstellt am: 08. Apr. 2015 15:07 <-- editieren / zitieren --> Unities abgeben: Nur für Fiedel93felix
|
Fiedel93felix Mitglied Konstrukteur
Beiträge: 448 Registriert: 19.02.2014 Autodesk Inventor 2014 Microsoft Visual Basic 2010
|
erstellt am: 08. Apr. 2015 15:17 <-- editieren / zitieren --> Unities abgeben:
Danke erstmal für die Hilfe. Aber das wollte ich vermeiden, das ich es über ein externes Programm gehe. Ich möchte direkt nach dem erstellen der PDF's diese zu einer zusammenfassen, ohne andere Pogramme zu nutzen. Wenn möglich soll diese Anwendung alle Kollegen nutzen können ohne irgendwelche Programme installieren zu müssen. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
rkauskh Moderator Dipl.-Ing. (FH) Versorgungstechnik
Beiträge: 2166 Registriert: 15.11.2006 Windows 10 x64, AIP 2022
|
erstellt am: 08. Apr. 2015 16:35 <-- editieren / zitieren --> Unities abgeben: Nur für Fiedel93felix
Hallo Dann benutze dafür keinen PDF-Drucker oder die SaveAs-Funktion, sondern erzeuge das PDF über das Translator-AddIn von Inventor. In der Programmierungshilfe findest du dieses VBA-Beispiel: Code: Public Sub PublishPDF() ' Get the PDF translator Add-In. Dim PDFAddIn As TranslatorAddIn Set PDFAddIn = ThisApplication.ApplicationAddIns.ItemById("{0AC6FD96-2F4D-42CE-8BE0-8AEA580399E4}") 'Set a reference to the active document (the document to be published). Dim oDocument As Document Set oDocument = ThisApplication.ActiveDocument Dim oContext As TranslationContext Set oContext = ThisApplication.TransientObjects.CreateTranslationContext oContext.Type = kFileBrowseIOMechanism ' Create a NameValueMap object Dim oOptions As NameValueMap Set oOptions = ThisApplication.TransientObjects.CreateNameValueMap ' Create a DataMedium object Dim oDataMedium As DataMedium Set oDataMedium = ThisApplication.TransientObjects.CreateDataMedium ' Check whether the translator has 'SaveCopyAs' options If PDFAddIn.HasSaveCopyAsOptions(oDocument, oContext, oOptions) Then ' Options for drawings... oOptions.Value("All_Color_AS_Black") = 0 'oOptions.Value("Remove_Line_Weights") = 0 'oOptions.Value("Vector_Resolution") = 400 'oOptions.Value("Sheet_Range") = kPrintAllSheets 'oOptions.Value("Custom_Begin_Sheet") = 2 'oOptions.Value("Custom_End_Sheet") = 4 End If 'Set the destination file name oDataMedium.FileName = "c:\temp\test.pdf" 'Publish document. Call PDFAddIn.SaveCopyAs(oDocument, oContext, oOptions, oDataMedium) End Sub
------------------ MfG Ralf Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Fiedel93felix Mitglied Konstrukteur
Beiträge: 448 Registriert: 19.02.2014 Autodesk Inventor 2014 Microsoft Visual Basic 2010
|
erstellt am: 09. Apr. 2015 12:30 <-- editieren / zitieren --> Unities abgeben:
muss ich das Translation-AddIn da erst installieren oder ist das schon drin bei IV14? denn wenn ich de Code probiere hängt sich das programm schon bei der 2.Zeile: PDFAddIn = ThisApplication.ApplicationAddIns.ItemById("{0AC6FD96-2F4D-42CE-8BE0-8AEA580399E4}") auf... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Fiedel93felix Mitglied Konstrukteur
Beiträge: 448 Registriert: 19.02.2014 Autodesk Inventor 2014 Microsoft Visual Basic 2010
|
erstellt am: 09. Apr. 2015 14:07 <-- editieren / zitieren --> Unities abgeben:
Also wenn ich es im iLogic mache funktioniert der Code, aber er erzeugt nur immer die aktive Seite in der PDF..... Und ich dachte die Zeile sag aus das er alle Seiten erzeugt. oOptions.Value("Sheet_Range") = kPrintAllSheets Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
rkauskh Moderator Dipl.-Ing. (FH) Versorgungstechnik
Beiträge: 2166 Registriert: 15.11.2006 Windows 10 x64, AIP 2022
|
erstellt am: 09. Apr. 2015 15:30 <-- editieren / zitieren --> Unities abgeben: Nur für Fiedel93felix
Hallo Die AddIn's sind standardmäßig dabei und werden bei Bedarf geladen. Es ist VBA-Code. In einem VB.Net-AddIn ist der so nicht lauffähig, da VB eine leicht andere Syntax hat. Zum Beispiel gibt es kein "ThisApplication". Die leichten Anpassungen sollten aber kein Problem für dich sein. Das Hochkomma davor hast du aber entfernt oder? Die anderen Blätter haben nicht zufällig die Eigenschaft "Nicht drucken" gesetzt? ------------------ MfG Ralf Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Fiedel93felix Mitglied Konstrukteur
Beiträge: 448 Registriert: 19.02.2014 Autodesk Inventor 2014 Microsoft Visual Basic 2010
|
erstellt am: 09. Apr. 2015 15:50 <-- editieren / zitieren --> Unities abgeben:
naja ich hab ja versucht es für vb.net fit zu machen aber so richtig weis ich nicht was ich noch ändern muss.... Er zeigt mir direkt bei der Eingabe das kFileBrowseIOMechanism kPrintAllSheets nicht deklariert sind. Wenn ich die Probeweise rausnehme kommt er nur bis PDFAddIn = ThisApplication.ApplicationAddIns.ItemById("{0AC6FD96-2F4D-42CE-8BE0-8AEA580399E4}") dort hängt er sich auf. Imports Inventor Module Module1 Public ThisApplication As Inventor.Application Public oDoc As Inventor.Document Public Sub main() ' Get the PDF translator Add-In. Dim PDFAddIn As TranslatorAddIn PDFAddIn = ThisApplication.ApplicationAddIns.ItemById("{0AC6FD96-2F4D-42CE-8BE0-8AEA580399E4}") 'Set a reference to the active document (the document to be published). Dim oDocument As Document oDocument = ThisApplication.ActiveDocument Dim oContext As TranslationContext oContext = ThisApplication.TransientObjects.CreateTranslationContext oContext.Type = kFileBrowseIOMechanism ' Create a NameValueMap object Dim oOptions As NameValueMap oOptions = ThisApplication.TransientObjects.CreateNameValueMap ' Create a DataMedium object Dim oDataMedium As DataMedium oDataMedium = ThisApplication.TransientObjects.CreateDataMedium ' Check whether the translator has 'SaveCopyAs' options If PDFAddIn.HasSaveCopyAsOptions(oDocument, oContext, oOptions) Then ' Options for drawings... oOptions.Value("All_Color_AS_Black") = 0 oOptions.Value("Sheet_Range") = kPrintAllSheets 'oOptions.Value("Remove_Line_Weights") = 0 'oOptions.Value("Vector_Resolution") = 400 'oOptions.Value("Custom_Begin_Sheet") = 2 'oOptions.Value("Custom_End_Sheet") = 4 End If 'Set the destination file name oDataMedium.FileName = "c:\temp\test.pdf" 'Publish document. Call PDFAddIn.SaveCopyAs(oDocument, oContext, oOptions, oDataMedium) End Sub End Module Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
rkauskh Moderator Dipl.-Ing. (FH) Versorgungstechnik
Beiträge: 2166 Registriert: 15.11.2006 Windows 10 x64, AIP 2022
|
erstellt am: 09. Apr. 2015 17:11 <-- editieren / zitieren --> Unities abgeben: Nur für Fiedel93felix
Hallo Du deklarierst zwar eine Variable
Code: Public ThisApplication As Inventor.Application
weist ihr aber keinen Wert zu. Jedenfalls nicht in dem geposteten Code. In deinem ersten Post steht da noch ein Code: ThisApplication = GetObject(, "Inventor.Application")
Ich halte es grundsätzlich für keine gute Idee ThisApplication als Variablenname zu verwenden. Warum nicht z.B. myInventor oder myInv oder oInvApp? Das führt wenigstens nicht zu Mißverständnissen mit dem in VBA reservierten ThisApplication. ------------------ MfG Ralf Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Fiedel93felix Mitglied Konstrukteur
Beiträge: 448 Registriert: 19.02.2014 Autodesk Inventor 2014 Microsoft Visual Basic 2010
|
erstellt am: 10. Apr. 2015 06:47 <-- editieren / zitieren --> Unities abgeben:
Okay, wieder mal ein Problem gelöst was man auch selber hätte merken können Aber das 2. Problem besteht immernoch, das oContext.Type = kFileBrowseIOMechanism und oOptions.Value("Sheet_Range") = kPrintAllSheets nicht deklariert sind. Und hier weis ich wirklich nicht wie ich die deklarieren muss oder umschreiben muss das es funktioniert....
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
rkauskh Moderator Dipl.-Ing. (FH) Versorgungstechnik
Beiträge: 2166 Registriert: 15.11.2006 Windows 10 x64, AIP 2022
|
erstellt am: 10. Apr. 2015 08:37 <-- editieren / zitieren --> Unities abgeben: Nur für Fiedel93felix
Moin Dann mach da mal draus: Code: oOptions.Value("Sheet_Range") = PrintRangeEnum.kPrintAllSheets oContext.Type = IOMechanismEnum.kFileBrowseIOMechanism
EDIT: Und wenn du am Beginn deiner Klasse kein Imports Inventor stehen hättest, müßte es glaub ich sogar heißen:
Code: oOptions.Value("Sheet_Range") = Inventor.PrintRangeEnum.kPrintAllSheets oContext.Type = Inventor.IOMechanismEnum.kFileBrowseIOMechanism
------------------ MfG Ralf Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Fiedel93felix Mitglied Konstrukteur
Beiträge: 448 Registriert: 19.02.2014 Autodesk Inventor 2014 Microsoft Visual Basic 2010
|
erstellt am: 10. Apr. 2015 09:58 <-- editieren / zitieren --> Unities abgeben:
Also Ralf du bist ein super Typ klappt jetzt einwandfrei, danke. Ich hätte bloß noch eine kurze frage: das Translator-AddIn brauch ich ja für mein Code. Ist dieses auch in neueren Versionen vorhanden? Fals mal eine umstellung auf neuere Versionen stattfindet. MfG Felix Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
rkauskh Moderator Dipl.-Ing. (FH) Versorgungstechnik
Beiträge: 2166 Registriert: 15.11.2006 Windows 10 x64, AIP 2022
|
erstellt am: 10. Apr. 2015 10:26 <-- editieren / zitieren --> Unities abgeben: Nur für Fiedel93felix
|
Fiedel93felix Mitglied Konstrukteur
Beiträge: 448 Registriert: 19.02.2014 Autodesk Inventor 2014 Microsoft Visual Basic 2010
|
erstellt am: 10. Apr. 2015 10:48 <-- editieren / zitieren --> Unities abgeben:
|
Fiedel93felix Mitglied Konstrukteur
Beiträge: 448 Registriert: 19.02.2014 Autodesk Inventor 2014 Microsoft Visual Basic 2010
|
erstellt am: 29. Apr. 2015 11:17 <-- editieren / zitieren --> Unities abgeben:
Also das erstellte Dokument klappt erst super jetzt aber noch eine Frage. Ich habe das Problem das ein bestimmtes Blatt nicht mit in der PDF erscheinen soll. Um das zu erreichen muss man, soweit ich das überblicke, die Zeile: oOptions.Value("Sheet_Range") = PrintRangeEnum.kPrintAllSheets ändern. Das Blatt welches nicht mit erstellt werden soll hat immer den gleichen Namen. Ich habe ja gedacht mit: oOptions.Value("Custom_Begin_Sheet") = 2 oOptions.Value("Custom_End_Sheet") = 4 funktioniert es aber da erzeugt es immer nur blatt 2 kann mir da jemand helfen. MfG Felix
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Fiedel93felix Mitglied Konstrukteur
Beiträge: 448 Registriert: 19.02.2014 Autodesk Inventor 2014 Microsoft Visual Basic 2010
|
erstellt am: 29. Apr. 2015 11:28 <-- editieren / zitieren --> Unities abgeben:
|