ABCpdf now contains a third HTML rendering engine - ABCChrome™ - based around Google Chromium (x64 only).

This now means that you have a choice of HTML to PDF conversion based around any of the three current mainstream browsers. You can use Chrome style conversion, or Firefox style conversion or Internet Explorer style conversion.

We're very pleased with the new engine. Not only is it extremely good on modern HTML5 features and technologies like CSS3, SVG, web fonts and Font Awesome, it is also extremely fast and produces smaller outputs. What's not to like?

For extra security we have added our new FireShield™ technology to the Chromium engine. This allows you to dynamically assign permissions to the file system at runtime, to ensure that your HTML engine only has access to the places you want. So each conversion can be programmatically assigned specific rights and permissions, dependent on the type of request you are making.

Our speed and load test involves a real world HTML page of 13MB in size, which converts into a PDF of about 800 pages. Using MSHTML it took 63 seconds and peaked at about 700MB memory usage, output was 20MB. Using ABCGecko it took 129 seconds, 400MB peak memory usage, with output of 16MB. Under ABCChrome it took 23 seconds, peaked at about 500MB memory usage, with output of 4MB.

So in this test ABCChome is between three and six times faster, producing output that is between four and five times smaller. It's a great result!



PDF 2.0

After a gap of nine years, the PDF 2.0 ISO Specification has finally been released.

The previous ISO PDF specification - ISO 32000-1:2008 was released in Spring 2008. The updated PDF 2.0 specification -32000-2:2017 was released in the Summer of 2017.

The new specification incorporates a variety of additional Acrobat functions which have been documented by Adobe in extensions to the specification. It deprecates a number of features - most notably the Info metadata section, certain encryption schemes regarded as insecure and the XFA forms architecture used by Adobe Lifecycle. Some new features have been added but there are few of these. The majority of changes have been related to consolidation, correction and clarification.

This release of ABCpdf has been fully updated for compatibility with PDF 2.0. Defaults have been changed to avoid use of deprecated features. Documentation has been updated to reflect PDF 2.0 changes with new classes like the XMP Metadata object.




The PDF specification is massive. Simply enormous. So trying to capture the entire of the specification in an object model is a vast task. Yes this is what we have undertaken successfully.

The new Elements namespace covers all the tables in the PDF specification in a structured manner. It is extremely large - more than 300 classes - one for each table in the PDF specifications alll the way up to PDF 2.0. However this type of structured access provides a number of great benefits.

  • By using this namepace you ensure that you only add properties that exist for the current object. This vastly reduces the risk of introducing bugs - hard to detect bugs.
  • As you are using this namespace you get intellisense for the different properties that exist on an object. Each property links directly back to the precise page in the PDF Specification that defines it, so it's easy to work out what's going on and what each one is for.
  • As you run your code through a debugger you can see typed objects with all their properties and you can see how they link to each other. This makes it much easier to understand how a document is structured and how you should write code to analyse or modify it.

We believe we are the first ever to achieve this. Happy coding!




PDF Forms can contain JavaScript calculations.

Most typically these are used to add field values together. However they can be used for any type of field formatting or calculation.

Previous versions of ABCpdf were not able to run these types of JavaScript calculations which meant that programmatically changing field values could result in calculations being ignored.

With Version 11 we now support these types of calculations and JavaScript events.




This release introduced new automatic tagging functionality for Accessibility.

The AccessibilityOperation class always allowed documents to be scanned and tagged. However some people required more sophisticated structures. Some also required a finer level of control specific documents, dependent on content.

The new AccessibilityOperation class adds detection for:

  • Tables
  • Lists (eg bullet points)
  • Page Headers
  • Page Footers
  • Document Outline

All these structures are derived from the content of the document and inserted using standard tagging structures within the document. Accessibility standards typically suggest that page headers and page footers are excluded from the documents structure which is why we allow these to be detected. The document outline is automatically determined using the text styles that are used in the document.

In addition, some clients have domain specific requirements which are not easily encapsulated into a one-size fits all solution. For these people we offer the AccessiblePDF example project which shows how to use the AccessibilityOperation as a base, and then go through the structure looking at content, style and position; adjusting the document structure depending on context.




The PDF format has long supported 3D objects as well as standard 2D ones. We believe we were the first in the world outside of Adobe to support rendering of these 3D elements.

ABCpdf Version 10 supported U3D (Universal 3D) elements. As part of Version 11 we now also support the PRC (Product Representation Compact) 3D format.

We support 3D export as either WebGL and OBJ and there is a new exporters interface to allow you to easily export to other custom formats.

We support a wide range of palette types for flexible and powerful output of indexed color images in GIF and PNG format. Our indexed color output includes alpha for tiny, yet high-quality, transparent PNG images.

We now support rendering to both 8 and 16 bit grayscale PNG. In addition we also support rendering to progressive JPEG.



Copying Pages

ABCpdf has long supported the ability to draw pages from one document onto another.

However because the AddImageDoc function is not aware of state, each call has to be taken afresh. In cases where you are copying many pages from one document the repeated document analysis required for each call can start to impact performance.

In this release we have a new DrawPagesOperation which is aware of state. This means that, for a process drawing many pages between two documents, it can operate very much more quickly.



Getting Content

ABCpdf Version 10 introduced the OpAtom class - a great way to analyze and modify PDF content streams.

However the process of obtaining these content streams could be somewhat involved. In Version 11 we introduce the ContentStreamOperation class which can be used to greatly simplify this task.

For example code see the the GetColors Example Project - a project which shows how to list the colors used in a PDF document.




And as usual there's a whole host of useful new functions and properties liike:

  • bool Atom.Equals(Atom other, ComparisonType type)
  • int Atom.GetHashCode(ComparisonType type)
  • void Doc.SetInfo(int id, string type, bool info)
  • void TextFragment.Focus()
  • bool XReadOptions.ShrinkToFit
  • The Doc.AddLine method now supports arrows and other line endings.
  • New ReadModules for JPEG 2000 and EMF / WMF vector import.