Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

PDF-Formulare per VBA manipulieren

519 views
Skip to first unread message

off...@compuservice.at

unread,
Mar 14, 2012, 5:09:38 AM3/14/12
to
Hallo Fachgemeinde,

ich habe Artikeldaten in einer ACCESS-Datenbank.
Die Daten sollen in ein im Livecycle-Designer erstelltes PDF-Formular geschrieben werden. Zur Zeit verwende ich den Umweg über XML-Dateien:

Über die Funktion "Formulardaten exportieren" im Acrobat Pro erzeuge ich eine XML-Datei. Diese kann ich per VBA manipulieren und unter beliebigem Namen abpeichern. Dann kann ich die Formulardaten im Acrobat wieder importieren. Das Importieren funktioniert aber nur Datei für Datei. Dies soll aber für mehrere hundert Dateien geschehen und aus zeitlichen Gründen automatiert werden.

Ich bräuchte daher entweder die Möglichkeit
- die Funktionen "Formulardaten ex/importieren" und "Speichern unter" im PDF-Formular per VBA zu steuern oder
- die Datenfelder der PDF-Formulare per VBA direkt zu manipulieren und dann unter einem beliebigen Dateinamen abzuspeichern.

Die verschiedenen Verweise auf DLLs mit PDF oder Acrobat-Bezug hab' ich mir schon angesehen, werde aber wegen fehlender Doku nicht daraus schlau.

Vielen Dank im Voraus für Eure Hilfe und
Liebe Grüße
Roman

Lupus Goebel

unread,
Mar 14, 2012, 9:09:39 AM3/14/12
to
Hallöschen,



Am 14.03.12 10:09 schrieb off...@compuservice.at:

> ich habe Artikeldaten in einer ACCESS-Datenbank. Die Daten sollen in
> ein im Livecycle-Designer erstelltes PDF-Formular geschrieben werden.
>
[..]

> Die verschiedenen Verweise auf DLLs mit PDF oder Acrobat-Bezug hab'
> ich mir schon angesehen, werde aber wegen fehlender Doku nicht daraus
> schlau.


Welche Officeversion denn?
Ab Office 2007 kann man sogar ohne zusätzliche DLL PDF erzeugen.

Berichte z.B.: DoCmd.OutputTo acOutputReport ......


--
MfG - Lupus Goebel
Der Sumpf- Morasthobbybastler und Anfaenger mit
Wissensdurst (http://www.lupusdw.de http://foto.lupusdw.de)
Urlaub macht man in Irland: http://www.eaglesnest-bb.com/

off...@compuservice.at

unread,
Mar 14, 2012, 10:51:38 AM3/14/12
to
Hallo Lupus,


Am Mittwoch, 14. März 2012 14:09:39 UTC+1 schrieb Lupus Goebel:
> Hallöschen,
>
> Welche Officeversion denn?
Access 2010
> Ab Office 2007 kann man sogar ohne zusätzliche DLL PDF erzeugen.
>
> Berichte z.B.: DoCmd.OutputTo acOutputReport ......

Das PDF-Formular aoll als solches zu erhalten.

Das Importieren der XML-Dateien erfolgt übrigens mit der XMLImport-Funktion.

Vielen Dank und
LG/Roman G.



Lupus Goebel

unread,
Mar 14, 2012, 12:55:55 PM3/14/12
to
Tach,

Am 14.03.12 15:51 schrieb off...@compuservice.at:
> Hallo Lupus,
>
>
> Am Mittwoch, 14. März 2012 14:09:39 UTC+1 schrieb Lupus Goebel:
>> Hallöschen,
>>
>> Welche Officeversion denn?
> Access 2010

Da gehts ja dann

>> Ab Office 2007 kann man sogar ohne zusätzliche DLL PDF erzeugen.
>>
>> Berichte z.B.: DoCmd.OutputTo acOutputReport ......
>
> Das PDF-Formular aoll als solches zu erhalten.

Das habe ich jetzt nicht verstanden.

off...@compuservice.at

unread,
Mar 15, 2012, 12:43:14 AM3/15/12
to
Guten Morgen,

Am Mittwoch, 14. März 2012 17:55:55 UTC+1 schrieb Lupus Goebel:
>
> > Das PDF-Formular aoll als solches zu erhalten.
>
> Das habe ich jetzt nicht verstanden.

Verzeihung, da waren meine Finger wohl schneller als mein Gehirn.
Ich meine, wenn ich einen Bericht in ein PDF "drucke" dann ist es kein Formular mit Feldern. Dieser Zustand sollte aber erhalten bleiben. Somit suche ich nach einer Möglichkeit, das PDF-Formular zu manipulieren.

Grüße
Roman

Lupus Goebel

unread,
Mar 15, 2012, 1:32:46 AM3/15/12
to
Gute Morsche,

Am 15.03.12 05:43 schrieb off...@compuservice.at:


> Verzeihung, da waren meine Finger wohl schneller als mein Gehirn.

Du hast wenigstens eins ;)

> Ich meine, wenn ich einen Bericht in ein PDF "drucke" dann ist es
> kein Formular mit Feldern.

Jetzt habe ich es verstanden. Nein das geht leider nicht, jedenfalls mir
nicht bekannt.

> Dieser Zustand sollte aber erhalten bleiben. Somit suche ich nach
> einer Möglichkeit, das PDF-Formular zu manipulieren.

Dann ziehe ich mich an dieser Stelle zurück, denn da kann ich nun doch
nicht helfen.

Ahmed Martens

unread,
Mar 15, 2012, 3:19:02 AM3/15/12
to
IMO PDFtk kann Formulare und Formulardaten verwalten.
Ich selber habe mich damit allerdings nie weiter beschäftigt. Aber
vielleicht hilft dir das weiter:

Download: http://www.pdfhacks.com/pdftk/#packages

Gruß Ahmed
--
Antworten bitte nur in der Newsgroup.

René Panzeri

unread,
Mar 15, 2012, 4:57:57 AM3/15/12
to
Am 14.03.2012 10:09, schrieb off...@compuservice.at:

> ich habe Artikeldaten in einer ACCESS-Datenbank.
> Die Daten sollen in ein im Livecycle-Designer erstelltes PDF-Formular geschrieben werden. Zur Zeit verwende ich den Umweg über XML-Dateien:

Hallo Roman

Vielleicht hilft Dir der folgende (etwas abgespeckte) Ansatz weiter:

Private Function PrivSub_Datenkontrollblätter()

'setzt Acrobat-Vollversion voraus - Verweis auf acrobat.tlb + AcroRd32.dll

'Adobe-Objekte
Dim AppAcro As Object
Dim avDoc As New AcroAVDoc
Dim pdDoc As New AcroPDDoc
Dim formApp As Object
Dim acroForm As Object
Dim AcroField As AFORMAUTLib.Field

'Recordset für Datenquelle
Set rstAdressen = CurrentDb.OpenRecordset("DeinSelectString")

'Adobe instanzieren
Set AppAcro = CreateObject("AcroExch.App")
AppAcro.Show

Set avDoc = CreateObject("AcroExch.AVDoc")

If avDoc.Open(strPdfVorlage, vbNull) <> True Then Exit Function

Set pdDoc = avDoc.GetPDDoc
AppAcro.Show
Set formApp = CreateObject("AFormAut.App")
Set acroForm = formApp.Fields

Do Until rstAdressen.EOF

For Each AcroField In acroForm
With AcroField
If .Name =
"Institutsreport[0].Stammdaten[0].txt_InstNr[0]" Then
.Value = Nz(rstAdressen!InstNr)

ElseIf .Name =
"Institutsreport[0].Stammdaten[0].txt_FilNr[0]" Then
.Value = Nz(rstAdressen!FilNr)

'weitere

End If

End With

Next AcroField

strPdfDateiablage = DeinAblagepfad & strMitgliederNr & ".pdf"
If pdDoc.Save(PDSaveFull, strPdfDateiablage) = True Then
'obsolet
Else
MsgBox "Speicherung fehlgeschlagen"
End If

'Nächster Datensatz
rstAdressen.MoveNext
Loop

avDoc.Close (0)

fCloseApp ("AppAcro")

End Function


Viel Erfolg
René

Roman

unread,
Mar 16, 2012, 1:54:19 AM3/16/12
to
Guten Morgen,

Am Donnerstag, 15. März 2012 09:57:57 UTC+1 schrieb René Panzeri:
>
> Vielleicht hilft Dir der folgende (etwas abgespeckte) Ansatz weiter:
.
.

Rene, das sieht für mich sehr vielversprechend aus. Ich denke das ist es, wonach ich schon seit längerem suche. Das ist nämlich nicht mein erster Anlauf.
Ich werde versuchen, den Code in den nächten Tagen an meine Bedürfnisse anzupassen. Für die acrobat.tlb habe ich auch schon eine Dokumentation von Adobe gefunden. Für die AcroRd32.dll allerdings nicht. Weiß hier jemand einen Link?

acrobat.tlb: http://www.adobe.com/content/dam/Adobe/en/devnet/acrobat/pdfs/iac_developer_guide.pdf

Vielen Dank vorerst und
LG/Roman

off...@compuservice.at

unread,
Mar 17, 2012, 4:27:28 PM3/17/12
to
Hallo und guten Abend,

ich habe Teile von dem von René geposteten Code übernommen.
Es funktioniert bestens. Einen zusätzlichen Verweis auf "AcroForm.app" mußte ich noch setzen

Vielen Dank für die Hilfe und
Herzliche Grüße
Roman
0 new messages