iText summit 2014: Talk: iText for Archiving and Accessibility

51
Feature rich open source developer’s library for PDF generation and manipulation in web and other applications iText for Archiving and Accessibility PDF/A-3a and PDF/UA in 5 steps Raf Hens – iText Software
  • date post

    21-Oct-2014
  • Category

    Technology

  • view

    186
  • download

    0

description

How to create PDF/A and PDF/UA documents using iText. How to fill out forms and merge documents, preserving their accessibility. Before 2013, there was a lot of programming work involved if you wanted to create an archival or an accessible document using iText. After the publication of the PDF/A-3 and the PDF/UA standard in 2012, we decided to invest in the development of methods that would allow developers to create archival and accessible documents in a more programmer-friendly way. Creating Tagged PDF was a real challenge. We will first look at the conformance levels that allow you to make sure you are not creating a PDF that is in violation with the standard of your choice (for instance: an exception is thrown if you create a PDF without embedding the fonts). Secondly, we will present a use case by showing how to create an invoice that conforms with the ZUGFeRD standard (which is based on PDF/A-3). Afterwards we will focus on PDF/UA, explaining a couple of real-world problems we have solved for a customer who needed to fill out and merge accessible forms. Finally, we will introduce you to XFA Worker, demonstrating how the structure of a form created using the XML Forms Architecture can be translated into a Tagged PDF.

Transcript of iText summit 2014: Talk: iText for Archiving and Accessibility

Page 1: iText summit 2014: Talk: iText for Archiving and Accessibility

Feature rich open source developer’s library for

PDF generation and manipulation in web and other applications

iText for Archiving and Accessibility

PDF/A-3a and PDF/UA in 5 steps

Raf Hens – iText Software

Page 2: iText summit 2014: Talk: iText for Archiving and Accessibility

Step 1. Create PDF

PDF

Page 3: iText summit 2014: Talk: iText for Archiving and Accessibility

Step 2. Create Tagged PDF

PDF Tagged content

Tagged PDF

Page 4: iText summit 2014: Talk: iText for Archiving and Accessibility

Step 3. Create PDF/UA

Tagged PDF Metadata Font

embedding Alt text PDF/UA

Page 5: iText summit 2014: Talk: iText for Archiving and Accessibility

Step 4. Create PDF/A-3b

PDF Metadata Font

embedding Output Intents

PDF/A-3b

Page 6: iText summit 2014: Talk: iText for Archiving and Accessibility

Step 5. Create PDF/A-3a

PDF/A-3b

PDF/UA PDF/A-

3a

Page 7: iText summit 2014: Talk: iText for Archiving and Accessibility

Step 1. Create PDF

PDF

Page 8: iText summit 2014: Talk: iText for Archiving and Accessibility

Step1. Create PDF: Initialize document

Document document = new Document();

PdfWriter writer =

PdfWriter.getInstance(document,

new FileOutputStream("SimplePdf.pdf"));

writer.setPdfVersion(PdfWriter.VERSION_1_7);

document.open();

Page 9: iText summit 2014: Talk: iText for Archiving and Accessibility

Step1. Create PDF: Add elements

Paragraph p = new Paragraph();

Chunk c = new Chunk("The quick brown ");

p.add(c);

Image i = Image.getInstance("fox.bmp");

c = new Chunk(i, 0, -24);

p.add(c);

c = new Chunk(" jumps over the lazy ");

p.add(c);

i = Image.getInstance("dog.bmp");

c = new Chunk(i, 0, -24);

p.add(c);

document.add(p);

Page 10: iText summit 2014: Talk: iText for Archiving and Accessibility

Step 1. Create PDF: Close document

document.close();

Page 11: iText summit 2014: Talk: iText for Archiving and Accessibility

Step 1. Create PDF: Result

Page 12: iText summit 2014: Talk: iText for Archiving and Accessibility

Step 2. Create Tagged PDF

PDF Tagged content

Tagged PDF

Page 13: iText summit 2014: Talk: iText for Archiving and Accessibility

Step 2. Create Tagged PDF

PdfWriter writer = PdfWriter.getInstance(…);

writer.setPdfVersion(PdfWriter.VERSION_1_7);

writer.setTagged();

document.open();

PDF Tagged content

Tagged PDF

Page 14: iText summit 2014: Talk: iText for Archiving and Accessibility

Step 2. Create Tagged PDF

PDF Tagged content

Tagged PDF

Page 15: iText summit 2014: Talk: iText for Archiving and Accessibility

Step 3. Create PDF/UA

Tagged PDF Metadata Font

embedding Alt text PDF/UA

Page 16: iText summit 2014: Talk: iText for Archiving and Accessibility

Step 3. Create PDF/UA

Goals Provide document title, author, keywords

Provide document language for better accessibility

Identify “type” of PDF (PDF/UA) to help PDF reader

Tagged PDF Metadata Font

embedding Alt text PDF/UA

Page 17: iText summit 2014: Talk: iText for Archiving and Accessibility

Step 3. Create PDF/UA

writer.setTagged();

writer.setViewerPreferences (PdfWriter.DisplayDocTitle);

document.addLanguage("en-US");

document.addTitle("English pangram");

writer.createXmpMetadata();

document.open();

Tagged PDF Metadata Font

embedding Alt text PDF/UA

Page 18: iText summit 2014: Talk: iText for Archiving and Accessibility

Step 3. Create PDF/UA

Tagged PDF Metadata Font

embedding Alt text PDF/UA

Page 19: iText summit 2014: Talk: iText for Archiving and Accessibility

Step 3. Create PDF/UA

Goals Make document independent of font set of current OS

Make document independent of font selection strategy of PDF reader

Make document fully portable

Tagged PDF Metadata Font

embedding Alt text PDF/UA

Page 20: iText summit 2014: Talk: iText for Archiving and Accessibility

Step 3. Create PDF/UA

document.open();

Paragraph p = new Paragraph();

p.setFont(FontFactory.getFont("FreeSans.ttf", BaseFont.WINANSI, BaseFont.EMBEDDED, 20));

Chunk c = new Chunk("The quick brown ");

p.add(c);

Tagged PDF Metadata Font

embedding Alt text PDF/UA

Page 21: iText summit 2014: Talk: iText for Archiving and Accessibility

Step 3. Create PDF/UA

Tagged PDF Metadata Font

embedding Alt text PDF/UA

Before After

Page 22: iText summit 2014: Talk: iText for Archiving and Accessibility

Step 3. Create PDF/UA

Tagged PDF Metadata Font

embedding Alt text PDF/UA

Page 23: iText summit 2014: Talk: iText for Archiving and Accessibility

Step 3. Create PDF/UA

Goals Provide alternate text for non-textual content

Help conforming readers to read out loud the non-textual content

Tagged PDF Metadata Font

embedding Alt text PDF/UA

Page 24: iText summit 2014: Talk: iText for Archiving and Accessibility

Step 3. Create PDF/UA

Image i = Image.getInstance("fox.bmp");

c = new Chunk(i, 0, -24);

c.setAccessibleAttribute(PdfName.ALT, new PdfString("Fox"));

p.add(c);

Tagged PDF Metadata Font

embedding Alt text PDF/UA

Page 25: iText summit 2014: Talk: iText for Archiving and Accessibility

Step 3. Create PDF/UA

Tagged PDF Metadata Font

embedding Alt text PDF/UA

Page 26: iText summit 2014: Talk: iText for Archiving and Accessibility

Step 3. Create PDF/UA

Tagged PDF Metadata Font

embedding Alt text PDF/UA

Page 27: iText summit 2014: Talk: iText for Archiving and Accessibility

Step 4. Create PDF/A-3b

PDF Metadata Font

embedding Output intents

PDF/A-3b

Page 28: iText summit 2014: Talk: iText for Archiving and Accessibility

Step 4. Create PDF/A-3b

Document document = new Document();

PdfAWriter writer = PdfAWriter.getInstance(document,

new FileOutputStream("PdfA3b.pdf"),

PdfAConformanceLevel.PDF_A_3B);

writer.setPdfVersion(PdfWriter.VERSION_1_7);

PDF Metadata Font

embedding Output intents

PDF/A-3b

Page 29: iText summit 2014: Talk: iText for Archiving and Accessibility

Step 4. Create PDF/A-3b

Goals Identify “type” of PDF (PDF/A) to help PDF reader

Similar iText code as for PDF/UA

PDF Metadata Font

embedding Output intents

PDF/A-3b

Page 30: iText summit 2014: Talk: iText for Archiving and Accessibility

Step 4. Create PDF/A-3b

PDF Metadata Font

embedding Output intents

PDF/A-3b

Page 31: iText summit 2014: Talk: iText for Archiving and Accessibility

Step 4. Create PDF/A-3b

Goals Make document fully self contained and archivable

Same iText code as for PDF/UA

PDF Metadata Font

embedding Output intents

PDF/A-3b

Page 32: iText summit 2014: Talk: iText for Archiving and Accessibility

Step 4. Create PDF/A-3b

Goals Match color characteristics of PDF document with color characteristics of device on which it is intended to be rendered

Make colors device independent

PDF Metadata Font

embedding Output intents

PDF/A-3b

Page 33: iText summit 2014: Talk: iText for Archiving and Accessibility

Step 4. Create PDF/A-3b

document.open();

ICC_Profile icc = ICC_Profile.getInstance(new

FileInputStream("sRGB Color Space Profile.icm"));

writer.setOutputIntents("Custom", "",

"http://www.color.org", "sRGB IEC61966-2.1", icc);

Paragraph p = new Paragraph();

PDF Metadata Font

embedding Output intents

PDF/A-3b

Page 34: iText summit 2014: Talk: iText for Archiving and Accessibility

Step 4. Create PDF/A-3b

PDF Metadata Font

embedding Output intents

PDF/A-3b

Page 35: iText summit 2014: Talk: iText for Archiving and Accessibility

Step 4. Create PDF/A-3b

PDF Metadata Font

embedding Output intents

PDF/A-3b

Page 36: iText summit 2014: Talk: iText for Archiving and Accessibility

Step 5. Create PDF/A-3a

PDF/A-3b

PDF/UA PDF/A-

3a

Page 37: iText summit 2014: Talk: iText for Archiving and Accessibility

Step 5. Create PDF/A-3a

Document document = new Document();

PdfAWriter writer = PdfAWriter.getInstance(document,

new FileOutputStream("PdfA3a.pdf"),

PdfAConformanceLevel.PDF_A_3A);

writer.setPdfVersion(PdfWriter.VERSION_1_7);

PDF/A-3b

PDF/UA PDF/A-

3a

Page 38: iText summit 2014: Talk: iText for Archiving and Accessibility

Step 5. Create PDF/A-3a

PDF/A-3b

PDF/UA PDF/A-

3a

Page 39: iText summit 2014: Talk: iText for Archiving and Accessibility

Step 5. Create PDF/A-3a

PDF/A-3b

PDF/UA PDF/A-

3a

Can I make sure that my document is compliant? iText will: • Perform a lot of checks, from technical POV, based on the

requested conformance level • Throw an exception if a requirement is not met Not everything can be checked automatically!

Page 40: iText summit 2014: Talk: iText for Archiving and Accessibility

Step 5. Create PDF/A-3a

PDF/A-3b

PDF/UA PDF/A-

3a

Page 41: iText summit 2014: Talk: iText for Archiving and Accessibility

Use cases

1. Create ZUGFeRD invoices 2. Flatten XFA forms with accessibility support

Page 42: iText summit 2014: Talk: iText for Archiving and Accessibility

Create ZUGFeRD invoices

PDF/A-3b XMP

metadata Invoice

attachment ZUGFeRD

PDF

Page 43: iText summit 2014: Talk: iText for Archiving and Accessibility

Create ZUGFeRD invoices

Document document = new Document();

PdfAWriter writer = PdfAWriter.getInstance(document,

new FileOutputStream(“Zugferd.pdf"),

PdfAConformanceLevel.ZUGFeRD);

writer.setPdfVersion(PdfWriter.VERSION_1_7);

PDF/A-3b XMP

metadata Invoice

attachment ZUGFeRD

PDF

Page 44: iText summit 2014: Talk: iText for Archiving and Accessibility

Create ZUGFeRD invoices

writer.createXmpMetadata();

writer.getXmpWriter().setProperty(

PdfAXmpWriter.zugferdSchemaNS,

PdfAXmpWriter.zugferdDocumentFileName,

"invoice.xml");

document.open();

PDF/A-3b XMP

metadata Invoice

attachment ZUGFeRD

PDF

Page 45: iText summit 2014: Talk: iText for Archiving and Accessibility

Create ZUGFeRD invoices

PdfFileSpecification fileSpec =

writer.addFileAttachment("ZUGFeRD invoice",

null, "c:/invoice.xml", "invoice.xml",

"application/xml",

new AFRelationshipValue.Alternative);

PDF/A-3b XMP

metadata Invoice

attachment ZUGFeRD

PDF

Page 46: iText summit 2014: Talk: iText for Archiving and Accessibility

Create ZUGFeRD invoices

PDF/A-3b XMP

metadata Invoice

attachment ZUGFeRD

PDF

Page 47: iText summit 2014: Talk: iText for Archiving and Accessibility

Flatten XFA forms with accessibility support

Page 48: iText summit 2014: Talk: iText for Archiving and Accessibility

Create XFA form in Adobe LiveCycle Designer

Page 49: iText summit 2014: Talk: iText for Archiving and Accessibility

Define accessibility attributes

Page 50: iText summit 2014: Talk: iText for Archiving and Accessibility

Flatten XFA form with iText XFAWorker

Page 51: iText summit 2014: Talk: iText for Archiving and Accessibility

For Europe, Middle-East, Asia and Africa

Kerkstraat 108

9050 Gentbrugge BELGIUM

T: +32 92 98 02 31 F: +32 92 70 33 75

E: [email protected]

Contact us!

For the US, Canada, Latin-America and Oceania

1 Broadway, 14th floor Cambridge, MA 02142

USA

T: +1 617 982 2646 F: +1 617 982 2647

E: [email protected]

www.itextpdf.com