Generera PDF-dokument med fragment

Senaste uppdatering: 2023-05-20
  • Skapat för:
  • Intermediate
    Developer

I den här artikeln använder vi utdatatjänsten för att generera PDF-filer med hjälp av xdp-fragment. Den huvudsakliga xdp-filen och fragmenten finns i crx-databasen. Det är viktigt att efterlikna filsystemets mappstruktur i AEM. Om du till exempel använder ett fragment i fragmentmappen i xdp måste du skapa en mapp med namnet fragment under din AEM. Basmappen kommer att innehålla din bas-xdp-mall. Om du till exempel har följande struktur i filsystemet

  • c:\xdptemplates - This will contain your base xdp template
  • c:\xdptemplates\fragments - This folder will contain fragments and the main template will reference the fragment as shown below
    fragment-xdp.
  • Mappens xdpdokument kommer att innehålla din basmall och fragmenten i fragment mapp

Du kan skapa den struktur som behövs med formulär och dokumentgränssnitt

Nedan följer mappstrukturen för exempelkoden xdp som använder 2 fragment
formulär&dokument

  • Utdatatjänst - Vanligtvis används den här tjänsten för att sammanfoga XML-data med xdp-mall eller pdf för att generera sammanlagd pdf. Mer information finns i javadoc för Output-tjänsten. I det här exemplet använder vi fragment som finns i crx-databasen.

Följande kod användes för att inkludera fragment i PDF-filen

System.out.println("I am in using fragments POST.jsp");
// contentRootURI is the base folder. All fragments are relative to this folder
String contentRootURI = request.getParameter("contentRootURI");
String xdpName = request.getParameter("xdpName");
javax.servlet.http.Part xmlDataPart = request.getPart("xmlDataFile");
System.out.println("Got xml file");
String filePath = request.getParameter("saveLocation");
java.io.InputStream xmlIS = xmlDataPart.getInputStream();
com.adobe.aemfd.docmanager.Document xmlDocument = new com.adobe.aemfd.docmanager.Document(xmlIS);
com.adobe.fd.output.api.OutputService outputService = sling.getService(com.adobe.fd.output.api.OutputService.class);

if (outputService == null) {
  System.out.println("The output service is  null.....");
} else {
  System.out.println("The output service is  not null.....");

}
com.adobe.fd.output.api.PDFOutputOptions pdfOptions = new com.adobe.fd.output.api.PDFOutputOptions();
pdfOptions.setAcrobatVersion(com.adobe.fd.output.api.AcrobatVersion.Acrobat_11);

pdfOptions.setContentRoot(contentRootURI);

com.adobe.aemfd.docmanager.Document generatedDocument = outputService.generatePDFOutput(xdpName, xmlDocument, pdfOptions);
generatedDocument.copyToFile(new java.io.File(filePath));
out.println("Document genreated and saved to " + filePath);

Testa exempelpaketet på datorn

När du har installerat paketet måste du tillåtslista följande URL:er i Adobe Granite CSRF-filtret.

  1. Följ stegen nedan för att tillåtslista de sökvägar som nämns ovan.
  2. Logga in på configMgr
  3. Sök efter Adobe Granite CSRF-filter
  4. Lägg till följande sökväg i de uteslutna avsnitten och spara
  5. /content/AemFormsSamples/usingFrments

Du kan testa exempelkoden på flera olika sätt. Det snabbaste och enklaste är att använda Postman-appen. Med Postman kan du göra POSTER till servern. Installera Postman på datorn.
Starta programmet och ange följande URL för att testa API:t för exportdata

Se till att du har valt "POST" i listrutan http://localhost:4502/content/AemFormsSamples/usingfragments.html Kontrollera att du har angett "Auktorisering" som "Grundläggande autentisering". Ange AEM användarnamn och lösenord Navigera till fliken "Brödtext" och ange parametrarna för begäran enligt bilden nedan
export
Klicka sedan på knappen Skicka

Du kan importera den här postmansamlingen för att testa API:t

På denna sida