Direkt zum Hauptinhalt

PDF-Dokumente zusammenführen

Dieses Skript zeigt, wie alle generierten PDF-Einzeldokumente am Ende eines Exports in ein einziges Sammel-PDF zusammengeführt werden.



Anwendungsfall

Sie exportieren z.B. 50 Angebote als Einzeldokumente im PDF-Format und möchten zusätzlich ein zusammengefügtes Gesamt-PDF erhalten, um dieses beispielsweise zu archivieren oder für einen Sammeldruck.



Konfiguration in PRINT+PLUS

  • Event: AfterLastDocument (wird ausgeführt, nachdem alle Einzeldokumente erzeugt wurden)

  • Exportformat: PDF (das Skript prüft, ob PDFs vorliegen)

  • Zusätzliche Referenzen (im Skript-Editor unter "Referenzen" hinzufügen):

    • DevExpress.Docs.vXX.X.dll
    • DevExpress.Pdf.vXX.X.Core.dll
    • DevExpress.Pdf.vXX.X.Drawing.dll

Die DLLs finden Sie im cobra-Verzeichnis in einer der folgenden Verzeichnisse (je nach Version):
C:\Program Files\cobra\CRMPRO\Programm\Module\
C:\Program Files\cobra\CRMPRO\Programm\Module\Extension\Addins\PrintPlus\DevExpress\

Je nach Version von cobra ist die Versionsnummer unterschiedlich.



Vollständiges Skript

// Version 6
namespace Ruthardt.PrintPlus.Skripting
{
	using System;
	using System.Diagnostics;
	using System.IO;
	using System.Linq;
	using DevExpress.Pdf;
	using Ruthardt.Common.Util;
	using Ruthardt.PrintPlus.Model.Enumerations;
	using Ruthardt.PrintPlus.Model.Interfaces;
	
	public class PdfsZusammenfuehren : IScriptAction
	{
	    public void Execute(IPrintContext printContext, ICurrentContext currentContext, IChildContext childContext)
	    {
	        // Nur bei PDF-Export ausführen
	        if (printContext.ExportFormat != ExportFormats.Pdf)
	        {
	            return;
	        }
	
	        // Prüfen ob überhaupt Dokumente erzeugt wurden
	        if (!printContext.CurrentDocumentFileNameList.Any())
	        {
	            printContext.Logger.Info("Keine Dokumente vorhanden. Zusammenführung wird übersprungen.");
	            return;
	        }
	
	        // Zielpfad für das Sammel-PDF
	        var dateiname = $"{printContext.Config.ConfigurationName}_{DateTime.Now:dd-MM-yy_HHmm}.pdf";
	        var ausgabePfad = Path.Combine(printContext.ExportDirectory.FullName, dateiname);
	
	        // PDFs zusammenführen
	        using (var processor = new PdfDocumentProcessor())
	        {
	            processor.CreateEmptyDocument(ausgabePfad);
	
	            foreach (var dokument in printContext.CurrentDocumentFileNameList)
	            {
	                processor.AppendDocument(dokument.FullName);
	            }
	        }
	
	        printContext.Logger.Info($"Sammel-PDF erstellt: {ausgabePfad} ({printContext.CurrentDocumentFileNameList.Count} Dokumente)");
	
	        // Sammel-PDF direkt öffnen
	        Process.Start(ausgabePfad);
	    }
	}
}



Erklärung

  1. Format prüfen: Das Skript führt nur bei PDF-Exporten zusammen. Bei Word-Exporten wird es übersprungen.
  2. Dokumentliste auslesen: printContext.CurrentDocumentFileNameList enthält alle während dieses Exports erzeugten Dokumente.
  3. Zusammenführen: Per PdfDocumentProcessor wird ein leeres PDF erstellt und alle Einzeldokumente der Reihe nach angehängt.
  4. Ergebnis öffnen: Das zusammengeführte PDF wird automatisch geöffnet.



Variante: Einzeldokumente nach dem Zusammenführen löschen

// Nach dem Zusammenführen die Einzeldokumente entfernen
foreach (var dokument in printContext.CurrentDocumentFileNameList)
{
    if (File.Exists(dokument.FullName))
    {
        File.Delete(dokument.FullName);
    }
}



Variante: Nur zusammenführen ab einer bestimmten Anzahl

// Nur zusammenführen, wenn mehr als 1 Dokument erzeugt wurde
if (printContext.CurrentDocumentFileNameList.Count <= 1)
{
    return;
}