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