PDF-Dokumente zusammenfassen

Beipiel, wie man aus mehreren PDF-Dokumenten eine einzige PDF-Datei erstellt

Im Zuge eines Individualprojektes, wo es um die Ablöse einer MS-Access Lösung ging, wurden wir unlängst mit der Aufgabe konfrontiert, verschiedene PDF-Dokumente zusammenzufassen. Hintergrund war der, dass es verschiedene Projekte gab und diesen unterschiedliche PDFs zugeordnet wurden. Bei einer anberaumten Sitzung wurden in weiterer Folge mehrere Projekte zum Besprechen ausgewählt und jeder Sitzungsteilnehmer sollte vorab die notwendigen Informationen per PDF zusammengefasst bekommen. Da MD-Premium.NET über PDF-Funktionalität aufgrund des Archivierungsmoduls verfügt, beschlossen wir, dies einfach mittels einer Funktion zu lösen, die einen RefCursor zurückgibt. Wir erstellten daher zuerst die entsprechende Datenbankfunktion mit einem Out-Parameter, der die notwendigen Dokumente aus der Tabelle MDDOC selektiert (hier nur ein einfacher Select, der aber im Wesentlichen die Funktionalität abbildet):

CREATE or replace PROCEDURE Ind_GetPDFs (p_RefCursor out sys_refcursor) IS
BEGIN
 OPEN p_RefCursor FOR 
 select Titel, Document, Datum from mddoc where Klient_ID='1' and INSTR(Document_Name,'.pdf') > 0 order by SID;
END;

Wichtig dabei ist, dass das erste Feld des Selects den Titel des Dokuments, das zweite das PDF selbst und das dritte das Dokumentendatum auswählt. Der Titel wird in weiterer Folge dafür verwendet, um eine Trennseite im PDF zu erzeugen. Dies kann auch dazu benutzt werden, um einzelne zusätzliche Trennseiten zu erzeugen, wenn das Dokument mit NULL geliefert wird.

Nach dem Erstellen der Funktion musste nur mehr das Command in der entsprechenden RWI-Datei erstellt und mit der Datenbankfunktion verknüpft werden:

<Command  Name="Ind.MergePDF" Title="Merge PDFs" Mode="Procedure" Type="MultiData.Infrastructure.Common.DocumentServer.PdfServer, MultiData.Infrastructure.Common" Action="MergePDFs">
	<Parameters>
		<mdc:Parameter Name="funcName" Value="Ind_GetPDFs" />
		<mdc:Parameter Name="theBlob" DataType="Blob" ParameterType="ReturnValue" />
	</Parameters>
	<AfterExecute>
		<Command Name="Cmd.BlobReturnTest1.SaveAs" Mode="Procedure" Type="MultiData.Utility.FileUtil, MultiData.Utility" Action="SaveToTmpFile" >
			<Parameters>
				<mdc:Parameter Name="content" Value="{theBlob}" />
				<mdc:Parameter Name="ext" Value="pdf" />
				<mdc:Parameter Name="retVal" ParameterType="ReturnValue"  />
			</Parameters>
			<AfterExecute>
				<Command Name="Cmd.BlobReturnTest1.SaveAs.Open" Mode="External" Action="cmd.exe;0;/c start {retVal}"/>
			</AfterExecute> 
		</Command>
	</AfterExecute>
</Command>

Dazu wurde die .NET Funktion "MergePDFs" verwendet (ab Version 5.2.040.0001), die als Parameter den Funktionsnamen erwartet und das fertig gemergte PDF-Dokument zurückliefert. In diesem Beispiel sichern wir den Rückgabewert in eine temporäre Datei und öffnen diese anschließend mit dem zugeordneten Programm des Betriebssystems.

Tags: PDF

Kommentare 0

Kommentar schreiben

8 Okt 2015