Hi,
ich benutze den folgenden Code um aus Word heraus eine PDF-Datei zu erzeugen. Es funktioniert auch meistens, aber manchmal wird der PDF-Creator nicht beendet und ich muss den Task-Manager aufrufen um ihn zu beenden. Meistens passiert dies beim ersten mal und bei den nächsten Druckvergängen nicht mehr. Ist der Code ok ? Ich benutze übrigens Windows-XP.
Gruß Thomas !
Private WithEvents PDFJob As PDFCreator.clsPDFCreator
Private Sub UserForm_Initialize()
On Error Resume Next
If Len(ActiveDocument.Path) = 0 Then
MsgBox "Bitte zuerst das Dokument speichern !", vbExclamation
End
End If
Set PDFJob = New clsPDFCreator
With PDFJob
If .cStart("/NoProcessingAtStartup") = False Then
cmdPDFCr.Enabled = False
AddStatus "PDFCreator kann nicht initialisiert werden !"
Exit Sub
End If
End With
'verschiedene Optionen werden ausgelesen
cbPDFUseSecurity = lPS(Pd$, "PDFUseSecurity", "0")
cbPDFDisallowCopy = lPS(Pd$, "PDFDisallowCopy", "0")
cbPDFDisallowModifyContents = lPS(Pd$, "PDFDisallowModifyContents", "0")
tbPDFOwnerPasswordString = lPS(Pd$, "PDFOwnerPasswordString", "eG&9/kx3")
AddStatus "PDFCreator wurde initialiert."
Call cbPDFUseSecurity_Change
End Sub
Private Sub cbPDFUseSecurity_Change()
On Error Resume Next
If cbPDFUseSecurity Then
cbPDFDisallowModifyContents.Enabled = True
cbPDFDisallowCopy.Enabled = True
tbPDFOwnerPasswordString.Enabled = True
Else
cbPDFDisallowModifyContents.Enabled = False
cbPDFDisallowCopy.Enabled = False
tbPDFOwnerPasswordString.Enabled = False
End If
End Sub
Private Sub cmdPDFCr_Click()
Dim outName$
cmdEnde.Enabled = False
If InStr(1, ActiveDocument.Name, ".", vbTextCompare) > 1 Then
outName$ = Mid(ActiveDocument.Name, 1, InStr(1, ActiveDocument.Name, ".", vbTextCompare) - 1)
Else
outName$ = ActiveDocument.Name
End If
cmdPDFCr.Enabled = False
With PDFJob
.cOption("UseAutosave") = 1
.cOption("UseAutosaveDirectory") = 1
.cOption("AutosaveStartStandardProgram") = 0
.cOption("SendEmailAfterAutoSaving") = 0
.cOption("ProcessPriority") = 2
.cOption("AutosaveDirectory") = ActiveDocument.Path
.cOption("AutosaveFilename") = Emp$ & outName
.cOption("AutosaveFormat") = 0 ' 0 = PDF
.cOption("PDFUseSecurity") = cbPDFUseSecurity
.cOption("PDFLowEncryption") = 1
.cOption("PDFOwnerPass") = 1
.cOption("PDFOwnerPasswordString") = tbPDFOwnerPasswordString
.cOption("PDFDisallowCopy") = cbPDFDisallowCopy
.cOption("PDFDisallowModifyContents") = cbPDFDisallowModifyContents
'MsgBox "PDFCompressionColorCompression = ", .cOption("PDFCompressionColorCompression")
.cClearCache
End With
DoEvents
If ufGADrucken.cbAlles Then
ActiveDocument.PrintOut Background:=0
Else
v$ = ufGADrucken.Tag
If v$ <> "" Then ActiveDocument.PrintOut Range:=wdPrintRangeOfPages, Pages:=v$, Background:=0
End If
AddStatus "Start PDF-Erstellung..."
DoEvents
PDFJob.cPrinterStop = False
End Sub
Private Sub PDFJob_eError()
AddStatus "ERROR [" & PDFJob.cErrorDetail("Number") & "]: " & PDFJob.cErrorDetail("Description")
End Sub
Private Sub PDFJob_eReady()
AddStatus "Datei'" & PDFJob.cOutputFilename & "' wurde gespeichert."
PDFJob.cPrinterStop = True
cmdPDFCr.Enabled = True
cmdEnde.Enabled = True
ufMail.Tag = PDFJob.cOutputFilename
End Sub
Private Sub AddStatus(Str1 As String)
With tbStatus
If Len(.Text) = 0 Then
.Text = Now & ": " & Str1
Else
.Text = .Text & vbCrLf & Now & ": " & Str1
End If
.SelStart = Len(.Text)
.SetFocus
End With
End Sub
Private Sub UserForm_QueryClose(Cancel As Integer, Closemode As Integer)
PDFJob.cClose
Set PDFJob = Nothing
Sleep 250
DoEvents
On Error Resume Next
sPS Pd$, "PDFUseSecurity", IIf(cbPDFUseSecurity, "1", "0")
sPS Pd$, "PDFDisallowCopy", IIf(cbPDFDisallowCopy, "1", "0")
sPS Pd$, "PDFDisallowModifyContents", IIf(cbPDFDisallowModifyContents, "1", "0")
sPS Pd$, "PDFOwnerPasswordString", tbPDFOwnerPasswordString
End Sub
Private Sub cmdEnde_Click()
Unload Me
End Sub