PDF Datei aus Datenbank erzeugen

Antwort erstellen


BBCode ist eingeschaltet
[img] ist ausgeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: PDF Datei aus Datenbank erzeugen

Re: PDF Datei aus Datenbank erzeugen

von F3K Total » Di, 29.11.2011 06:12

Hallo,
wie Du schreibst, möchtest Du die Seriedruckfunktion zur Erstellung deiner .pdf's verwenden. Nach meinem Verständnis kann das nicht funktionieren, den diese Funktion erzeugt immer aus einem Datensatz genau ein Dokument, ob die nun später gesamtheitlich zusammengefaßt werden oder nicht.
Hinter der Funktion Serienbrief steht folgende Funktion http://api.openoffice.org/docs/common/r ... Merge.html, die auch per Makro ansprechbar ist, kannst Du im Forum suchen, ggf. per Google-Suche
Da Du aber sicherlich mehrere Datensätze pro Dokument verarbeiten möchtest, klappt das nicht, es sein denn Du schaffst es, alle Daten zu einer Person per Abfrage oder View genau in einem Datensatz zusammenzufassen, was schwer sein dürfte.
Mit Makros kannst Du deine gewünschte Funktion umsetzen, da mußt Du allerdings Einiges programmieren.
Ich habe es für einen ähnlichen Fall einmal so gemacht:
- per Makro-MailMerge habe ich mir für jede Person ein .odt Dokument mit Personendaten erzeugt und abgespeichert.
- dann eine Schleife über alle diese Dokumente gemacht. Jedes Dokument geöffnet, dazugehörige personenspezifischen Daten aus der DB eingelesen und ins Dokument eingetragen, dann als .pdf gespeichert.
Die wichtigsten Befehle, quasi als Suchliste zu verwenden, lauten:

Zum Erzeugen der Serienbriefe:

Code: Alles auswählen

StarDesktop.loadComponentFromURL(Url, "_blank", 0, FileProperties0())
MailMerge = createunoservice("com.sun.star.text.MailMerge")
Zum Erstellen der spezifischen .pdf's
Daten aus der DB auslese:

Code: Alles auswählen

DatabaseContext = createUnoService("com.sun.star.sdb.DatabaseContext")
Datenquelle = DatabaseContext.getByName(oComponent.getLocation())'Hier wird der aktuelle Datenbankname ermittelt
Verbindung = Datenquelle.GetConnection("","")
SQL_Anweisung = Verbindung.createStatement()
Sql_Abfrage=SQL_Anweisung.executeQuery("select ""VORNAME"", ""NACHNAME""  from ""Tabelle"" where ""Rechnung drucken""= true")
hier hängt es jetzt davon ab wie Du die Daten ins Writer Dokument bringen möchtest:
in eine Tabelle:

Code: Alles auswählen

myTables = createunoservice("com.sun.star.text.TextTables")
myTables = document.getTextTables
myTable = createunoservice("com.sun.star.text.TextTable")
myRow = createunoservice("com.sun.star.text.TextTableRow")
myTable = myTables.getByName("Tabellenname")
oder quasi eintippen mit dem Cursor:

Code: Alles auswählen

odoc = thisComponent
otext=oDoc.Text
ocursor=otext.createTextCursor()
speichern als .pdf(geht auch ohne Dispatcher "storetourl" oder "storeasurl"):

Code: Alles auswählen

dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
args1(0).Name = "URL"
args1(0).Value = "Pfad zur Datei.pdf"
args1(1).Name = "FilterName"
args1(1).Value = "writer_pdf_Export"
dispatcher.executeDispatch(document_loadet, ".uno:ExportDirectToPDF", "", 0, args1())
Gruß R

Re: PDF Datei aus Datenbank erzeugen

von pmoegenb » So, 27.11.2011 16:37

Wenn Du das Abbild richtig angeguckt hättest, wüsstest Du jetzt, dass es sich beim Abbild um eine Seriendruck für PDF-Dateien als Druckausgabe mit einzelnen Druckjobs je Datensatz handelt. Also genau das nach dem Du ursprünglich gefragt hast.

Was heißt nach Datum filtern ?

Wenn Du nur bestimmtes Datensätze benötigst, dann musst Du eben eine entsprechende Abfrage (SQL) in Base formulieren oder die Schalterleiste (Filter) im Fenster Seriendruck gemäß Abbild verwenden.

Re: PDF Datei aus Datenbank erzeugen

von pmoegenb » So, 27.11.2011 14:32

Unter LibreOffice 3.4.4 (ungetestet) siehe Abbildung:
Seriendruck_2011-11-27_14-30-23.gif
Seriendruck_2011-11-27_14-30-23.gif (106.74 KiB) 1550 mal betrachtet

Nach oben