Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  CATIA V5 Programmierung
  PDF aus der CATDrawing

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
Autor Thema:  PDF aus der CATDrawing (3550 mal gelesen)
SergejH
Mitglied
CAD Support


Sehen Sie sich das Profil von SergejH an!   Senden Sie eine Private Message an SergejH  Schreiben Sie einen Gästebucheintrag für SergejH

Beiträge: 55
Registriert: 30.10.2003

WIN10
I7
16 GB
Quadro T2000
4GB
CREO 3&6
Catia V5 R28 SP3
NX 12
Windchill 11

erstellt am: 14. Dez. 2012 11:46    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo zusammen,

vor einiger Zeit geisterten die Threads über die PDF-Erstellung aus CATDrawings.
Ich glaube ich habe die Lösung dafür:
Ich bin kein Profi in Scripting, deswegen sind Verbesserungsvorschläge (besonders Vereinfachungen und Verallgemeinerungen) herzlich willkommen!
NB: Macro ist für folgende Zeichnungsnummerierung gedacht: xxxxxx-xxxx.CATDrawing
X=0..9+a-z

Code:

Language="VBSCRIPT"
'Create by Sergej Hempel 14-12-2012
'Contact: sergej.hempel@de.araymond.com
'Contact2: +49 7621 668 4511


Sub CATMain()
Dim fso, PDFName
Set fso = CreateObject("Scripting.FileSystemObject")

'fso.DeleteFolder("PFAD" +CATIA.SystemService.Environ("USERNAME") &"\temp_pdf")
'On Error Resume Next
'---------------------------------------------------------------------
'Voraussetzungen prüfen
'---------------------------------------------------------------------
'Dokument geoeffnet?
If CATIA.Documents.Count = 0 Then
Box = MsgBox("Es wurde kein aktives Dokument identifiziert" + Chr(10) + "Bitte oeffnen Sie zuerst ein Dokument und starten Sie dann das Makro erneut", vbInformation, "HINWEIS")
Exit Sub
End If

Dim oDocument As Document
Set oDocument = CATIA.ActiveDocument

'Drawing geoeffnet?
If TypeName(oDocument) <> "DrawingDocument" Then
Box = MsgBox("Dokument ist keine Drawing!" + Chr(10) + "Macro wurde abgebrochen", vbInformation, "ERROR")
Exit Sub
End If
'------------------------------------------------------------------------------
'Blattname prüfen
'------------------------------------------------------------------------------
'Set oDoc = CATIA.ActiveDocument
'Set oSheets = oDoc.Sheets
'For i =1 to oSheets.Count
' Set Sheet = oSheets.Item(i)
  'Blattname = Sheet.Name
  'MsgBox Blattname
'next
'---------------------------------------------------------------------------
Set oDoc = CATIA.ActiveDocument
Set oSheets = oDoc.Sheets
Set Sheet = oSheets.Item(1)
Blattnamealt=Sheet.Name
Blattname = Sheet.Name
If Blattname <>"Blatt.001" then
MsgBox "Blattname wird temporär geändert!"
Sheet.Name="Blatt.001"
End If
'----------------------------------------------------------------------
'Arbeitsverzeichnise anlegen
'----------------------------------------------------------------------
Dim USERDIR As String
USERDIR  = "PFAD" +CATIA.SystemService.Environ("USERNAME") &"\temp_pdf"
Dim FoldObj As Folder
Set FoldObj = CATIA.FileSystem.CreateFolder(USERDIR)
'----------------------------------------------------------------------
'PDF ausschreiben
'----------------------------------------------------------------------
Dim drawingDocument1 As Document
Set drawingDocument1 = CATIA.ActiveDocument
abc = drawingDocument1.Name
Name123 = Left(abc, 11)
drawingDocument1.ExportData USERDIR+"\"+Name123, "pdf"
'----------------------------------------------------------------------
'Bereits vorhandene suchen
'----------------------------------------------------------------------
IF fso.FileExists("PFAD" +CATIA.SystemService.Environ("USERNAME") +"\export\"+Name123+".pdf") = TRUE then
fso.CopyFile "\\de.ray.group\catiav5$\" +CATIA.SystemService.Environ("USERNAME") +"\export\"+Name123+".pdf","\PFAD" +CATIA.SystemService.Environ("USERNAME") +"\export\"+Name123+"alt.pdf", TRUE
Box = MsgBox("Dokument mit gleichen Namen war bereits vorhanden!" + Chr(10) + "Vorhandene Datei wurde umbenannt in "+Name123+"alt.pdf" , vbInformation, "ERROR")
fso.DeleteFile("PFAD" +CATIA.SystemService.Environ("USERNAME") +"\export\"+Name123+".pdf")
'fso.DeleteFolder("PFAD" +CATIA.SystemService.Environ("USERNAME") &"\temp_pdf")
'exit sub
End if
'-----------------------------------------------------------------------
'PDFumbenennen
'-----------------------------------------------------------------------
Dim USERDIR1 As String
USERDIR1  = "PFAD" +CATIA.SystemService.Environ("USERNAME") &"\export"
Set PDFName = fso.GetFile(USERDIR+"\"+Name123+"_Blatt_001.pdf")
PDFName.name =USEDIR1+Name123+".pdf"

'------------------------------------------------------------------------
'PDF verschieben
'------------------------------------------------------------------------
fso.CopyFile PDFName, "PFAD" +CATIA.SystemService.Environ("USERNAME") +"\export\"+Name123+".pdf", True
fso.DeleteFolder("PFAD" +CATIA.SystemService.Environ("USERNAME") &"\temp_pdf")
Sheet.Name=Blattnamealt
msgbox "PDF-File von"+Name123+" wurde in PFAD" +CATIA.SystemService.Environ("USERNAME") +"\export\ gespeichert!"

End Sub


------------------
Grüsse
Sergej

[Diese Nachricht wurde von SergejH am 14. Dez. 2012 editiert.]

[Diese Nachricht wurde von SergejH am 14. Dez. 2012 editiert.]

[Diese Nachricht wurde von SergejH am 14. Dez. 2012 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

RSchulz
Moderator²
Head of CAD, Content & Collaboration / IT-Manager



Sehen Sie sich das Profil von RSchulz an!   Senden Sie eine Private Message an RSchulz  Schreiben Sie einen Gästebucheintrag für RSchulz

Beiträge: 5541
Registriert: 12.04.2007

@Work
Lenovo P510
Xeon E5-1630v4
64GB DDR4
Quadro P2000
256GB PCIe SSD
512GB SSD
SmarTeam V5-6 R2016 Sp04
CATIA V5-6 R2016 Sp05
E3.Series V2019
Altium Designer/Concord 19
Win 10 Pro x64

erstellt am: 14. Dez. 2012 14:01    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für SergejH 10 Unities + Antwort hilfreich

Hallo Sergej,
da du um Verbesserungswünsche gebeten hast, habe ich mal ohne den Code zu prüfen zwecks der Übersichtlichkeit bisschen was verändert...

Code:

Sub CATMain()

  Dim fso, PDFName 
  Dim oDocument As Document
  Dim oDrawingDoc As Document
  Dim DrawingName As String
  Dim PDFFile as Object
  Dim PDFName As string
  Dim USERDIR As String
  Dim USERDIR2 As String
  Dim Blattnamealt As String
  Dim Blattname As String
  Dim FoldObj As Folder
 
  Set fso = CreateObject("Scripting.FileSystemObject")

  '---Dokument geoeffnet?---
  If CATIA.Documents.Count = 0 Then
      Box = MsgBox("Es wurde kein aktives Dokument identifiziert" + Chr(10) + "Bitte oeffnen Sie zuerst ein Dokument und starten Sie dann das Makro erneut", vbInformation, "HINWEIS")
      Exit Sub
  End If

  Set oDocument = CATIA.ActiveDocument

  '---Drawing geoeffnet?---
  If TypeName(oDocument) <> "DrawingDocument" Then
      Box = MsgBox("Dokument ist keine Drawing!" + Chr(10) + "Macro wurde abgebrochen", vbInformation, "ERROR")
      Exit Sub
  End If

  '---Blattname prüfen und ggf. umbenennen---
  Set oSheets = oDocument.Sheets
  Set Sheet = oSheets.Item(1)
  Blattnamealt=Sheet.Name
  Blattname = Sheet.Name

  If Blattname <>"Blatt.001" then
      MsgBox "Blattname wird temporär geändert!"
      Sheet.Name="Blatt.001"
  End If

  '---Arbeitsverzeichnise anlegen---
  USERDIR  = "PFAD" +CATIA.SystemService.Environ("USERNAME") &"\temp_pdf"
  Set FoldObj = CATIA.FileSystem.CreateFolder(USERDIR)

  '---PDF ausschreiben---
  DrawingName = oDocument.Name
  PDFName = Left(DrawingName, 11)
  oDrawingDoc.ExportData USERDIR+"\"+PDFName, "pdf"

  '---Bereits vorhandene suchen---
  IF fso.FileExists("PFAD" +CATIA.SystemService.Environ("USERNAME") +"\export\"+Name123+".pdf") = TRUE then
      fso.CopyFile "\\de.ray.group\catiav5$\" +CATIA.SystemService.Environ("USERNAME") +"\export\"+PDFName+".pdf","\PFAD" +CATIA.SystemService.Environ("USERNAME") +"\export\"+PDFName+"alt.pdf", TRUE
      Box = MsgBox("Dokument mit gleichen Namen war bereits vorhanden!" + Chr(10) + "Vorhandene Datei wurde umbenannt in "+PDFName+"alt.pdf" , vbInformation, "ERROR")
      fso.DeleteFile("PFAD" +CATIA.SystemService.Environ("USERNAME") +"\export\"+PDFName+".pdf")
      'fso.DeleteFolder("PFAD" +CATIA.SystemService.Environ("USERNAME") &"\temp_pdf")
      'exit sub
  End if

  '---PDFumbenennen---
  USERDIR1  = "PFAD" +CATIA.SystemService.Environ("USERNAME") &"\export"

  Set PDFFile = fso.GetFile(USERDIR+"\"+PDFName+"_Blatt_001.pdf")

  PDFName.name =USEDIR1+Name123+".pdf"

  '---PDF verschieben---
  fso.CopyFile PDFName, "PFAD" +CATIA.SystemService.Environ("USERNAME") +"\export\"+Name123+".pdf", True
  fso.DeleteFolder("PFAD" +CATIA.SystemService.Environ("USERNAME") &"\temp_pdf")
  Sheet.Name=Blattnamealt
  msgbox "PDF-File von"+PDFName+" wurde in PFAD" +CATIA.SystemService.Environ("USERNAME") +"\export\ gespeichert!"

End Sub



Es muss Struktur rein. Bei solchen Miniprogrammen mag das alles so noch gehen, aber wenn du erstmal bei mehreren tausend Zeilen Code in zig verschiedenen Funktionen angelangt bist, dann wirst du feststellen, dass ein systematisches Vorgehen absolut notwendig ist. Ich würde in jedem Fall auch immer alle Variablen im "Kopf" definieren und Objekte an gegebenen Stellen instanziieren. Außerdem kann zu viel Beschreibung kontraproduktiv sein! Eher minimalistisch halten und im Kopf die gesamte Funktion beschreiben. Eine einzelne Funktion sollte in sich so oder so am besten autark bzw. mit übergebenen Objekten arbeiten. Dann kann man die einmal richtig inkl. Fehlerbehandlung schreiben und entsprechend in jedem Programm verwenden.

Wobei ich vorallem bei solchen Zeilen...

Code:
fso.CopyFile "\\de.ray.group\catiav5$\" +CATIA.SystemService.Environ("USERNAME") +"\export\"+PDFName+".pdf","\PFAD" +CATIA.SystemService.Environ("USERNAME") +"\export\"+PDFName+"alt.pdf", TRUE


...noch etwas ändern würde!

Ich würde es eher so schreiben...

Code:

  Dim srcFile as String
  Dim trgtFile as String
  Dim Filename as String
  Dim UserName as string

  UserName = CATIA.SystemService.Environ("USERNAME")
  Filename = PDFName + ".pdf"
  srcFile = "\\de.ray.group\catiav5$\" + UserName + "\export\" + Filename
  trgtFile = "\PFAD\" + UserName + "\export\" + Filename



Alles eben ein bisschen mehr strukturieren. Die Stringvariablen lassen dein Programm nicht wirklich größer werden bzw. fressen eben so gut wie keine Ressourcen, allerdings kann man es dann wenigstens auch lesen.

BTW habe ich gesehen, dass du das Objekt "ActiveDocument" 3 mal instanziiert hast. Das macht garkeinen Sinn  Einmal reicht und wenn die Prüfungen entsprechendes Abfangen, kann man auch damit weiterarbeiten 

... das mal so als Rat von meiner Seite  Die Funktion selbst habe ich jetzt wie gesagt nicht geprüft!

------------------
MFG
Rick Schulz

Nettiquette (CAD.de)  -  Was ist die Systeminfo?  -  Wie man Fragen richtig stellt.  -  Unities

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

SergejH
Mitglied
CAD Support


Sehen Sie sich das Profil von SergejH an!   Senden Sie eine Private Message an SergejH  Schreiben Sie einen Gästebucheintrag für SergejH

Beiträge: 55
Registriert: 30.10.2003

WIN10
I7
16 GB
Quadro T2000
4GB
CREO 3&6
Catia V5 R28 SP3
NX 12
Windchill 11

erstellt am: 14. Dez. 2012 14:31    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo Rick,

genau das habe ich gemeint!
Vielen Dank für das "Korrekturlesen".

die UU sind unterwegs

Danke und Gruß

Sergej

------------------
Grüsse
Sergej

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

SergejH
Mitglied
CAD Support


Sehen Sie sich das Profil von SergejH an!   Senden Sie eine Private Message an SergejH  Schreiben Sie einen Gästebucheintrag für SergejH

Beiträge: 55
Registriert: 30.10.2003

WIN10
I7
16 GB
Quadro T2000
4GB
CREO 3&6
Catia V5 R28 SP3
NX 12
Windchill 11

erstellt am: 20. Dez. 2012 17:05    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo Rick,

Noch ein Mal Danke für deine Hilfe und Kommentare.
Hier ist lauffähiges   Code:

Code:

Language="VBSCRIPT"
'Create by Sergej Hempel 14-12-2012
'Contact: sergej.hempel@de.araymond.com
'Contact2: +49 7621 668 4511
Version 2.1
'---------------------------------------
'Macro erstellt ein PDF vom ersten Zeichnungsblatt
'und öffnet es in Acrobat Reader
'----------------------------------------

Sub CATMain()
Dim fso
Dim oPDF
Dim PDFName As String
Dim oDocument As Document
Dim FoldObj As Folder
Dim Path As String
Dim TMPDIR As String
Dim TRGDIR As String
Dim NAMETMP As String
Dim NAMEPKT
Dim objIntExplorer As Object


'PfadKonfiguration
Path ="\\de.ray.group\catiav5$\"
TMPDIR  = Path +CATIA.SystemService.Environ("USERNAME") &"\temp_pdf"
TRGDIR  = Path +CATIA.SystemService.Environ("USERNAME") &"\export"
'File System
Set fso = CreateObject("Scripting.FileSystemObject")


'Dokument geoeffnet?
If CATIA.Documents.Count = 0 Then
Box = MsgBox("Es wurde kein aktives Dokument identifiziert" + Chr(10) + "Bitte oeffnen Sie zuerst ein Dokument und starten Sie dann das Makro erneut", vbInformation, "HINWEIS")
Exit Sub
End If


Set oDocument = CATIA.ActiveDocument

'Drawing geoeffnet?
If TypeName(oDocument) <> "DrawingDocument" Then
Box = MsgBox("Dokument ist keine Drawing!" + Chr(10) + "Macro wurde abgebrochen", vbInformation, "ERROR")
Exit Sub
End If

'nur ein Blatt
Set oSheets = oDocument.Sheets
If oSheets.Count < 2 then
Box = MsgBox("Zeichnung hat nur ein Blatt, benutzen Sie die SPEICHERN ALS-Funktion" + Chr(10) + "Macro wird abgebrochen", vbInformation, "ERROR")
Exit Sub
End If

'Blattname prüfen
Set oSheets = oDocument.Sheets
Set Sheet = oSheets.Item(1)
Blattnamealt=Sheet.Name
Blattname = Sheet.Name
If Blattname <>"Blatt.001" then
MsgBox "Blattname wird temporär geändert!"
Sheet.Name="Blatt.001"
End If

'Arbeitsverzeichnise anlegen
Set FoldObj =CATIA.FileSystem.CreateFolder(TMPDIR)

'PDF ausschreiben
NAMETMP = Left(oDocument.Name, 11)
NAMEPKT = InStr (NAMETMP, ".")
If NAMEPKT <>0 Then
MsgBox "Zeichnungsname hat weniger als 11 Zeichen: Die Namenskonvetion ist nicht eingehalten!" + Chr(10) + "Macro wird abgebrochen", vbInformation, "ERROR"
Exit Sub
End If
oDocument.ExportData TMPDIR+"\"+NAMETMP, "pdf"


'Bereits vorhandene suchen
IF fso.FileExists(TRGDIR+"\"+NAMETMP+".pdf") = TRUE then
fso.CopyFile TRGDIR+"\"+NAMETMP+".pdf",TRGDIR+"\"+NAMETMP+"_alt.pdf", TRUE
Box = MsgBox("Dokument mit gleichen Namen war bereits vorhanden!" + Chr(10) + "Vorhandene Datei wurde umbenannt in "+NAMETMP+"_alt.pdf" , vbInformation, "Hinweis")
fso.DeleteFile TRGDIR+"\"+NAMETMP+".pdf"
End if

'PDFumbenennen
Set oPDF = fso.GetFile(TMPDIR+"\"+NAMETMP+"_Blatt_001.pdf")
oPDF.name = NAMETMP+".pdf"

'PDF verschieben
fso.CopyFile oPDF, TRGDIR+"\"+NAMETMP+".pdf", True
fso.DeleteFolder(TMPDIR)
Sheet.Name=Blattnamealt
msgbox "PDF-File von"+NAMETMP+" wurde in "+TRGDIR+" gespeichert!"+ Chr(10) + "und wird jetzt geöffnet" , vbInformation, "Hinweis"

'PDF öffnen
Set objIntExplorer = CreateObject("InternetExplorer.Application")
objIntExplorer.Visible = True
objIntExplorer.Navigate TRGDIR+"\"+NAMETMP+".pdf"

End Sub


Grüße

Sergej

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz