Legacy notice!

iText 5 is the previous major version of iText's leading PDF SDK. iText 5 has been EOL, and is no longer developed. Switch your project to iText 7, integrating the latest developments.
Check related iText 7 content!

A new site, a new release! We've been working very hard on a new web site that would contain more code samples and answers to questions. We've also made it easier to find the information you need by creating different, easy-to-understand categories, but also through better search functionality and the use of tags. 

We are now releasing iText 5.5.8 and we've reorganized the source code. The projects itextpdf, pdfa, xtra, and xmlworker, are now all in one place: itext/itextpdf. You'll have to make small changes to your development environment if you import the iText source code.

iText 5.5.8 Core for Java and .NET

iText 5.5.8 fixes a problem with digital signatures that was accidentally introduced in version 5.5.7. While we were at it, we also improved the verification of OCSP responses. There were also problems when signing PDFs that are compliant with the PDF/A-2, PDF/A-3 and ZUGFeRD standard. Those are now fixed.

Other improvements involve:

  • Fonts: there were issues with some Noto fonts, we fixed the range of characters in the ToUnicode table, we provided a fallback mechanism in case of absent OS/2 tables,

  • Annotations: fixed some scaling issues and some flattening problems when skew and rotation are involved,
  • PdfReader: fixed partial reading when a PDF file is imported as a byte array,
  • Tagged PDF: fixed a problem with the structure tree when using page events,
  • Page labels: we received code contributions from Nick Park that improve page label extraction.

iText RUPS

We also have a new RUPS release. You can now click a stream in tree view to inspect its contents in a new window. This allows the user to keep a stream open while looking at other information such as the resources (fonts, XObjects, images,...) used by the stream.

iText 5.5.8 Core and XML Worker


  • Embed the full font in case of subset issues
    Fix issue with Noto font. Also PdfATtfUnicodeWriter was updated. DEV-1488
  • Remove dependency on javax.management
    Remove an unnecessary dependency on javax.management.OperationsException and replace it by java.io.IOException. DEV-1564
  • Fixed the code generating unique name for tmp file used for signing
    Resolves: DEV-1571
  • Update current page content height on table add even in case of immediate start of new page (used for PdfPageEvent in case PdfWriter#getVerticalPosition is called) DEV-1572
  • Signing ZUGFeRD document throws null pointer (DEV-1570)
  • (SUP-1077) Added a transformation to account for a change in scale in the annotation.
  • Separated page finalizing and page initializing logic DEV-1568
  • Fix partial reading from bytes array DEV-1563
  • The range of chars in ToUnicode decoding was being incremented from start to end using just the last 8 bits due to a misunderstanding of the specification.
  • Fix adding tagged elements on startPage and endPage page events
    Elements were not added to the root document entry, but as siblings instead.
    Now the order in which page events are called in consistent with tagged elements flushing DEV-1573
  • Removed unneeded call from PDFStamperImp
  • Add get method to get the PdfReader from a PdfStamperImp instance (DEV-1570)
  • Signing ZUGFeRD document throws null pointer (DEV-1570)
  • Annotation flattening with skew and rotation (DEV-1569)
  • Fixed issue with Noto font
    Resolves: DEV-1488
  • Set version in append mode.
    iText didn't set the version in append mode. By definition this shouldn't be necessary, but PdfSignatureAppearance uses PdfVersion.getVersion() to create its dictionaries. In the case of PDF/A2-a it would incorrectly use 1.4 as a version and not the provided (or original version) and as such iText generated PDFs that weren't compliant to PDF/A2-a. SUP-1117
  • BarcodeDatamatrix: add placeBarcode method for writing barcode directly to content stream DEV-1588
  • Fixed PdfSignatureAppearance.preClose method
    Returned the use of .getWidget method instead of .getMerged since the case, when signature field dictionary and dictionary its widget annotation are not merged, is rather uncommon if can be encountered at all. Moreover the use of merged dictionary instead of widget requires more efforts since .getMerged method returns not actually the dictionary obtained by merging signature field dict and widget annotation dict, but also AcroForm dict. Resolves: DEV-1579 Dmitry Trusevich
  • PdfSmartCopy: ignore recursive call (DEV-1581)
  • Add support for numeric font-weight DEV-1574
  • Improve OCSP verifier: now we check OCSP response strongly by RFC 6960
    Resolved: DEV-1587
  • change PdfPageLabels.getPageLabels() to scope prefixes to the range they are defined for
    While reading a PDF generated by Adobe InDesign CS6 using the Adobe PDF Library 10.0.1 which included several page label sections I noticed iText was keeping the prefix applied to subsequent sections in the values return by PdfPageLabels.getPageLabels(), even when the key was omitted in the following page label dictionary entries. According to the PDF Reference 1.7, Table 8.10 says that /P is an optional label prefix for page labels in this range. PDF Readers I have installed scope the prefix only to the range it is specified. This change empties out the prefix field to give behaviour I think aligns with the reference and my experience of other PDF readers. I am not aware of any potential regression issues introduced by this change, existing page label dictionaries created by iText set /P to an empty string so this will only affect reading PDFs with partially prefixed page label ranges as far as I know.
  • Fonts: Create fallback for absent OS/2 table (DEV-1586)
  • convert tabs to spaces in getPageLabels method to match rest of file
    The rest of the codebase seemed to be using 4 spaces to indent while this method had been written a while ago and contained a mix of tab characters and spaces.
  • Revert automatic field renaming in case of field name collisions in PdfSmartCopy (commits 30f947b2035d4d4deb7ac1139fbb7f716ff5f7cf, 15ebe33e323718fe3f583ade0953e7d2f85b3909)
    One should be able to merge two fields with same names so that the field value is shared across all the widgets of that new field. DEV-1578 SUP-1026
  • Add XMLWorker#closeLocalWC DEV-1594
  • Add constructor with new signature for XMLWorkerHelper (DEV-1595)
  • Improve CompareTool: enable more lenient comparison of content streams and numbers using specified epsilon value 
  • Improving the Counter functionality Call is not excessive: putAll method allocates memory for new entries at once, while mergeDifferent method can lead to multiple resizing.
  • Performance improvements DEV-1605
  • Fix adding of tagged content with onStartPage event
    Such content used to be outside of Document Tag DEV-1607
  • The bug with lettered list was fixed DEV-1618
  • Add CIDSet for PDF/A-2 and PDF/3 documents.
    Due to specification we have to add CIDSet only for PDF/A-1, but the PDFBox preflight validator reports an issue, if we don't add CIDSet for PDF/A-3. Resolved: DEV-1615
  • Make border-width and border-style independent of order DEV-1621
  • A little fix for PdfPTable.setWidthPercentage method.DEV-1625
  • Revert previous commit with CIDSet. Add CID0 to CIDSet revert rev.[9ae2eb9]
  • Move Git configs and MarkDown files to root of repository

iText RUPS

  • Add Object Inspection Action.
    Right clicking a stream in the tree view allows for an inspection action which opens a new window containing the stream. This allows the user to keep a stream open while looking at other information, e.g. its resources
  • Add basic information about Maven in BUILDING.md.
    Most importantly, mention the goal (install), as does the main itext BUILDING.md.

XFA Worker

  • XFAWorker: implement insertInstance JS function DEV-1562
  • XFAWorker: simulate Acrobat behavior - use bottom margin area in case text does not fit
  • XFAWorker: support DataMatrix barcodes. Initial implementation of data descriptions prototyping model for Data DOM. DEV-1588
  • XFAWorker: postpone JavaScript variables evaluation - Form DOM objects might be used there DEV-1583
  • XFAWorker: generate fictive missing entries in Data DOM in case of forced binding (e.g. min occur)
  • XFAWorker: ExclGroups must have empty rawValues when the bound value does not correspond to any of the child check button on values DEV-1588
  • XFAWorker: performance optimization - do not generate fictive nodes in Data DOM for draw elements. Fix subformSet choice relationship child subform occurrance
  • XFA Worker: Fix resolving of $data.* binding references and nested wildcard references starting with $data DEV-1583
  • XFAWorker: ignore startNew breakBefore conditions in case the target pageArea or pageSet is not found in the template DEV-1582
  • Add support for numeric font-weight DEV-1574
  • Add removing of XFAWorker context after flattening DEV-1594
  • XFAWorker: avoid executing initialize script for the second time when resolving embedded elements DEV-1584
  • XFAWorker: fix empty QRCode exception. XFA Worker: fix applying of break conditions DEV-1592
  • XFAWorker: more accurate page area retrieval. Respecting oddOrEven property and pagePosition=first DEV-1609
  • XFAWorker: Avoid double repeating of parent subform during binding DEV-1608
  • Reset root form positioner layout in case of incorrectly specified value SUP-1169
  • Fix NullPointerException in case of retrieval of properties of table leader element SUP-1178
  • XFAWorker: Fix synchronization issue DEV-1619