What's New in Version 10?

If you want a quick overview you may be interested in the ABCpdf PDF Comparison Chart...

Docs & Images

ABCpdf now contains a host of image effects for common operations like sharpen, auto-levels, contrast and color adjustments; morphs such as twirl and wave. See the effects section of the documentation for full details.

Our new Photoshop read module supports the standard PSD and also the large image PDB file types. It allows the direct import of RGB, Grayscale, CMYK, Lab, Indexed and Duotone images in 1, 8 , 16 and 32 bits per component color depth. The PDF format does not support 32 bits per component HDR images so these are scaled down to 16 bits per component. It also supports the import of different layers if you need to extract these individually.

The new TIFF import module is much more efficient and reliable than the old one. In particular it has been tested extensively with unusual multi-page TIFF formats containing unusual compression schemes. It is a fully comprehensive module which will cope brilliantly with any TIFF you throw at it. It is difficult to describe reliability as a feature but most solutions will not cope with unusual TIFFs and this reliability is invaluable. In terms of more traditional new features, TIFF images may contain rotation flags to indicate orientation. In the past ABCpdf would ignore many of these flags. The effect was that images such as scans, which should have been one way up, may have appeared upside down. ABCpdf now supports all these flags so your tagged images will automatically appear in an appropriate orientation when they are imported by ABCpdf.

The new RTF import module is a native Rich Text Format import module which allows RTF to be imported quickly and easily without the need for any helper applications.

PDF reading now supports Portfolios (also known as PDF Collections), controllable using the new XReadOptions.OpenPortfolios property. This property allows you to select between treating the Portfolio as one document or as a set of documents. The former is what a user sees when they open a Portfolio using Acrobat, so it is what you will want most of the time. The latter is what is appropriate if you want to manipulate the contents of the PDF Portfolio using methods like Catalog.GetEmbeddedFiles.

As well as manipulating PDF Portfolios you can also create them using the example code that goes with the new EmbeddedFile and FileSpecification classes available in the new release.


The PDF format has long supported 3D objects as well as standard 2D ones. We believe we are the first in the world outside of Adobe to support rendering of these 3D elements. At present ABCpdf Version 10 supports U3D (Universal 3D) elements but we expect to extend this to include the PRC (Product Representation Compact) 3D format and also to the live manipulation of these 3D models.


PDF supports a variety of color spaces and past versions of ABCpdf have been very good at allowing you to handle RGB, Grayscale and CMYK colors. Spot colors have been implemented using a variant of grayscale but other color spaces such as Lab, Calibrated RGB, Calibrated Grayscale, Multichannel and Pattern have been impossible to represent using the standard ABCpdf objects.

In ABCpdf Version 10 the XColor object has been extended to allow these types of colors to be represented. An XColor can be any of the more normal color spaces or it can be a generic, unconstrained set of color components defined in the context of the current color space. The new XColor.ColorSpace enumeration provides detail of the type of color space to which the XColor belongs, the new XColor.Components collection allows you access to the raw PDF color and the XColor.Name property provides access to any pattern name.

This new structure brings benefits in terms of generating new PDFs but also in terms of analyzing and modifying the content of existing PDF documents. In terms of creation, there are new examples showing how to generate PDF documents using the Calibrated RGB, Calibrated Grayscale and Lab color spaces. In terms of analysis it is easy to create a color from a set of parameters in a content stream using the XColor.FromContentStream method.


Text functionality is much improved and contains a number of new and frequently requested features.

ABCpdf now supports proper kerning. It reads the kerning tables from TrueType fonts and automatically adjusts the spacing between letters to make them look just right. You don't need to do anything to take advantage of this - just recompile your code against the new namespace and it will all just happen.

ABCpdf now fully supports bidirectional, contextual ligatures for languages such as Arabic. These can be enabled using the TextStyle.Direction property.

Another frequently requested feature was the ability to flow text around shapes such as images. Now we make it easy to create a variable shaped area into which your text can be inserted.

Use HTML styled text to create tables of contents with leaders. Leaders are the dotted lines you see in tables of contents, between the heading on the left and the page number on the right. Previously creating these was complex and error prone. Now it's just one tag.

There are a variety of new text measurement and positioning options. The Doc.FitText and Doc.FitHtml methods allow you to add text scaled to fit a particular area on the page. The Doc.MeasureText method allows you to measure the length of a string of text without adding it to the document. Or if you want a more fine grained approach you can use the TextLayer.TextFragments property to find the individual locations and styles of each of the text items that have been added.

The FontObject has a new EmbedFont method to allow a font to be embedded or re-embedded into an existing PDF document. It also has new and useful properties such as Flags, FontBBox, FontAscender, FontDescender, FontAscent, FontDescent, FontLineSpacing and FontLineGap. This allows new and useful example code such as drawing text on a curve.

Forms & Fields

In previous version of ABCpdf, Fields and Annotations were largely static. You could change their value but not much else. In this release they become much more dynamic allowing interactive access to locations and styles.

You can now set the Field.Rect or Annotation.Rect to move them around on the page. You can set the Field.Page or Annotation.Page to move them between pages. For Annotations you can get and set the Border, FieldBackgroundColor, FieldBorderColor and FieldRotation. For Fields you can now get and set the TextAlignment, TextFont, TextSize and TextColor. For more complicated styles you can directly access the DefaultAppearance which provides control over all other field style.

Fields and Annotations are intimately linked but in the past ABCpdf has represented them as somewhat separate. In the new release these objects have been rationalized to make them coordinate better. There is a Field.GetAnnotations method to find all the Annotations referenced by a field. There are new Annotation.Stamp and Annotation.Focus methods to mimic those offered by the Field class. There are Annotation.Flags and Field.Flags properties to allow common flags such as Hidden and Print to be queried, set or cleared.


New features allow the simple and efficient analysis and deconstruction of PDF documents. Disassemble modify, reassemble. Used to be complex. Now it's easy.

At a low level, a range of new Atom operations have been introduced for fast and robust handling of PDF content streams. At the core of these changes are the new OpAtom class and the ArrayAtom.FromContentStream static constructor. The former represents a PDF operator in a drawing stream and the latter allows a content stream to be deconstructed into an ArrayAtom.

Once the stream has been deconstructed in this way you can use the OpAtom.Find method for a fast and memory efficient way of selecting various operators out of the array. The parameters for the operators can be established using the OpAtom.GetParameters method and the operator and parameters can be modified as required.

Finally the content stream can be reassembled using the Atom.GetData method and then the raw data inserted back into the original PDF.

This sequence allows fast, complex, content stream deconstruction and manipulation using a memory efficient model. For example it can be used to search a PDF page for particular types of color operators and replace them with different ones. PDF color replacement until now has been difficult and error prone. This new functionality makes the process easy.

Along with the new functionality for the manipulation of PDF content streams we also have a new and useful set of low level functionality to allow the manipulation of text in existing PDFs. The StringAtom has new Decode and DecodeDoubleByte methods to allow text operator parameters to be decoded into the base text encoding. These can then be passed through the FontObject EncodingToChar and EncodingToString properties to allow mapping from the text encoding through to Unicode values.

Going the other way you can use the FontObject CharToEncoding to map Unicode values to the font encoding and then StringAtom Encode or EncodeDoubleByte to put the text into a format which can be inserted into a content stream.

Ease of Use

There are lots of things to make your life a bit easier. Functions like Doc.AddRect to better reflect similar functions such as AddPie and AddOval. A new FormXObject and methods to convert from objects such as a Page into a FormXObject - useful if you need to perform operations such as scaling an existing page. An AddXObject method to draw a PixMap or FormXObject onto the current page.

The Page object now implements useful properties like the MediaBox, CropBox, BleedBox, TrimBox and ArtBox properties. Previously only some of these were available and those were read only. Now they work in a much more intuitive way. There is a new Thumbnail property for accessing or setting a thumbnail for the page and there are examples showing how to insert or extract them. The new Page.GetBitmap method allows you to render one or more layers on the page and is ideal for generating drop shadows.

There is a new document state property to enable features like a graphics state stack, with push and pop operators, to be simply and easily implemented.

The PixMap object now allows construction from an XImage object which means you can add an image to a document without adding it to a specific page. The PixMap class conains Mask and SMask properties so that you can access or assign new masks or soft masks. There are useful functions like Filp and Rotate for commonly requested bitmap operation. There is a SetBitmap method to go with the existing GetBitmap one and there is a new Save function to allow the PixMap to be saved in its native color space.

The AccessibilityOperation example code includes new functionality for enhanced compatibility with common screen readers such as NVDA (NonVisual Desktop Access).

The TextOperation now allows the color space of the text color to be determined. This allows you to detect text drawn using specific spot colors.

Encryption includes automatic support for the new Adobe AES revision / version 5 algorithm. This provides extra security and is now the standard for new releases of Acrobat.

Render quality is enhanced in a number of areas most notably line stroking and anti-aliased clipping.


What's New in Other Versions