Creazione dinamica di documenti DDX dynamically-creating-ddx-documents
Gli esempi e gli esempi contenuti in questo documento sono solo per AEM Forms in ambiente JEE.
È possibile creare in modo dinamico un documento DDX che può essere utilizzato per eseguire un'operazione Assembler. La creazione dinamica di un documento DDX consente di utilizzare nel documento DDX i valori ottenuti durante l'esecuzione. Per creare in modo dinamico un documento DDX, utilizzare le classi che appartengono al linguaggio di programmazione in uso. Se ad esempio si sviluppa l'applicazione client utilizzando Java, utilizzare le classi che appartengono al pacchetto org.w3c.dom.*
. Analogamente, se si utilizza Microsoft .NET, utilizzare le classi che appartengono allo spazio dei nomi System.Xml
.
Prima di passare il documento DDX al servizio Assembler, convertire l'XML da un'istanza org.w3c.dom.Document
a un'istanza com.adobe.idp.Document
. Se si utilizzano i servizi Web, convertire l'XML dal tipo di dati utilizzato per creare l'XML (ad esempio, XmlDocument
) in un'istanza BLOB
.
Per questa discussione, si supponga che il seguente documento DDX venga creato in modo dinamico.
<?xml version="1.0" encoding="UTF-8"?>
<DDX xmlns="https://ns.adobe.com/DDX/1.0/">
<PDFsFromBookmarks prefix="stmt">
<PDF source="AssemblerResultPDF.pdf"/>
</PDFsFromBookmarks>
</DDX>
Questo documento DDX disassembla un documento PDF. È consigliabile avere familiarità con lo smontaggio dei documenti PDF.
Riepilogo dei passaggi summary-of-steps
Per disassemblare un documento PDF utilizzando un documento DDX creato in modo dinamico, effettuare le seguenti operazioni:
- Includi file di progetto.
- Creare un client PDF Assembler.
- Creare il documento DDX.
- Converte il documento DDX.
- Impostare le opzioni di runtime.
- Disassemblare il documento PDF.
- Salvare i documenti PDF disassemblati.
Includi file di progetto
Includi i file necessari nel progetto di sviluppo. Se stai creando un’applicazione client utilizzando Java, includi i file JAR necessari. Se utilizzi i servizi web, accertati di includere i file proxy.
I seguenti file JAR devono essere aggiunti al percorso della classe del progetto:
- adobe-livecycle-client.jar
- adobe-usermanager-client.jar
- adobe-assembler-client.jar
- adobe-utilities.jar (richiesto se AEM Forms è implementato su JBoss)
- jbossall-client.jar (obbligatorio se AEM Forms è distribuito su JBoss)
Creare un client Assembler PDF
Prima di eseguire un'operazione Assembler a livello di programmazione, creare un client del servizio Assembler.
Crea il documento DDX
Creare un documento DDX utilizzando il linguaggio di programmazione in uso. Per creare un documento DDX che disassembla un documento PDF, verificare che contenga l'elemento PDFsFromBookmarks
. Se si utilizza l'API Java, convertire il tipo di dati utilizzato per creare il documento DDX in un'istanza com.adobe.idp.Document
. Se si utilizzano servizi Web, convertire il tipo di dati in un'istanza BLOB
.
Convertire il documento DDX
Un documento DDX creato utilizzando le classi org.w3c.dom
deve essere convertito in un oggetto com.adobe.idp.Document
. Per eseguire questa attività quando si utilizza l’API Java, utilizza le classi di trasformazione Java XML. Se si utilizzano i servizi Web, convertire il documento DDX in un oggetto BLOB
.
Riferimento a un documento PDF da disassemblare
Per disassemblare un documento PDF, fare riferimento a un file PDF che rappresenta il documento PDF da disassemblare. Quando viene passato al servizio Assembler, viene restituito un documento PDF separato per ogni segnalibro di livello 1 del documento.
Impostare le opzioni di runtime
È possibile impostare le opzioni di runtime che controllano il comportamento del servizio Assembler durante l'esecuzione di un processo. È ad esempio possibile impostare un'opzione che indichi al servizio Assembler di continuare l'elaborazione di un processo in caso di errore. Per impostare le opzioni di runtime, utilizzare un oggetto AssemblerOptionSpec
.
Disassemblare il documento PDF
Disassemblare il documento PDF richiamando l'operazione invokeDDX
. Passa il documento DDX creato in modo dinamico. Il servizio Assembler restituisce documenti PDF disassemblati all'interno di un oggetto insieme.
Salvare i documenti PDF disassemblati
Tutti i documenti PDF disassemblati vengono restituiti all'interno di un insieme. Scorrere l'oggetto insieme e salvare ogni documento PDF come file PDF.
Consulta anche
Creare in modo dinamico un documento DDX utilizzando l’API Java
Creare in modo dinamico un documento DDX utilizzando l’API del servizio web
Inclusione dei file della libreria Java di AEM Forms
Impostazione delle proprietà di connessione
Disassemblaggio di documenti PDF a livello di programmazione
Creare in modo dinamico un documento DDX utilizzando l’API Java dynamically-create-a-ddx-document-using-the-java-api
Creare in modo dinamico un documento DDX e disassemblare un documento PDF utilizzando l'API del servizio Assembler (Java):
-
Includi file di progetto.
Includi i file JAR client, come adobe-assembler-client.jar, nel percorso di classe del progetto Java.
-
Creare un client PDF Assembler.
- Creare un oggetto
ServiceClientFactory
contenente le proprietà di connessione. - Creare un oggetto
AssemblerServiceClient
utilizzando il relativo costruttore e passando l'oggettoServiceClientFactory
.
- Creare un oggetto
-
Creare il documento DDX.
-
Creare un oggetto Java
DocumentBuilderFactory
chiamando il metodonewInstance
della classeDocumentBuilderFactory
. -
Creare un oggetto Java
DocumentBuilder
chiamando il metodonewDocumentBuilder
dell'oggettoDocumentBuilderFactory
. -
Chiamare il metodo
newDocument
dell'oggettoDocumentBuilder
per creare un'istanza di un oggettoorg.w3c.dom.Document
. -
Creare l'elemento radice del documento DDX richiamando il metodo
createElement
dell'oggettoorg.w3c.dom.Document
. Questo metodo crea un oggettoElement
che rappresenta l'elemento radice. Passa un valore stringa che rappresenta il nome dell'elemento al metodocreateElement
. Eseguire il cast del valore restituito inElement
. Impostare quindi un valore per l'elemento figlio chiamando il relativo metodosetAttribute
. Infine, accodare l'elemento all'elemento header chiamando il metodoappendChild
dell'elemento header e passare l'oggetto elemento figlio come argomento. Le seguenti righe di codice mostrano questa logica dell’applicazione:Element root = (Element)document.createElement("DDX"); root.setAttribute("xmlns","https://ns.adobe.com/DDX/1.0/"); document.appendChild(root);
-
Creare l'elemento
PDFsFromBookmarks
chiamando il metodocreateElement
dell'oggettoDocument
. Passa un valore stringa che rappresenta il nome dell'elemento al metodocreateElement
. Eseguire il cast del valore restituito inElement
. Impostare un valore per l'elementoPDFsFromBookmarks
chiamando il relativo metodosetAttribute
. Aggiungere l'elementoPDFsFromBookmarks
all'elementoDDX
chiamando il metodoappendChild
dell'elemento DDX. Passa l'oggetto elementoPDFsFromBookmarks
come argomento. Le seguenti righe di codice mostrano questa logica dell’applicazione:Element PDFsFromBookmarks = (Element)document.createElement("PDFsFromBookmarks"); PDFsFromBookmarks.setAttribute("prefix","stmt"); root.appendChild(PDFsFromBookmarks);
-
Creare un elemento
PDF
chiamando il metodocreateElement
dell'oggettoDocument
. Passa un valore stringa che rappresenta il nome dell’elemento. Eseguire il cast del valore restituito inElement
. Impostare un valore per l'elementoPDF
chiamando il relativo metodosetAttribute
. Aggiungere l'elementoPDF
all'elementoPDFsFromBookmarks
chiamando il metodoappendChild
dell'elementoPDFsFromBookmarks
. Passa l'oggetto elementoPDF
come argomento. Le seguenti righe di codice mostrano questa logica dell’applicazione:Element PDF = (Element)document.createElement("PDF"); PDF.setAttribute("source","AssemblerResultPDF.pdf"); PDFsFromBookmarks.appendChild(PDF);
-
-
Converte il documento DDX.
- Creare un oggetto
javax.xml.transform.Transformer
richiamando il metodonewInstance
statico dell'oggettojavax.xml.transform.Transformer
. - Creare un oggetto
Transformer
richiamando il metodonewTransformer
dell'oggettoTransformerFactory
. - Creare un oggetto
ByteArrayOutputStream
utilizzando il relativo costruttore. - Creare un oggetto
javax.xml.transform.dom.DOMSource
utilizzando il relativo costruttore. Passa l'oggettoorg.w3c.dom.Document
che rappresenta il documento DDX. - Creare un oggetto
javax.xml.transform.dom.DOMSource
utilizzando il relativo costruttore e passando l'oggettoByteArrayOutputStream
. - Compilare l'oggetto Java
ByteArrayOutputStream
richiamando il metodotransform
dell'oggettojavax.xml.transform.Transformer
. Passa gli oggettijavax.xml.transform.dom.DOMSource
ejavax.xml.transform.stream.StreamResult
. - Creare una matrice di byte e allocare le dimensioni dell'oggetto
ByteArrayOutputStream
alla matrice di byte. - Compilare la matrice di byte richiamando il metodo
toByteArray
dell'oggettoByteArrayOutputStream
. - Creare un oggetto
com.adobe.idp.Document
utilizzando il relativo costruttore e passando la matrice di byte.
- Creare un oggetto
-
Fare riferimento a un documento PDF da disassemblare.
-
Creare un oggetto
java.util.Map
utilizzato per memorizzare i documenti di input PDF utilizzando un costruttoreHashMap
. -
Creare un oggetto
java.io.FileInputStream
utilizzando il relativo costruttore e passando la posizione del documento PDF da disassemblare. -
Creare un oggetto
com.adobe.idp.Document
. Passa l'oggettojava.io.FileInputStream
che contiene il documento PDF da disassemblare. -
Aggiungere una voce all'oggetto
java.util.Map
richiamando il relativo metodoput
e passando i seguenti argomenti:- Valore stringa che rappresenta il nome della chiave. Questo valore deve corrispondere al valore dell'elemento di origine PDF specificato nel documento DDX. Nel documento DDX creato in modo dinamico, il valore è
AssemblerResultPDF.pdf
. - Oggetto
com.adobe.idp.Document
contenente il documento PDF da disassemblare.
- Valore stringa che rappresenta il nome della chiave. Questo valore deve corrispondere al valore dell'elemento di origine PDF specificato nel documento DDX. Nel documento DDX creato in modo dinamico, il valore è
-
-
Impostare le opzioni di runtime.
- Creare un oggetto
AssemblerOptionSpec
che memorizza le opzioni di runtime utilizzando il relativo costruttore. - Impostare le opzioni di runtime per soddisfare i requisiti aziendali richiamando un metodo che appartiene all'oggetto
AssemblerOptionSpec
. Ad esempio, per indicare al servizio Assembler di continuare a elaborare un processo quando si verifica un errore, richiamare il metodosetFailOnError
dell'oggettoAssemblerOptionSpec
e passarefalse
.
- Creare un oggetto
-
Disassemblare il documento PDF.
Richiama il metodo
invokeDDX
dell'oggettoAssemblerServiceClient
e passa i seguenti valori:- Oggetto
com.adobe.idp.Document
che rappresenta il documento DDX creato in modo dinamico - Oggetto
java.util.Map
contenente il documento PDF da disassemblare - Oggetto
com.adobe.livecycle.assembler.client.AssemblerOptionSpec
che specifica le opzioni di runtime, inclusi il tipo di carattere predefinito e il livello del log del processo
Il metodo
invokeDDX
restituisce un oggettocom.adobe.livecycle.assembler.client.AssemblerResult
contenente i documenti PDF disassemblati ed eventuali eccezioni. - Oggetto
-
Salvare i documenti PDF disassemblati.
Per ottenere i documenti PDF disassemblati, effettuare le seguenti operazioni:
- Richiama il metodo
getDocuments
dell'oggettoAssemblerResult
. Questo metodo restituisce un oggettojava.util.Map
. - Scorrere l'oggetto
java.util.Map
fino a trovare l'oggettocom.adobe.idp.Document
risultante. - Richiama il metodo
copyToFile
dell'oggettocom.adobe.idp.Document
per estrarre il documento PDF.
- Richiama il metodo
Consulta anche
Quick Start (modalità SOAP): creazione dinamica di un documento DDX utilizzando l’API Java
Creare in modo dinamico un documento DDX utilizzando l’API del servizio web dynamically-create-a-ddx-document-using-the-web-service-api
Creare in modo dinamico un documento DDX e disassemblare un documento PDF utilizzando l'API del servizio Assembler (servizio Web):
-
Includi file di progetto.
Creare un progetto Microsoft .NET che utilizza MTOM. Assicurarsi di utilizzare la seguente definizione WSDL durante l'impostazione di un riferimento al servizio:
http://localhost:8080/soap/services/AssemblerService?WSDL&lc_version=9.0.1
.note note NOTE Sostituisci localhost
con l'indirizzo IP del server che ospita AEM Forms. -
Creare un client PDF Assembler.
-
Creare un oggetto
AssemblerServiceClient
utilizzando il relativo costruttore predefinito. -
Creare un oggetto
AssemblerServiceClient.Endpoint.Address
utilizzando il costruttoreSystem.ServiceModel.EndpointAddress
. Passa un valore stringa che specifica il WSDL al servizio AEM Forms (ad esempio,http://localhost:8080/soap/services/AssemblerService?blob=mtom
). Non è necessario utilizzare l'attributolc_version
. Questo attributo viene utilizzato quando si crea un riferimento a un servizio. -
Creare un oggetto
System.ServiceModel.BasicHttpBinding
ottenendo il valore del campoAssemblerServiceClient.Endpoint.Binding
. Eseguire il cast del valore restituito inBasicHttpBinding
. -
Impostare il campo
MessageEncoding
dell'oggettoSystem.ServiceModel.BasicHttpBinding
suWSMessageEncoding.Mtom
. Questo valore assicura che venga utilizzato MTOM. -
Abilita l’autenticazione HTTP di base eseguendo le seguenti attività:
- Assegnare il nome utente dei moduli AEM al campo
AssemblerServiceClient.ClientCredentials.UserName.UserName
. - Assegnare il valore della password corrispondente al campo
AssemblerServiceClient.ClientCredentials.UserName.Password
. - Assegnare il valore costante
HttpClientCredentialType.Basic
al campoBasicHttpBindingSecurity.Transport.ClientCredentialType
. - Assegnare il valore costante
BasicHttpSecurityMode.TransportCredentialOnly
al campoBasicHttpBindingSecurity.Security.Mode
.
- Assegnare il nome utente dei moduli AEM al campo
-
-
Creare il documento DDX.
-
Creare un oggetto
System.Xml.XmlElement
utilizzando il relativo costruttore. -
Creare l'elemento radice del documento DDX richiamando il metodo
CreateElement
dell'oggettoXmlElement
. Questo metodo crea un oggettoElement
che rappresenta l'elemento radice. Passa un valore stringa che rappresenta il nome dell'elemento al metodoCreateElement
. Impostare un valore per l'elemento DDX chiamando il relativo metodoSetAttribute
. Aggiungere infine l'elemento al documento DDX chiamando il metodoAppendChild
dell'oggettoXmlElement
. Passa l'oggetto DDX come argomento. Le seguenti righe di codice mostrano questa logica dell’applicazione:System.Xml.XmlElement root = ddx.CreateElement("DDX"); root.SetAttribute("xmlns", "https://ns.adobe.com/DDX/1.0/"); ddx.AppendChild(root);
-
Creare l'elemento
PDFsFromBookmarks
del documento DDX chiamando il metodoCreateElement
dell'oggettoXmlElement
. Passa un valore stringa che rappresenta il nome dell'elemento al metodoCreateElement
. Quindi, impostare un valore per l'elemento chiamando il relativo metodoSetAttribute
. Aggiungere l'elementoPDFsFromBookmarks
all'elemento radice chiamando il metodoAppendChild
dell'elementoDDX
. Passa l'oggetto elementoPDFsFromBookmarks
come argomento. Le seguenti righe di codice mostrano questa logica dell’applicazione:XmlElement PDFsFromBookmarks = ddx.CreateElement("PDFsFromBookmarks"); PDFsFromBookmarks.SetAttribute("prefix", "stmt"); root.AppendChild(PDFsFromBookmarks);
-
Creare l'elemento
PDF
del documento DDX chiamando il metodoCreateElement
dell'oggettoXmlElement
. Passa un valore stringa che rappresenta il nome dell'elemento al metodoCreateElement
. Impostare quindi un valore per l'elemento figlio chiamando il relativo metodoSetAttribute
. Aggiungere l'elementoPDF
all'elementoPDFsFromBookmarks
chiamando il metodoAppendChild
dell'elementoPDFsFromBookmarks
. Passa l'oggetto elementoPDF
come argomento. Le seguenti righe di codice mostrano questa logica dell’applicazione:XmlElement PDF = ddx.CreateElement("PDF"); PDF.SetAttribute("source", "AssemblerResultPDF.pdf"); PDFsFromBookmarks.AppendChild(PDF);
-
-
Converte il documento DDX.
-
Creare un oggetto
System.IO.MemoryStream
utilizzando il relativo costruttore. -
Compilare l'oggetto
MemoryStream
con il documento DDX utilizzando l'oggettoXmlElement
che rappresenta il documento DDX. Richiama il metodoSave
dell'oggettoXmlElement
e passa l'oggettoMemoryStream
. -
Creare una matrice di byte e popolarla con i dati nell'oggetto
MemoryStream
. Il codice seguente mostra questa logica dell’applicazione:int bufLen = Convert.ToInt32(stream.Length); byte[] byteArray = new byte[bufLen]; stream.Position = 0; int count = stream.Read(byteArray, 0, bufLen);
-
Creare un oggetto
BLOB
. Assegnare la matrice di byte al campoMTOM
dell'oggettoBLOB
.
-
-
Fare riferimento a un documento PDF da disassemblare.
- Creare un oggetto
BLOB
utilizzando il relativo costruttore. L'oggettoBLOB
viene utilizzato per memorizzare il documento PDF di input. Questo oggettoBLOB
è passato ainvokeOneDocument
come argomento. - Creare un oggetto
System.IO.FileStream
richiamando il relativo costruttore. Passa un valore stringa che rappresenta la posizione del file del documento PDF di input e la modalità di apertura del file. - Creare una matrice di byte che memorizza il contenuto dell'oggetto
System.IO.FileStream
. È possibile determinare le dimensioni della matrice di byte ottenendo la proprietàLength
dell'oggettoSystem.IO.FileStream
. - Compilare la matrice di byte con i dati di flusso richiamando il metodo
Read
dell'oggettoSystem.IO.FileStream
e passando la matrice di byte, la posizione iniziale e la lunghezza del flusso da leggere. - Compilare l'oggetto
BLOB
assegnando alla relativa proprietàMTOM
il contenuto della matrice di byte.
- Creare un oggetto
-
Impostare le opzioni di runtime.
- Creare un oggetto
AssemblerOptionSpec
che memorizza le opzioni di runtime utilizzando il relativo costruttore. - Impostare le opzioni di runtime per soddisfare i requisiti aziendali assegnando un valore a un membro dati che appartiene all'oggetto
AssemblerOptionSpec
. Ad esempio, per indicare al servizio Assembler di continuare a elaborare un processo quando si verifica un errore, assegnarefalse
al membro datifailOnError
dell'oggettoAssemblerOptionSpec
.
- Creare un oggetto
-
Disassemblare il documento PDF.
Richiama il metodo
invokeDDX
dell'oggettoAssemblerServiceClient
e passa i seguenti valori:- Oggetto
BLOB
che rappresenta il documento DDX creato in modo dinamico - Array
mapItem
contenente il documento PDF di input - Oggetto
AssemblerOptionSpec
che specifica le opzioni di runtime
Il metodo
invokeDDX
restituisce un oggettoAssemblerResult
contenente i risultati del processo ed eventuali eccezioni. - Oggetto
-
Salvare i documenti PDF disassemblati.
Per ottenere i documenti di PDF appena creati, effettuare le seguenti operazioni:
- Accedere al campo
documents
dell'oggettoAssemblerResult
, che è un oggettoMap
contenente i documenti PDF disassemblati. - Scorrere l'oggetto
Map
per ottenere ogni documento risultante. Quindi, eseguire il cast divalue
del membro dell'array in unBLOB
. - Estrarre i dati binari che rappresentano il documento PDF accedendo alla proprietà
MTOM
dell'oggettoBLOB
. Restituisce una matrice di byte che è possibile scrivere in un file PDF.
- Accedere al campo
Consulta anche
Richiamare AEM Forms tramite MTOM
Richiamare AEM Forms con SwaRef