Esportare tavola in pdf in automatico

Filo

Utente Standard
Professione: Perditempo
Software: Inventor2015 ANSYS Fluent Gambit SolidWorks Algor
Regione: Veneto
#1
Avevo già letto qualcosa ma la ricerca con "pdf" non funziona e ho guardato le prime 40 pagine ma senza successo.

Ho creato uno script che in automatico quando salva la tavola idw crea anche il pdf, quindi le tavole create da oggi in poi avranno sempre il loro pdf aggiornato... e fin qui tutto ok.
Per le tavole vecchie ho visto che ci sono vari metodi, in qualche modo riesco a creare il pdf dal idw ma il problema grosso che ho e non trovo soluzione è:"Come faccio ad aggiornare il pdf delle tavole vecchie quando apporto qualche modifica?"

Non so veramente come fare.

Grazie

Ciao
 

Catafratto

Utente Standard
Professione: Disegnatore/progettista
Software: Inventor 2016
Regione: Veneto
#2
Deh, io ho fatto uno script simile e l'ho collegato ad un tasto: quando faccio una modifica mi ricordo di premerlo. Se è un problema relativo alle sole tavole vecchie è una soluzione molto pratica, parlo per esperienza. Se hai paura di dimenticare di esportare, alla fine dello script (macro VBA immagino) aggiungi un nomeDelTuoFile.Close() così quando vuoi chiudere il tuo file premi il tasto della tua macro, salva, esporta e chiude.
Ciao!
 

Filo

Utente Standard
Professione: Perditempo
Software: Inventor2015 ANSYS Fluent Gambit SolidWorks Algor
Regione: Veneto
#4
La soluzione proposta da Catafratto non mi piace molto per due motivi, il primo e il più importante non sono capace di creare un bottone, la seconda è che dovrei sperare che anche le altre persone dell'UT schiaccino il bottone per uscire... il rischio è troppo alto.

Googolando un po' ho trovato un programmino che faceva ciò che cercavo, ovvero copiare una regola in tutti i file già esistenti risolvendo così il mio problema. Il programma è molto completo, ricco di funzioni e non molto complicato da usare.

Il tutto, e così rispondo anche a Mauro, lo potete trovare qui

Ciao

Ps per completare la risposta a Mauro
I vari script che uso non sono scritti di mio pugno quindi non trovo corretto postarli qui, potrei postare il link di dove li ho trovati ma sinceramente non ricordo
 

Catafratto

Utente Standard
Professione: Disegnatore/progettista
Software: Inventor 2016
Regione: Veneto
#5
BIRRA, non riconoscenza, grazie :tongue:
Se il tutorial :mixed: per l'inserimento delle macro non è abbastanza chiaro arrangiate... ehm, fatemi sapere che provo a miglioralo :wink:

Codice:
Public Sub PubblicaPDF()
    
    ' Obtain reference to drawing
    Dim oDoc As Document
    Set oDoc = ThisApplication.ActiveDocument
    
    If oDoc.DocumentType <> kDrawingDocumentObject Then
        MsgBox ("Deve essere aperta una tavola")
        Exit Sub
    End If
    
    
    Dim oDrw As DrawingDocument
    Set oDrw = oDoc
    
    ' Get the PDF translator Add-In.
    Dim PDFAddIn As TranslatorAddIn
    Set PDFAddIn = ThisApplication.ApplicationAddIns.ItemById("{0AC6FD96-2F4D-42CE-8BE0-8AEA580399E4}")


    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(oDrw, 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
    Dim fn As String
    fn = oDrw.FullFileName
    fn = Strings.Left(fn, Len(fn) - 4) & ".pdf"

    oDataMedium.FileName = fn

    'Publish document.
    Call PDFAddIn.SaveCopyAs(oDrw, oContext, oOptions, oDataMedium)
End Sub

Public Sub PubblicaDWG()
    
    ' Obtain reference to drawing
    Dim oDoc As Document
    Set oDoc = ThisApplication.ActiveDocument
    
    If oDoc.DocumentType <> kDrawingDocumentObject Then
        MsgBox ("Deve essere aperta una tavola")
        Exit Sub
    End If
    
    
    Dim oDrw As DrawingDocument
    Set oDrw = oDoc
    ' Get the DWG translator Add-In.
    Dim DWGAddIn As TranslatorAddIn
    Set DWGAddIn = ThisApplication.ApplicationAddIns.ItemById("{C24E3AC2-122E-11D5-8E91-0010B541CD80}")


    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 DWGAddIn.HasSaveCopyAsOptions(oDrw, oContext, oOptions) Then

        Dim strIniFile As String
        strIniFile = "C:\tempDWGOut.ini"
        ' Create the name-value that specifies the ini file to use.
        oOptions.Value("Export_Acad_IniFile") = strIniFile
    End If

    'Set the destination file name
    Dim fn As String
    fn = oDrw.FullFileName
    fn = Strings.Left(fn, Len(fn) - 4) & ".dwg"
    oDataMedium.FileName = fn


    'Publish document.
    Call DWGAddIn.SaveCopyAs(oDrw, oContext, oOptions, oDataMedium)
End Sub
Nota: sono adattamenti degli esempi che si trovano nell'help di Inventor

View attachment Come copiare le macro.txt View attachment PubblicaPDF-DWG.txt
 

Filo

Utente Standard
Professione: Perditempo
Software: Inventor2015 ANSYS Fluent Gambit SolidWorks Algor
Regione: Veneto
#6
Adesso allora ho ancora una domanda io...

Perchè lo script lo metti in "applicazione" e non in "documento"? Io ho sempre messo in documento sul template, in questo modo tutti in rete riescono a vederlo. "Applicazione" non lavora solo in locale?

Grazie
Ciao
 

Catafratto

Utente Standard
Professione: Disegnatore/progettista
Software: Inventor 2016
Regione: Veneto
#7
Innanzitutto c'è "script" e "script": la regola iLogic è legata al documento (anche se esistono le regole esterne al documento stesso) e non la conosco bene: tuttavia non ha controindicazioni.

Le macro VBA, invece, sono nefaste se presenti in documenti che poi vengono aperti in gran quantità (parti e assiemi) contemporaneamente, in quanto tende a crasharsi tutto. Comunque per le tavole, di solito aperte poche alla volta, non si presenta il problema.

Se le macro sono nel progetto applicazione esse sono sempre aggiornate in ogni momento e per ogni documento, mentre con le macro nei documenti puoi avere facilmente molte versioni della stessa cosa. Ogni tanto Inventor cambia qualcosa: tremo di orrore al pensiero di aggiornare non solo i templates ma anche ivecchi documenti che vanno riutilizzati.
Per quanto riguarda postazioni multiple sotto Strumenti>Opzioni applicazione>File troverai il file Progetto VBA di default: tutte le macchine possono puntare allo stesso file (occhio solo in caso di modifiche perchè finchè tutti gli Inventor sono in funzione il file va in sola lettura)
Preferisco il VBA perchè... ho cominciato a usarlo prima e adesso so usarlo bene:smile:! Il difetto principale è che dalla 2014 non funzioneranno più le macro autosave, autoclose ecc. ecc. che invece iLogic gestisce bene, ma per me va bene così.
Spero di essere stato chiaro...
Ciao!
P.S.
Specifica se usi iLogic o VBA, così si risponde più precisi!
 

Filo

Utente Standard
Professione: Perditempo
Software: Inventor2015 ANSYS Fluent Gambit SolidWorks Algor
Regione: Veneto
#8
...tremo di orrore al pensiero di aggiornare non solo i templates ma anche ivecchi documenti che vanno riutilizzati...
Adesso ho letto al volo poi leggerò più attentamente lunedì. Cmq il programmino che ho postato sopra risolve prorpio questo problema

Ciao
 

Tarkus

Utente Senior
Professione: Progettista,Disegnatore
Software: Autocad Mechanical,Inventor 2017,HyperMill2012
Regione: Toscana
#9
Innanzitutto c'è "script" e "script": la regola iLogic è legata al documento (anche se esistono le regole esterne al documento stesso) e non la conosco bene: tuttavia non ha controindicazioni.

...................................................................................................................................:! Il difetto principale è che dalla 2014 non funzioneranno più le macro autosave, autoclose ecc. ecc. che invece iLogic gestisce bene, ma per me va bene così.
Spero di essere stato chiaro...
Ciao!
P.S.
Specifica se usi iLogic o VBA, così si risponde più precisi!
Azz, :frown: :frown:
Domanda quasi OT:
Ma volendo migrare alla 2014 dei Templates che hanno delle macro con autosave cosa succede, non funzionano più e vanno riscritte con iLogic?
 

Catafratto

Utente Standard
Professione: Disegnatore/progettista
Software: Inventor 2016
Regione: Veneto
#10
Azz, :frown: :frown:
Domanda quasi OT:
Ma volendo migrare alla 2014 dei Templates che hanno delle macro con autosave cosa succede, non funzionano più e vanno riscritte con iLogic?
Più o meno... Più precisamente, non funziona l'avvio automatico: le macro che non fanno chiamate strane a windows continueranno a funzionare (o almeno così dichiara Autodesk), ma bisogna attivarle manualmente. Le alternative sono una conversione a iLogic o creare un Add-in (la seconda molto più impegnativa della prima).
Questa settimana faccio il "trasloco" alla 2014, potrò essere più preciso...
Ciao!
 

Filo

Utente Standard
Professione: Perditempo
Software: Inventor2015 ANSYS Fluent Gambit SolidWorks Algor
Regione: Veneto
#11
iLogic non l'ho mai usato e non ho la più pallida idea di come si usa! Infatti la tua notizia che sul 2004 ci potrebbero essere problemi con le macro mi preoccupa un po'! Speriamo bene...

Ho sempre usato le macro VBA perché buona parte della misera formazione sulla programmazione è basata su VisualBasic

...
Per quanto riguarda postazioni multiple sotto Strumenti>Opzioni applicazione>File troverai il file Progetto VBA di default: tutte le macchine possono puntare allo stesso file (occhio solo in caso di modifiche perchè finchè tutti gli Inventor sono in funzione il file va in sola lettura)
Anche a questo non avevo mai fatto caso... ecco perché ho sempre preferito metterlo nel template. Quando ho un po' di tempo proverò ad inserire le macro nel progetto.

Ciao grazie
 

Filo

Utente Standard
Professione: Perditempo
Software: Inventor2015 ANSYS Fluent Gambit SolidWorks Algor
Regione: Veneto
#12
Non so se con questa domanda andiamo OT, tant'è...

I pulsanti creati collegati ad una macro hanno tutti la stessa icona, è possibile cambiarla?

Ciao
Grazie
 

MauroM

Utente Standard
Professione: mah!
Software: Inv + SW(purtroppo)
Regione: .
#15
BIRRA, non riconoscenza, grazie :tongue:
Se il tutorial :mixed: per l'inserimento delle macro non è abbastanza chiaro arrangiate... ehm, fatemi sapere che provo a miglioralo :wink:

Codice:
Public Sub PubblicaPDF()
    
    ' Obtain reference to drawing
    Dim oDoc As Document
    Set oDoc = ThisApplication.ActiveDocument
    
    If oDoc.DocumentType <> kDrawingDocumentObject Then
        MsgBox ("Deve essere aperta una tavola")
        Exit Sub
    End If
    
    
    Dim oDrw As DrawingDocument
    Set oDrw = oDoc
    
    ' Get the PDF translator Add-In.
    Dim PDFAddIn As TranslatorAddIn
    Set PDFAddIn = ThisApplication.ApplicationAddIns.ItemById("{0AC6FD96-2F4D-42CE-8BE0-8AEA580399E4}")


    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(oDrw, 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
    Dim fn As String
    fn = oDrw.FullFileName
    fn = Strings.Left(fn, Len(fn) - 4) & ".pdf"

    oDataMedium.FileName = fn

    'Publish document.
    Call PDFAddIn.SaveCopyAs(oDrw, oContext, oOptions, oDataMedium)
End Sub

Public Sub PubblicaDWG()
    
    ' Obtain reference to drawing
    Dim oDoc As Document
    Set oDoc = ThisApplication.ActiveDocument
    
    If oDoc.DocumentType <> kDrawingDocumentObject Then
        MsgBox ("Deve essere aperta una tavola")
        Exit Sub
    End If
    
    
    Dim oDrw As DrawingDocument
    Set oDrw = oDoc
    ' Get the DWG translator Add-In.
    Dim DWGAddIn As TranslatorAddIn
    Set DWGAddIn = ThisApplication.ApplicationAddIns.ItemById("{C24E3AC2-122E-11D5-8E91-0010B541CD80}")


    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 DWGAddIn.HasSaveCopyAsOptions(oDrw, oContext, oOptions) Then

        Dim strIniFile As String
        strIniFile = "C:\tempDWGOut.ini"
        ' Create the name-value that specifies the ini file to use.
        oOptions.Value("Export_Acad_IniFile") = strIniFile
    End If

    'Set the destination file name
    Dim fn As String
    fn = oDrw.FullFileName
    fn = Strings.Left(fn, Len(fn) - 4) & ".dwg"
    oDataMedium.FileName = fn


    'Publish document.
    Call DWGAddIn.SaveCopyAs(oDrw, oContext, oOptions, oDataMedium)
End Sub
Nota: sono adattamenti degli esempi che si trovano nell'help di Inventor

View attachment 34912 View attachment 34913
funziona che è una meraviglia:finger:
Grazie!
 

Filo

Utente Standard
Professione: Perditempo
Software: Inventor2015 ANSYS Fluent Gambit SolidWorks Algor
Regione: Veneto
#16

Filo

Utente Standard
Professione: Perditempo
Software: Inventor2015 ANSYS Fluent Gambit SolidWorks Algor
Regione: Veneto
#17
BIRRA, non riconoscenza, grazie :tongue:
Se il tutorial :mixed: per l'inserimento delle macro non è abbastanza chiaro arrangiate... ehm, fatemi sapere che provo a miglioralo :wink:

Codice:
Public Sub PubblicaPDF()
    
    ' Obtain reference to drawing
    Dim oDoc As Document
    Set oDoc = ThisApplication.ActiveDocument
    
    If oDoc.DocumentType <> kDrawingDocumentObject Then
        MsgBox ("Deve essere aperta una tavola")
        Exit Sub
    End If
    
    
    Dim oDrw As DrawingDocument
    Set oDrw = oDoc
    
    ' Get the PDF translator Add-In.
    Dim PDFAddIn As TranslatorAddIn
    Set PDFAddIn = ThisApplication.ApplicationAddIns.ItemById("{0AC6FD96-2F4D-42CE-8BE0-8AEA580399E4}")


    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(oDrw, 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
    Dim fn As String
    fn = oDrw.FullFileName
    fn = Strings.Left(fn, Len(fn) - 4) & ".pdf"

    oDataMedium.FileName = fn

    'Publish document.
    Call PDFAddIn.SaveCopyAs(oDrw, oContext, oOptions, oDataMedium)
End Sub

Public Sub PubblicaDWG()
    
    ' Obtain reference to drawing
    Dim oDoc As Document
    Set oDoc = ThisApplication.ActiveDocument
    
    If oDoc.DocumentType <> kDrawingDocumentObject Then
        MsgBox ("Deve essere aperta una tavola")
        Exit Sub
    End If
    
    
    Dim oDrw As DrawingDocument
    Set oDrw = oDoc
    ' Get the DWG translator Add-In.
    Dim DWGAddIn As TranslatorAddIn
    Set DWGAddIn = ThisApplication.ApplicationAddIns.ItemById("{C24E3AC2-122E-11D5-8E91-0010B541CD80}")


    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 DWGAddIn.HasSaveCopyAsOptions(oDrw, oContext, oOptions) Then

        Dim strIniFile As String
        strIniFile = "C:\tempDWGOut.ini"
        ' Create the name-value that specifies the ini file to use.
        oOptions.Value("Export_Acad_IniFile") = strIniFile
    End If

    'Set the destination file name
    Dim fn As String
    fn = oDrw.FullFileName
    fn = Strings.Left(fn, Len(fn) - 4) & ".dwg"
    oDataMedium.FileName = fn


    'Publish document.
    Call DWGAddIn.SaveCopyAs(oDrw, oContext, oOptions, oDataMedium)
End Sub
Nota: sono adattamenti degli esempi che si trovano nell'help di Inventor


Come ho scritto qui il codice ha un piccolo baco

Ciao filippo
 

Filo

Utente Standard
Professione: Perditempo
Software: Inventor2015 ANSYS Fluent Gambit SolidWorks Algor
Regione: Veneto
#18
Provo ad alzare un po' l'asticella...

Ora tutti i file idw hanno al loro interno lo script per creare il pdf, però aprire uno ad uno tutti i disegni e salvarli per creare il pdf è lungo e noioso... esiste qualcosa per fare questa operazione in automatico?

Fin che scrivo mi viene in mente che avevo letto qualcosa, adesso cerco

Ciao grazie
 

Catafratto

Utente Standard
Professione: Disegnatore/progettista
Software: Inventor 2016
Regione: Veneto
#19
Se metti tutto in una cartella:
http://modthemachine.typepad.com/

Oppure se hai un assieme aperto puoi usare l'esempio che c'è nell'help API di Inventor e fare una scansione ricorsiva di tutti i documenti, controllare se esiste la tavola associata, aprirla, esportarla, ecc. ecc.

Ne ho una pronta, devo risistemarla e se hai pazienza la posto...
Ciao!
 

Catafratto

Utente Standard
Professione: Disegnatore/progettista
Software: Inventor 2016
Regione: Veneto
#20
Una precisazione:
Il sistema sopra descritto è ovviamente un po' grezzo: se la stessa parte si trova dentro più di un sottoassieme il programma, così come descritto, ne esporterebbe la tavola più volte; magari prima di fare l'esportazione sarebbe utile controllare che non esista già il PDF con il nome collegato...