DynaPDF vs. PDFDocument in Xojo
The DynaPDF plugin exists now for 13 years. DynaPDF itself is older and has been developed long before it's public release 17 years ago. It covers nearly all PDF features in an extensive library and you can use it in your Xojo applications!
As Xojo 2020r1 brought a brand new PDFDocument class, we got questions on how they compare.
The new PDFDocument class allows you to create a PDF in Xojo, draw with the graphics class into it and then save the file. You can use various fonts, draw vector graphics and text on the pages.
With the possibility to record drawing into a JSON block, this class provides an interesting new way to prepare PDF content as template and draw it later. This allows to serialize the drawing commands and reuse them several times. DynaPDF on the other side allows to use real PDF templates, which means you can draw PDF content in a template and then place it on several pages and still have it only once in the file.
Some things you may notice with PDFDocument are, that the class currently does only ANSI encoding and is not fully unicode capable. Fonts are embedded as a whole file, which makes PDF files bigger. Pictures are always RGB and stored as JPEG. Similar to DynaPDF the PDFDocument class may notice if the same picture is used on multiple pages and only store it one time in the file. There is no direct way to draw styled text. (see blog post about Styled Text in DynaPDF). Currently the graphics class integration for DynaPDF allows to draw 2D objects (see Object2D class) and we expect this to be added to the PDFDocument class in a future update.
Here is the DynaPDF feature table with an added column for the new PDFDocument class:
Feature | Xojo | Starter | Lite | Professional | Enterprise |
---|---|---|---|---|---|
Available for macOS, Linux and Windows. | ![]() |
![]() |
![]() |
![]() |
![]() |
Color spaces DeviceGray, DeviceRGB, DeviceCMYK | RGB only | ![]() |
![]() |
![]() |
![]() |
Create and Edit JavaScript Functions / JavaScript Actions | ![]() |
![]() |
![]() |
![]() |
|
Creation of Tagged PDF files | ![]() |
![]() |
![]() |
![]() |
|
Create, modify, delete annotations (30+ types) | ![]() |
![]() |
![]() |
![]() |
|
Add actions to annotations like JavaScript, GoToR and GoTo. | ![]() |
![]() |
![]() |
![]() |
|
Custom Page Templates | ![]() |
![]() |
![]() |
![]() |
|
File Attachments / File Attachment Annotations | ![]() |
![]() |
![]() |
![]() |
|
Font Subsetting | ![]() |
![]() |
![]() |
![]() |
|
Full access to content streams | ![]() |
![]() |
![]() |
![]() |
|
JPEG 2000 Compression | ![]() |
![]() |
![]() |
![]() |
|
More than 60 code pages, incl. 17 CJK character sets and Unicode | ANSI only | ![]() |
![]() |
![]() |
![]() |
Named Destinations | ![]() |
![]() |
![]() |
![]() |
|
Native PDF Transparency for Images (Alpha channels) | ![]() |
![]() |
![]() |
![]() |
|
No differentiation between client and server application | ![]() |
![]() |
![]() |
![]() |
![]() |
Royalty free Distribution | ![]() |
![]() |
![]() |
![]() |
![]() |
Support for multi-page TIFF's | ![]() |
![]() |
![]() |
![]() |
|
Tables | ![]() |
![]() |
![]() |
![]() |
|
Text formatting, multi-column text | Partial | ![]() |
![]() |
![]() |
![]() |
Vector graphics, line dash patterns, shadings, patterns | Partial | ![]() |
![]() |
![]() |
![]() |
Web links, File links, Page links, Bookmarks | ![]() |
![]() |
![]() |
![]() |
|
40 Bit RC4, 128 Bit RC4/AES, 256 Bit AES Encryption | ![]() |
![]() |
![]() |
||
Conformance check for PDF/A creation | ![]() |
![]() |
![]() |
||
Create Interactive Forms | ![]() |
![]() |
![]() |
||
Creation of Layers (Optional Content) | ![]() |
![]() |
![]() |
||
Creation of PDF/A and PDF/X files | ![]() |
![]() |
![]() |
||
Creation of Portable Collections (PDF Packets) | ![]() |
![]() |
![]() |
||
Digital signatures (internal and external) | ![]() |
![]() |
![]() |
||
EMF Conversion | ![]() |
![]() |
![]() |
||
Extract images (except inline images) | ![]() |
![]() |
![]() |
||
Import of PDF files | ![]() |
![]() |
![]() |
||
Merge PDF Files | ![]() |
![]() |
![]() |
||
Output Intents (specifies the destination color space) | ![]() |
![]() |
![]() |
||
Text extraction | ![]() |
![]() |
![]() |
||
16 Blend Modes, ability to set the overprint mode | ![]() |
![]() |
|||
3D Annotations | ![]() |
![]() |
|||
Additional color spaces CalGray, CalRGB, Indexed, ICCBased, Lab, Separation, DeviceN | ![]() |
![]() |
|||
Convert inline color operators to gray | ![]() |
![]() |
|||
Extraction images and vector graphics | ![]() |
![]() |
|||
Flatten Interactive Forms (conversion to text and vector graphics) | ![]() |
![]() |
|||
Optimize PDF files (optimize content streams, scale images, re-compress images, hairline correction, flatten layers) | ![]() |
![]() |
|||
Rendering Engine, Print PDF | ![]() |
![]() |
|||
Single Page Import of external PDF Pages | ![]() |
![]() |
|||
Soft masks, Transparency Groups | ![]() |
![]() |
|||
Split PDF files | ![]() |
![]() |
|||
Support for external CMaps | ![]() |
![]() |
|||
Text Extraction, search and replace text | ![]() |
![]() |
|||
Including source codes for dynapdf library (not plugin) | ![]() |
||||
Static Library for C/C++ available | ![]() |
||||
Conversion of arbitrary imported PDF files to PDF/A | optional | optional |
The conversion of arbitrary imported PDF files to PDF/A requires a separate license of the PDF/A Extension (extra purchase in addition to Pro license).
A DynaPDF Starter license is included in OmegaBundle 2020, which is available for a few more days.
Did we miss something? Comments? Please contact us if you like to point out a feature we missed.
