Show Menu
THEMEN×

Programmgesteuertes Zusammenstellen von PDF-Dokumenten

Sie können die Assembler-Dienst-API verwenden, um mehrere PDF-Dokumente in einem einzigen PDF-Dokument zusammenzustellen. Die folgende Abbildung zeigt, wie drei PDF-Dokumente in einem einzigen PDF-Dokument zusammengeführt werden.
Um zwei oder mehr PDF-Dokumente in einem einzigen PDF-Dokument zusammenzuführen, benötigen Sie ein DDX-Dokument. Ein DDX-Dokument beschreibt das vom Assembler-Dienst erstellte PDF-Dokument. Das heißt, das DDX-Dokument weist den Assembler-Dienst an, welche Aktionen ausgeführt werden sollen.
Für diese Diskussion nehmen Sie an, dass das folgende DDX-Dokument verwendet wird.
 <?xml version="1.0" encoding="UTF-8"?>
 <DDX xmlns="https://ns.adobe.com/DDX/1.0/">
     <PDF result="out.pdf">
         <PDF source="map.pdf" />
         <PDF source="directions.pdf" />
     </PDF>
 </DDX>

Dieses DDX-Dokument führt zwei PDF-Dokumente mit den Namen map.pdf und directs.pdf zu einem einzigen PDF-Dokument zusammen.
Informationen zum Anzeigen eines DDX-Dokuments, das ein PDF-Dokument zerlegt, finden Sie unter Programmgesteuertes Disassemblieren von PDF-Dokumenten .
For more information about the Assembler service, see Services Reference for AEM Forms .
Weitere Informationen zu einem DDX-Dokument finden Sie unter Assembler-Dienst und DDX-Referenz .

Überlegungen beim Aufrufen des Assembler-Dienstes mit Webdiensten

Wenn Sie beim Zusammenstellen großer Dokumente Kopf- und Fußzeilen hinzufügen, tritt möglicherweise ein OutOfMemory Fehler auf, und die Dateien werden nicht zusammengeführt. Um die Wahrscheinlichkeit zu verringern, dass dieses Problem auftritt, fügen Sie ein DDXProcessorSetting Element zu Ihrem DDX-Dokument hinzu, wie im folgenden Beispiel gezeigt.
<DDXProcessorSetting name="checkpoint" value="2000" />
Sie können dieses Element als untergeordnetes Element des DDX Elements oder als untergeordnetes Element eines PDF result Elements hinzufügen. Der Standardwert für diese Einstellung ist 0 (null), wodurch der Checkpoint deaktiviert wird und sich das DDX so verhält, als wäre das DDXProcessorSetting Element nicht vorhanden. Wenn ein OutOfMemory Fehler auftritt, müssen Sie den Wert möglicherweise auf eine Ganzzahl einstellen, in der Regel zwischen 500 und 5000. Ein kleiner Checkpoint-Wert führt zu einem häufigeren Checkpoint.

Zusammenfassung der Schritte

So assemblieren Sie ein einzelnes PDF-Dokument aus mehreren PDF-Dokumenten:
  1. Schließen Sie Projektdateien ein.
  2. Erstellen Sie einen PDF Assembler-Client.
  3. Verweisen Sie auf ein vorhandenes DDX-Dokument.
  4. Referenzieren von PDF-Dokumenten zur Eingabe.
  5. Legen Sie Laufzeitoptionen fest.
  6. Stellen Sie die PDF-Eingabedateien zusammen.
  7. Extrahieren Sie die Ergebnisse.
Projektdateien einschließen
Schließen Sie die erforderlichen Dateien in Ihr Entwicklungsprojekt ein. Wenn Sie eine Clientanwendung mit Java erstellen, schließen Sie die erforderlichen JAR-Dateien ein. Wenn Sie Webdienste verwenden, stellen Sie sicher, dass Sie die Proxydateien einschließen.
Die folgenden JAR-Dateien müssen dem Klassenpfad Ihres Projekts hinzugefügt werden:
  • adobe-livecycle-client.jar
  • adobe-usermanager-client.jar
  • adobe-assembler-client.jar
  • adobe-utilities.jar (erforderlich, wenn AEM Forms unter JBoss bereitgestellt werden)
  • jbossall-client.jar (erforderlich, wenn AEM Forms unter JBoss bereitgestellt werden)
Wenn AEM Forms auf einem anderen unterstützten J2EE-Anwendungsserver als JBoss bereitgestellt werden, müssen Sie die Dateien "adobe-utilities.jar"und "jbossall-client.jar"durch JAR-Dateien ersetzen, die für den J2EE-Anwendungsserver spezifisch sind, auf dem die AEM Forms bereitgestellt werden.
PDF Assembler-Client erstellen
Bevor Sie einen Assembler-Vorgang programmgesteuert durchführen können, müssen Sie einen Assembler-Client erstellen.
Ein vorhandenes DDX-Dokument referenzieren
Zum Zusammenführen eines PDF-Dokuments muss auf ein DDX-Dokument verwiesen werden. Betrachten Sie beispielsweise das DDX-Dokument, das in diesem Abschnitt eingeführt wurde. Dieses DDX-Dokument weist den Assembler-Dienst an, zwei PDF-Dokumente in einem einzigen PDF-Dokument zusammenzuführen.
PDF-Dokumente zur Referenzeingabe
Verweisen Sie auf PDF-Eingabedateien, die Sie an den Assembler-Dienst übergeben möchten. Wenn Sie beispielsweise zwei PDF-Eingabedateien mit dem Namen "Map"und "Directions"übergeben möchten, müssen Sie die entsprechenden PDF-Dokumente weiterleiten.
Sowohl die Datei "map.pdf"als auch die Datei "richtungen.pdf"müssen in einem Sammlungsobjekt platziert werden. Der Name des Schlüssels muss mit dem Wert des PDF-Quellattributs im DDX-Dokument übereinstimmen. Es spielt keine Rolle, welchen Namen die PDF-Datei hat, wenn Schlüssel und Quellattribut im DDX-Dokument übereinstimmen.
Ein AssemblerResult Objekt, das ein Collection-Objekt enthält, wird zurückgegeben, wenn Sie den invokeDDX Vorgang aufrufen. Dieser Vorgang wird verwendet, wenn Sie zwei oder mehr PDF-Eingabedateien an den Assembler-Dienst übergeben. Wenn Sie jedoch nur eine PDF-Eingabedatei an den Assembler-Dienst übergeben und nur ein Dokument erwarten, rufen Sie den invokeOneDocument Vorgang auf. Beim Aufrufen dieses Vorgangs wird ein einzelnes Dokument zurückgegeben. Informationen zur Verwendung dieses Vorgangs finden Sie unter Zusammenstellen verschlüsselter PDF-Dokumente .
Festlegen von Laufzeitoptionen
Sie können Laufzeitoptionen festlegen, die das Verhalten des Assembler-Dienstes während der Ausführung eines Auftrags steuern. Sie können beispielsweise eine Option festlegen, mit der der Assembler-Dienst angewiesen wird, bei Auftreten eines Fehlers mit der Verarbeitung eines Auftrags fortzufahren. Weitere Informationen zu den Laufzeitoptionen, die Sie einstellen können, finden Sie in der AssemblerOptionSpec Klassenreferenz in der AEM Forms API-Referenz .
PDF-Eingabedateien zusammenstellen
Nachdem Sie den Dienstclient erstellt haben, auf eine DDX-Datei verweisen, ein Sammlungsobjekt erstellen, in dem PDF-Eingabedokumente gespeichert werden, und Laufzeitoptionen festlegen, können Sie den DDX-Vorgang aufrufen. Wenn Sie das in diesem Abschnitt angegebene DDX-Dokument verwenden, werden die Dateien map.pdf und directe.pdf in einem PDF-Dokument zusammengeführt.
Ergebnisse extrahieren
Der Assembler-Dienst gibt ein java.util.Map Objekt zurück, das vom AssemblerResult Objekt abgerufen werden kann und die Vorgangsergebnisse enthält. Das zurückgegebene java.util.Map Objekt enthält die resultierenden Dokumente und alle Ausnahmen.
Die folgende Tabelle fasst einige der Schlüsselwerte und Objekttypen zusammen, die sich im zurückgegebenen java.util.Map Objekt befinden können.
Schlüsselwert
Objekttyp
Beschreibung
documentName
com.adobe.idp.Document
Enthält die resultierenden Dokumente, die in einem DDX-Ergebniselement angegeben sind
documentName
Exception
Enthält eine Ausnahme für das Dokument
OutputMapConstants.LOG_NAME
com.adobe.idp.Documen
Enthält das Auftragsprotokoll
Siehe auch

Zusammenstellen von PDF-Dokumenten mit der Java-API

Stellen Sie ein PDF-Dokument mithilfe der Assembler Service API (Java) zusammen:
  1. Schließen Sie Projektdateien ein.
    Schließen Sie Client-JAR-Dateien wie "adobe-assembler-client.jar"im Klassenpfad Ihres Java-Projekts ein.
  2. Erstellen Sie einen PDF Assembler-Client.
    • Erstellen Sie ein ServiceClientFactory -" -Objekt, das Verbindungseigenschaften enthält.
    • Create an AssemblerServiceClient object by using its constructor and passing the ServiceClientFactory object.
  3. Verweisen Sie auf ein vorhandenes DDX-Dokument.
    • Erstellen Sie ein java.io.FileInputStream Objekt, das das DDX-Dokument darstellt, indem Sie den Konstruktor verwenden und einen Zeichenfolgenwert übergeben, der den Speicherort der DDX-Datei angibt.
    • Erstellen Sie ein com.adobe.idp.Document -Objekt, indem Sie seinen Konstruktor verwenden und das java.io.FileInputStream -Objekt übergeben.
  4. Referenzieren von PDF-Dokumenten zur Eingabe.
    • Erstellen Sie ein java.util.Map Objekt, das zum Speichern von PDF-Eingabedokumenten mithilfe eines HashMap Konstruktors verwendet wird.
    • Erstellen Sie für jedes PDF-Eingabedokument ein java.io.FileInputStream Objekt, indem Sie dessen Konstruktor verwenden und den Speicherort des PDF-Dokuments für die Eingabe übergeben.
    • Erstellen Sie für jedes PDF-Dokument ein com.adobe.idp.Document Objekt und übergeben Sie das java.io.FileInputStream Objekt, das das PDF-Dokument enthält.
    • Fügen Sie dem java.util.Map Objekt für jedes Eingabemodell einen Eintrag hinzu, indem Sie dessen put Methode aufrufen und die folgenden Argumente übergeben:
      • Ein Zeichenfolgenwert, der den Schlüsselnamen darstellt. Dieser Wert muss mit dem Wert des im DDX-Dokument angegebenen PDF-Quellelements übereinstimmen.
      • Ein com.adobe.idp.Document Objekt (oder java.util.List Objekt, das mehrere Dokumente angibt), das das Quell-PDF-Dokument enthält.
  5. Legen Sie Laufzeitoptionen fest.
    • Erstellen Sie ein AssemblerOptionSpec Objekt, das Laufzeitoptionen mithilfe des Konstruktors speichert.
    • Legen Sie Laufzeitoptionen fest, um Ihre Geschäftsanforderungen zu erfüllen, indem Sie eine Methode aufrufen, die zum AssemblerOptionSpec Objekt gehört. Um beispielsweise den Assembler-Dienst anzuweisen, bei einem Fehler mit der Verarbeitung eines Auftrags fortzufahren, rufen Sie die AssemblerOptionSpec Methode des setFailOnError Objekts auf und übergeben Sie sie false .
  6. Stellen Sie die PDF-Eingabedateien zusammen.
    Rufen Sie die AssemblerServiceClient Objektmethode invokeDDX auf und übergeben Sie die folgenden erforderlichen Werte:
    • Ein com.adobe.idp.Document Objekt, das das zu verwendende DDX-Dokument darstellt
    • Ein java.util.Map Objekt, das die zu assemblierenden PDF-Eingabedateien enthält
    • Ein com.adobe.livecycle.assembler.client.AssemblerOptionSpec Objekt, das die Laufzeitoptionen angibt, einschließlich der standardmäßigen Schriftart- und Auftragsprotokollebene
    Die invokeDDX Methode gibt ein com.adobe.livecycle.assembler.client.AssemblerResult Objekt zurück, das die Ergebnisse des Auftrags und alle aufgetretenen Ausnahmen enthält.
  7. Extrahieren Sie die Ergebnisse.
    So rufen Sie das neu erstellte PDF-Dokument ab:
    • Rufen Sie die AssemblerResult Methode des getDocuments Objekts auf. Dadurch wird ein java.util.Map Objekt zurückgegeben.
    • Durchlaufen Sie das java.util.Map Objekt, bis Sie das resultierende com.adobe.idp.Document Objekt gefunden haben. (Sie können das im DDX-Dokument angegebene PDF-Ergebniselement verwenden, um das Dokument abzurufen.)
    • Rufen Sie die com.adobe.idp.Document copyToFile Objektmethode auf, um das PDF-Dokument zu extrahieren.
    Wenn LOG_LEVEL die Erstellung eines Protokolls festgelegt wurde, können Sie das Protokoll mithilfe der AssemblerResult Objektmethode extrahieren getJobLog .
Siehe auch

Zusammenstellen von PDF-Dokumenten mit der Webdienst-API

Zusammenstellen von PDF-Dokumenten mit der Assembler-Dienst-API (Webdienst):
  1. Schließen Sie Projektdateien ein.
    Erstellen Sie ein Microsoft .NET-Projekt, das MTOM verwendet. Stellen Sie sicher, dass Sie die folgende WSDL-Definition verwenden: http://localhost:8080/soap/services/AssemblerService?WSDL&lc_version=9.0.1 .
    Ersetzen Sie localhost dies durch die IP-Adresse des Hosting-AEM Forms.
  2. Erstellen Sie einen PDF Assembler-Client.
    • Erstellen Sie ein AssemblerServiceClient Objekt mit dem Standardkonstruktor.
    • Erstellen Sie ein AssemblerServiceClient.Endpoint.Address Objekt mithilfe des System.ServiceModel.EndpointAddress Konstruktors. Übergeben Sie einen Zeichenfolgenwert, der die WSDL an den AEM Forms-Dienst angibt (z. B. http://localhost:8080/soap/services/AssemblerService?blob=mtom ). Sie müssen das lc_version Attribut nicht verwenden. Dieses Attribut wird verwendet, wenn Sie eine Dienstreferenz erstellen.
    • Erstellen Sie ein System.ServiceModel.BasicHttpBinding Objekt, indem Sie den Wert des AssemblerServiceClient.Endpoint.Binding Felds abrufen. Wandeln Sie den Rückgabewert in BasicHttpBinding um.
    • Legen Sie für das System.ServiceModel.BasicHttpBinding Objektfeld MessageEncoding den Wert WSMessageEncoding.Mtom fest. Dieser Wert stellt sicher, dass MTOM verwendet wird.
    • Aktivieren Sie die einfache HTTP-Authentifizierung, indem Sie die folgenden Aufgaben ausführen:
      • Weisen Sie dem Feld den AEM Forms-Benutzernamen zu AssemblerServiceClient.ClientCredentials.UserName.UserName .
      • Weisen Sie dem Feld den entsprechenden Kennwortwert zu AssemblerServiceClient.ClientCredentials.UserName.Password .
      • Weisen Sie dem Feld den Konstantenwert HttpClientCredentialType.Basic zu BasicHttpBindingSecurity.Transport.ClientCredentialType .
      • Weisen Sie dem Feld den Konstantenwert BasicHttpSecurityMode.TransportCredentialOnly zu BasicHttpBindingSecurity.Security.Mode .
  3. Verweisen Sie auf ein vorhandenes DDX-Dokument.
    • Erstellen Sie ein Objekt BLOB , indem Sie den Konstruktor verwenden. Das BLOB Objekt wird zum Speichern des DDX-Dokuments verwendet.
    • Erstellen Sie ein System.IO.FileStream Objekt, indem Sie den Konstruktor aufrufen und einen Zeichenfolgenwert übergeben, der den Dateispeicherort des DDX-Dokuments und den Dateimodus darstellt, in dem die Datei geöffnet werden soll.
    • Erstellen Sie ein Bytearray, das den Inhalt des System.IO.FileStream Objekts speichert. Sie können die Größe des Byte-Arrays bestimmen, indem Sie die System.IO.FileStream Objekteigenschaft Length abrufen.
    • Füllen Sie das Bytearray mit Stream-Daten, indem Sie die System.IO.FileStream Objektmethode aufrufen und das Bytearray, die Startposition und die zu lesende Stream-Länge übergeben Read .
    • Füllen Sie das BLOB Objekt, indem Sie seine MTOM Eigenschaft mit dem Inhalt des Byte-Arrays zuweisen.
  4. Referenzieren von PDF-Dokumenten zur Eingabe.
    • Erstellen Sie für jedes PDF-Eingabedokument ein BLOB Objekt mit dessen Konstruktor. Das BLOB Objekt wird zum Speichern des PDF-Eingabedokuments verwendet.
    • Erstellen Sie ein System.IO.FileStream Objekt, indem Sie den Konstruktor aufrufen und einen Zeichenfolgenwert übergeben, der den Dateispeicherort des PDF-Eingabedatums und den Dateimodus darstellt, in dem die Datei geöffnet werden soll.
    • Erstellen Sie ein Bytearray, das den Inhalt des System.IO.FileStream Objekts speichert. Sie können die Größe des Byte-Arrays bestimmen, indem Sie die System.IO.FileStream Objekteigenschaft Length abrufen.
    • Füllen Sie das Bytearray mit Stream-Daten, indem Sie die System.IO.FileStream Objektmethode Read aufrufen. Übergeben Sie das Bytearray, die Startposition und die zu lesende Stream-Länge.
    • Füllen Sie das BLOB Objekt, indem Sie seinem MTOM Feld den Inhalt des Byte-Arrays zuweisen.
    • Create a MyMapOf_xsd_string_To_xsd_anyType object. Dieses Collection-Objekt wird zum Speichern von PDF-Eingabedokumenten verwendet.
    • Erstellen Sie für jedes PDF-Dokument ein MyMapOf_xsd_string_To_xsd_anyType_Item Objekt. Wenn beispielsweise zwei PDF-Eingabedokumente verwendet werden, erstellen Sie zwei MyMapOf_xsd_string_To_xsd_anyType_Item Objekte.
    • Weisen Sie dem MyMapOf_xsd_string_To_xsd_anyType_Item Objektfeld einen Zeichenfolgenwert zu, der den Schlüsselnamen darstellt key . Dieser Wert muss mit dem Wert des im DDX-Dokument angegebenen PDF-Quellelements übereinstimmen. (Führen Sie diese Aufgabe für jedes PDF-Eingabedokument aus.)
    • Weisen Sie das BLOB Objekt, in dem das PDF-Dokument gespeichert wird, dem MyMapOf_xsd_string_To_xsd_anyType_Item Objektfeld value zu. (Führen Sie diese Aufgabe für jedes PDF-Eingabedokument aus.)
    • Hinzufügen das MyMapOf_xsd_string_To_xsd_anyType_Item Objekt mit dem MyMapOf_xsd_string_To_xsd_anyType Objekt. Invoke the MyMapOf_xsd_string_To_xsd_anyType object's Add method and pass the MyMapOf_xsd_string_To_xsd_anyType object. (Führen Sie diese Aufgabe für jedes PDF-Eingabedokument aus.)
  5. Legen Sie Laufzeitoptionen fest.
    • Erstellen Sie ein AssemblerOptionSpec Objekt, das Laufzeitoptionen mithilfe des Konstruktors speichert.
    • Legen Sie Laufzeitoptionen fest, um Ihre Geschäftsanforderungen zu erfüllen, indem Sie einem Datenmember, der zum AssemblerOptionSpec Objekt gehört, einen Wert zuweisen. Um beispielsweise den Assembler-Dienst anzuweisen, bei einem Fehler mit der Verarbeitung eines Auftrags fortzufahren, weisen Sie ihn false dem AssemblerOptionSpec Datenmember des failOnError Objekts zu.
  6. Stellen Sie die PDF-Eingabedateien zusammen.
    Rufen Sie die AssemblerServiceClient Objektmethode invoke auf und übergeben Sie die folgenden Werte:
    • Ein BLOB Objekt, das das DDX-Dokument darstellt.
    • Das mapItem Array, das die PDF-Eingabedateien enthält. Die Schlüssel müssen mit den Namen der PDF-Quelldateien übereinstimmen. Die Werte müssen die BLOB Objekte sein, die diesen Dateien entsprechen.
    • Ein AssemblerOptionSpec Objekt, das Laufzeitoptionen angibt.
    Die invoke Methode gibt ein AssemblerResult Objekt zurück, das die Ergebnisse des Auftrags sowie eventuell auftretende Ausnahmen enthält.
  7. Extrahieren Sie die Ergebnisse.
    So rufen Sie das neu erstellte PDF-Dokument ab:
    • Greifen Sie auf das AssemblerResult Objektfeld documents zu, das ein Map Objekt ist, das die PDF-Dokumente enthält.
    • Durchlaufen Sie das Map Objekt, bis Sie den Schlüssel gefunden haben, der dem Namen des resultierenden Dokuments entspricht. Dann wird das Array-Element value in eine BLOB umgewandelt.
    • Extrahieren Sie die Binärdaten, die das PDF-Dokument darstellen, indem Sie auf die BLOB Objekteigenschaft MTOM zugreifen. Dadurch wird ein Bytearray zurückgegeben, das Sie in eine PDF-Datei schreiben können.
    Wenn LOG_LEVEL das Erstellen eines Protokolls festgelegt wurde, können Sie das Protokoll extrahieren, indem Sie den Wert des AssemblerResult Objektdatensatzes abrufen jobLog .
Siehe auch