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.dllDevExpress.Pdf.vXX.X.Core.dllDevExpress.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.PrintPlus.Model.Enumerations;
using Ruthardt.PrintPlus.Model.Interfaces;
using Ruthardt.Common.Util;
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
- Format prüfen: Das Skript führt nur bei PDF-Exporten zusammen. Bei Word-Exporten wird es übersprungen.
- Dokumentliste auslesen:
printContext.CurrentDocumentFileNameListenthält alle während dieses Exports erzeugten Dokumente. - Zusammenführen: Per
PdfDocumentProcessorwird ein leeres PDF erstellt und alle Einzeldokumente der Reihe nach angehängt. - 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;
}