News, Updates, Bugfixes

In this section you find information about updates and new features which were added with the latest update. Please note that only changes within official version are listed. Updates which are not public available are not listed but the minor version is incremented.

 

Version 2.5.2.536

 

 
 

Changes

Description

 
 

License Agreement

The new section "Restrictions/Copyright Notices" has been removed since it is unnecessary.

 
 

AES Encryption

The AES Encryption Library that was used in DynaPDF has been replaced with a native C++ implementation. The new code is smaller and a little bit faster.

 
 

New Functions

Description

 
 

GetFieldChoiceValue()

The function returns the choice values of combo and list boxes.

 
 

Version 2.5.1.535

 

 
 

Bugfix

Description

 
 

Color values

Small values were incorrectly rounded. Single components could be saved one higher than specified, e.g. the RGB value 210, 87, 2 was saved as 210, 87, 3.

 
 

PDF Import

A parsing error occurred if a CIDSystemInfo dictionary contained hex strings.

The last character width of simple fonts was not copied under certain circumstances if the file contained multiple versions of the same font object with overlapping glyph widths.

A stack overflow could occur if a damaged file contained binary data at the end of the file.

 
 

Version 2.5.1.533

 

 
 

Bugfix

Description

 
 

FlattenAnnots()

Under certain circumstances an annotation could be wrongly scaled.

 
 

FreeTextAnnot()

The function did not consider the border width.

 
 

OpenImportFile()

The function could hang in an endless loop if a name tree contained null objects.

 
 

PDF Import

The flags of imported fields were set to printable by default. If the flags were not overridden during import the print settings were changed to wrong values.

 
 

Text Ausgabe

DynaPDF did not produce warnings about missing glyphs if the font used a code page and if the text was output with the Unicode version of a string function.

 
 

WriteTextMatrix()

Rotated or scaled transformation matrices were sometimes ignored if other text was already output on the same y-coordinate.

 
 

New Functions

Description

 
 

AddRenderingIntentEx()

The function accepts a file buffer as input.

 
 

GetInIsTrapped()

Returns the value of the Trapped key.

 
 

RenameSpotColor()

Renames a spot color in all Separation, DeviceN, and NChannel color spaces in which the color can be found.

 
 

SetAnnotBorderStyle()

Changes the border style of an annotation.

 
 

SetAnnotBorderWidth()

Changes the border width of an annotation.

 
 

SetAnnotColor()

Changes the border, background, or text color of an annotation.

 
 

SetAnnotFlagsEx()

Changes the flags of an annotation.

 
 

SetAnnotHighlightMode()

Changes the highlight mode of an annotation.

 
 

SetAnnotIcon()

Changes the icon of a text annotation.

 
 

SetAnnotOpenState()

Changes the open state of a markup annotation.

 
 

Version 2.5.0.530

 

 
 

Bugfix

Description

 
 

InsertImage(), InsertImageEx(), InsertImageFromBuffer()

The bitmap decoder did not consider the offset to the pixel data of the image header. Invalid pixel data were loaded if the image contained additional metadata.

 
 

DeletePage()

An access violation occurred if a previously imported page was deleted and if the same page was imported again, without closing the import file.

 
 

PDF Import

It was not possible to load PDF files which contained invalid objects in the xref table. As defined in the PDF specs DynaPDF must ignore such objects.

 
 

Version 2.5.0.529

 

 
 

Bugfix

Description

 
 

EMF Konverter

Texts of EMRSMALLTEXTOUT records were not scaled horizontally.

 
 

PDF Import

DynaPDF failed to import a page if the page object contained a Boolean value.

The change regarding Optional Content Groups in version 2.5.0.527 could cause errors in certain cases.

 
 

Version 2.5.0.527

 

 
 

Bugfix

Description

 
 

PDF Import

The order of Optional Content Groups (OCGs) could change during import. This could cause errors if Javascript functions accessed layers with the array index.

Invalid escape sequences in string objects were skipped while Acrobat copies the character behind the backslash.

3D views without an XN key were not imported. It seems that Acrobat does not require this key to process the view successfully. DynaPDF adds the missing key now to the document if necessary.

 
 

SetDocInfoEx()

It was not possible to change existing user defined keys due to an error in a search algorithm. The already existing key was not found due to this error and DynaPDF added the same key then again with the new value. However, the deletion of user defined keys was possible.

 
 

AES and 128 Bit Acrobat 7 compatible RC4 Encryption

The full versions of Acrobat 7, 8, and 9 grand full access to the document if the default encryption filter for embedded files is set in the encryption dictionary! The owner password is then no longer required to change the security settings. Because DynaPDF has set the default filter for embedded files the encryption flags had no effect.

Due to this error it is also possible to modify existing PDF files to disable the security settings in Acrobat. This can be easily done by overriding the sequence /Length 128 or /Length 256 with "/EFF/StdCF   " in the encryption dictionary. After this change Acrobat grants full access to the document while it should normally be opened with user rights.

 
 

Version 2.5.0.525

 

 
 

Bugfix

Description

 
 

GetLastTextPosX(),

GetLastTextPosY()

The functions returned absolute coordinates which are not usable without further calculations.

 
 

InsertImage(), InsertImageEx()

Embedded ICC profiles in JPEG images were not considered if the image was inserted in pass-through mode, also if the flag gfUseImageColorSpace was set (see SetGStateFlags()). The function raised also an out of memory exception if the flag gfUseImageColorSpace was set and if SetSaveNewImageFormat() was set to false and if the image contained an ICC profile.

 
 

PDF Import

The import failed if the media box of a page contained indirect references.

 
 

WriteAngleText()

The function did not set the end point of the text.

 
 

WriteFText()

The list symbol was not output and the \TR[] operator was not correctly processed.

 
 

Version 2.5.0.522

 

 
 

Bugfix

Description

 
 

EMF Converter

PolyLine records were skipped if the record contained only one line and if the start and end coordinate were identically (if the line end style is set round cap, the result is normally a dot or circle).

 
 

Font handling

CloseFile() returned a "Unknown Error", if a font was used with the code page  cpUnicode.

 
 

GetFont()

The function returned scaled metrics for the 14 PDF Standard fonts.

 
 

ParseContent()

The function could cause an endless loop if a content stream contained invalid operators.

 
 

PDF Import

A non-embedded font was not fully loaded if the same font was already used in the document. This could cause missing or overlapping glyphs in the resulting PDF file.

Under certain circumstances a name conflict could occur if a non-embedded font was used with different link names in a PDF file and if the same font was used in the document after the file was imported. This error occurred only on very special circumstances. However, the resulting PDF files was damaged in such a case.

 
 

Version 2.5.0.519

 

 
 

Bugfix

Description

 
 

Font handling

The style attributes of non-embedded fonts were not correctly considered when the font was written to the PDF file. Due to the missing style attributes it was possible that viewers loaded the font in a wrong style.

The descender of TrueType or OpenType fonts was incorrectly calculated if the font contained no OS2 table. The value could be too large.

The demo string could be incomplete if the font Helvetica Bold was used in the document and if this font was embedded.

 
 

PDF Import

The bounding boxes of PDF pages were not inherited independent of each other from the parent pages objects. In the worst the media box could not be found and it was not possible to import the affected pages.

 
 

PlaceTemplateEx()

The function used a wrong coordinate origin for the rotation angles 90 and -270 degrees.

 
 

Version 2.5.0.517

 

 
 

Bugfix

Description

 
 

-

Official release of DynaPDF 2.5.

 

Download info for existing customers:

Please change the URL of your download accounts at the end to:

.../dynapdf_2.5.zip     // DynaPDF Enterprise

.../dynapdf_2.5_std.zip // DynaPDF Lite, Professional

User name, password, and the license key did not change.

 
 

Version 2.0.49.486

 

 
 

Bugfix

Description

 
 

CheckFieldNames()

The function did not ignore fields which were marked as deleted.

 
 

Content Parser

An endless loop could occur if a font contained negative glyph widths.

 
 

CreateCheckBox()

If multiple check boxes with identical name and different export values were created the states of of certain check boxes could be set to false while it should be true.

 
 

Delphi Interface

The Delphi interface was not compatible to Delphi 2009 or higher due to the changed string format in these versions.

 
 

EMF Conversion

The record type AngleArc produced incorrect results. In addition, the mapping modes MM_LOENGLISH und MM_HIENGLISH did not work.

 
 

FlattenForm()

Field groups consisting of check boxes could be ignored during flattening.

 
 

fntGetSpaceWidth()

The default space width of composite fonts were differently computed in comparison to simple fonts.

 
 

FileAttach Annotations

The icon of a FileAttach annotation was not imported under certain conditions.

 
 

Fontloader

The font loader loaded fonts from only one resource fork on Mac OS X due to an invalid duplicate check.

 
 

HighlightAnnot()

Highlight annotations were wrongly drawn on rotated pages.

 
 

PDF Import

A maybe existing encoding of a TrueType form font was not loaded. Several characters could be missing if the font was also used in normal page objects.

Damaged PDF files with a compressed object structure could cause a buffer overrun if an object stream contained less data than specified.

The optional transformation matrix of patterns were written to the file with too few precision. This could cause visible changes.

Form fields which contained a border style dictionary in form of an indirect object were not correctly imported.

Radio buttons which were created with Adobe's Designer contain usually an Opt array with inconsistent values. This prevents that a check box of the radio button can be set to checked. DynaPDF repairs such radio buttons now automatically.

Article Beads were ignored.

 
 

PlaceSigFieldValidateIcon()

Due to an error in the validity check of the destination rectangle it was not possible to place the icon properly if the page was rotated.

 
 

SetCheckBoxState()

The function changes the state now only if necessary. This makes it possible to change the states of all check boxes in a radio button without invalidating the states of previous check boxes in the same group.

 
 

Signature Fields

The signature appearance was incorrectly drawn on rotated pages.

 
 

TrueType Fonts

Under certain circumstances the space character could be mapped to the .notdef character. The mapping was wrong but produced still correct results.

 
 

VB .Net and C# Interfaces

Structures which contained the data type IntPtr were incorrectly marshaled on 64 bit platforms.

 
 

New Functions

Description

 
 

DeleteAcroForm()

Deletes a maybe existing PDF and XFA form.

 
 

DeleteJavaScripts()

Deletes all global Javascripts and optionally all Javascript Actions.

 
 

DeleteXFAForm()

Deletes a maybe existing XFA form. If the form is a hybrid form, the PDF form is left intact and can now be edited.

 
 

Set3DAnnotProps()

The function sets the activation and deactivation behavior of 3D annotations.

 
 

Set3DAnnotScript()

Saves a Javascript in the 3D annotation. Such Javascripts can directly access the 3D context of the 3D artwork, e.g. to control an animation or to change certain properties of the 3D context.

 
 

SetAnnotString()

Sets or deletes certain strings of an annotation.

 
 

TPDFAnnotationEx

The structure was extended with several new fields.

 
 

Version 2.0.46.460

 

 
 

Bugfix

Description

 
 

CloseFileEx()

The file was incorrectly encrypted on big-endian-machines if RC4 encryption was used. On certain circumstances texts from combo boxes were not encrypted. The contents of such combo boxes was unusable in this case.

 
 

Content Parser

Errors could occur during decompression of CCITT Fax compressed image streams due to an incorrect EOL handling the CCITT Fax decoder of DynaPDF.

 
 

EditTemplate2()

The function could not be used outside an open page.

 
 

EMF Import

The intercharacter spacing array was ignored for texts which consist of one space character only. This could cause errors if the underline flag was set because the line was not output in the correct width.

 
 

Interactive Forms

The text of field which used a background color was not visible in Acrobat 9 if the option "Highlight Field" was activated. Imported radio buttons could appear with an incorrect appearance if the check box character was not set in the check box fields of the radio button.

 
 

PDF Import

Encrypted files with a file id length other than 16 bytes could not be decrypted.

DynaPDF contains now a few new repair modes to repair damaged PDF files.

 
 

SetFont()

The code page was not changed if one font was used with several different CJK code pages.

 
 

SetUseSwapFileEx()

The function could cause a buffer overrun due an access on a non null/terminated string.

 
 

New Functions

Description

 
 

LoadFDFData()

The function loads form data from a FDF file. The corresponding PDF form must be imported before calling this function.

 
 

LoadFDFDataEx()

Same as LoadFDFDate() but this function accepts a file buffer as input.

 
 

Version 2.0.45.452

 

 
 

Bugfix

Description

 
 

Content Parser

An access violation could occur if the document contained CID fonts.

 
 

Font loader

DynaPDF loads the system fonts on Windows by default from the Registry. However, Windows doesn't store all available fonts in the Registry so that certain fonts could be absent. In most cases the font Marlett was missing but in seldom cases it was also possible that standard fonts like Arial were missing.

 
 

InsertImageFromBuffer()

Due to a change in the TIFF decoder it was no longer possible to load TIFF images from a file buffer.

 
 

PDF Import

DynaPDF returned an error if the optional FontFamily key contained an empty string.

Bounding boxes of templates with a size of [-32268, 32767, -32268, 32767] were changed during import. Such templates could then no longer be displayed. However, such bounding boxes occur extremely seldom.

 
 

Version 2.0.45.447

 

 
 

Bugfix

Description

 
 

Content Parser

PDF files which contained many CCITT Fax compressed inline images caused worse processing speed. The content parser is used by the functions ComputeBBox(), IsColorPage(), GetPageText() , ParseContent(), and several others.

 
 

PDF Import

The version 2.0.45.446 applied checks which are normally applied when converting PDF files to PDF/A. This could cause errors, e.g. if an embedded font contained inconsistent glyph widths.

 
 

Version 2.0.45.446

 

 
 

Bugfix

Description

 
 

ComputeBBox()

The optional matrix of templates were ignored when parsing the document. Due to this error the computed bounding box could be too large.

 
 

EMF converter

Empty clipping regions were not correctly handled. User defined palettes were not applied to images which contain lees colors than available in the palette.

 
 

GetBBox()

The function returned always true, also if the bounding box was not set.

 
 

InsertImage()

The transparence color of GIF images could not be recognized if the color was more than one time available in the color palette.

 
 

PDF Import

Radio buttons which contained only one check box were imported as a check box. Due to the changed field type it was not possible to add other check boxes to the radio button.

 
 

New Functions

Description

 
 

AddDeviceNProcessColorants()

Adds additional attributes to a DeviceN color space about the process colors which are used in the color space.

 
 

AddDeviceNSeparations()

Adds additional attributes to a DeviceN color space about the spot colors which are used in the color space.

 
 

GetCheckBoxCharEx()

Returns the character that is used to render the on-state.

 
 

GetDeviceNAttributes()

Returns optional attributes of a DeviceN or NChannel color space.

 
 

Version 2.0.44.444

 

 
 

Bugfix

Description

 
 

AES Encryption

Strings in a CIDSystemInfo dictionary of a CID font were not encrypted. The resulting PDF file was damaged.

 
 

BeginTemplate()

If a second PDF instance was created right before the new template and if already one template was in memory, the new template could get the internal name of the previous one. This could cause errors when viewing the file.

 
 

Codepages cpCJK_Big5_Uni, cpCJK_EUC_KR_Uni, cpCJK_950_Uni

The CJK to Unicode conversion routines contained errors. Certain characters could be missing in the text output.

 
 

EMF conversion

Font properties like underlined or the font weight were ignored when selecting a stock font.

 
 

FindField()

The function didn't find fields which were organized in one or more group fields.

 
 

InsertImage()

It was not possible to insert CCITT Fax compressed images with insufficient data. Such image cause no longer an error. Missing areas of the image are initialized to white.

 
 

PDF import

Under certain circumstances an optional content group was imported without its name. The resulting PDF file was damaged due to this error.

If a page object was included in a compressed object structure the page object was not fully initialized and this could cause several errors when when creating the new PDF file. It is not allowed to include page objects in a compressed object structure, however, DynaPDF should not depend on it.

ImportPDFFile() did not import PDF files which contained damaged page labels. The error checking was too strong in this case because damaged page labels can simply be ignored.

 

 
 

ParseContent() / GetPageText()

In specific order of operators the character spacing was not restored when executing a restore graphics state operator. Due to this error the coordinates of the following text and the string widths were wrongly calculated.

The string widths of Type3 fonts were sometimes wrongly calculated.

 
 

ParseContent() / ComputeBBox()

A buffer overrun could occur during decompression of CCITT Fax 4 compressed streams if the decoding parameters contains a different number of columns than specified in the image dictionary.

 
 

PlaceImage()

The image was not rotated with the coordinate system.

 
 

SetFont()

On Mac OSX fonts in the directory ~/Library/Fonts/ were not loaded.

 
 

SetTextDrawMode()

The mode dmClipping was not applied if a shading was drawn.

 
 

WriteFText()

Text draw modes which processes text as paths were not applied or caused inconsistent if the text contained an underlined string. An active character or word spacing other than zero caused wrong text output.

 
 

New Functions or Features

Description

 
 

GetColorSpaceCount()

Returns the number of color spaces in the current document.

 
 

GetColorSpaceObj()

Returns the most important properties of a color space. The function accepts a color space handle or array index as input.

 
 

GetColorSpaceObjEx()

Like GetColorSpaceObj() but accepts an IColorSpace pointer. This version can be used to access an alternate color space. The function can also be used in the TSetFillColor() and TSetStrokeColor() callback functions of the content parser.

 
 

GetNeedAppearance()

Returns the value of the NeedAppearance flag on an interactive form.

 
 

GetTextFieldValue()

Returns the value and default value of a text field.

 
 

SetGStateFlags()

The function support the following new flags:

  • gfUseImageColorSpace: If set, the active color space is ignored when inserting an image. The color space is taken from the image file instead.

  • gfIgnoreICCProfiles: Meaningful only if the flag gfUseImageColorSpace is set. If set, an embedded profile is not used to create an ICCBased color space for the image. The image is inserted in the corresponding device color space instead.

 
 

SetNeedAppearance()

Sets the NeedAppearance flag of an interactive form. This flag causes that a viewer application redraws all form fields. This can be useful to avoid slightly changes of the field appearance when entering a field.

 
 

SetTextFieldValueEx()

The function changes the field value only.

 
 

Version 2.0.42.417

 

 
 

Bugfix

Description

 
 

CheckConformance()

DynaPDF could produce a damaged PDF file if the file contained a digital signature with a user defined appearance.

 
 

CloseFileEx()

Copy & Paste did no longer work with CID fonts because ToUnicode streams were not encrypted.

 
 

ComputeBBox()

A Decompression error was raised if a Flate or LZW compressed image used a TIFF predictor function. This error occurred only if images were decompressed. TIFF predictor functions are now supported.

 
 

CreateICCBasedColorSpace()

DynaPDF raised an Unknown error when closing the file if such a color space was used.

 
 

CreateIndexColorSpace()

A damaged PDF file could be produced if the base color space was not a device color space.

 
 

CreateSeparationCS()

A damaged PDF file could be produced if the base color space was not a device color space. In addition, DynaPDF created a wrong interpolation function if the alternate color space was an additive color space like RGB or Lab.

 
 

DeleteActionFromObj()

An unknown error was raised when closing the file if a Javascript action was deleted from a field.

 
 

EMF conversion

The width of a stock pen was scaled to device units when the pen was created. This could cause errors if the transformation matrix or view port was changed before using the pen.

The records Arc, ArcTo, Chord, Ellipse, and Pie were incorrectly processed if the member bottom of the bounding rectangle was smaller than top.

 
 

Font handling on Mac OS X

TrueType fonts on Mac OS X contain often no OS/2 table which is required to determine the font weight. Due to the missing weight information DynaPDF loaded such fonts with a default weight of 500. This caused problems if a bold font should be loaded because DynaPDF emulated then a bold style also if the font was already a bold one; this results in an extra bold style.

DynaPDF extracts the font weight now from the postscript name if no OS/2 table is available.

 
 

Font handling on Windows

In previous versions of DynaPDF system fonts were loaded directly from the Windows fonts directory. However, linked fonts are not physically stored in this directory so that they cannot be loaded in this way.

To enable support for linked system fonts DynaPDF loads system fonts now from the Windows Registry. Using the Registry is also faster.

 
 

GetBookmark()

The returned destination page was wrong if the bookmark contained a GoTo action.

 
 

ImportPDFFile()

Due to a change in the duplicate check of already imported pages it was no longer possible to import form fields if the file was already imported one time and if the form field were flattened with FlattenForm().

 
 

IsColorPage()

The result could be wrong if an indexed color space used an ICCBased color space as base color space.

 
 

ParseContent()

The function raised an exception if a content stream contained a floating point number with a minus in the fractional part, e.g. "75.-003". Adobes Acrobat processes such invalidly formatted numbers without error indication. To archive the same runtime behavior DynaPDF ignores the fractional part of such numbers and raises no longer an exception.

 
 

PDF Import

The changes in incremental updated PDF files with a compressed object structure were ignored when importing such PDF files.

The structure tree of a tagged PDF file was not imported if the structure tree contained a class map with a class that contained an array of attribute dictionaries. The structure tree is not required but the tagging information of the document is lost.

DeviceN color spaces which used a device independent color space as alternate color space were not correctly imported. The new PDF file could be damaged due to this error.

 
 

ScaleCoords()

The new transformation matrix was right and not left multiplied with the current transformation matrix. This caused errors because matrix multiplication is not cumulative.

 
 

New Features

Description

 
 

EMF conversion

The EMF converter has been extended so that EMF files which unsupported ROP codes are now rastered to an image. This is of course the worst case but better than producing an incorrect output. The rasterizing feature can be disabled if necessary with the new flag mfDisableRasterEMF.

Additional new conversion flags:

  • mfNoTextClipping: If set, the ETO_CLIPPED flag in text records is ignored.

  • mfSrcCopy_Only: If set,  images which use a ROP code other than SRCCOPY are ignored. This flag can be useful when processing Excel 2007 spool EMF files.

  • mfClipRclBounds: If set, the graphic is drawn into a clipping path in the size of the bounding rectangle rclBounds. Contents outside the bounding box is usually invisible in viewer applications so that flag should be set by default.

 
 

fntGetTextWidth()

Returns the string width of a binary string returned by the content parser.

 
 

fntTranslateString2()

Converts a binary string to Unicode by using the font's encoding or ToUnicode cmap.

 
 

AddImage()

Adds an image to the current open image buffer.

 
 

CloseImage()

Closed the current open image buffer.

 
 

CloseTag()

Closes the current open tag (see also OpenTag()).

 
 

CreateAnnotAP()

Creates an appearance stream for the specified annotation and opens it for editing. An appearance stream is a normal template that has exactly the same size as the corresponding annotation in which it used. The template is already opened so that you can directly draw into it. When finish the template must be closed with EndTemplate(). This function is usually used to create stamp annotations with a user defined appearance.

 
 

CreateDeviceNColorSpace()

Creates a DeviceN color space.

 
 

CreateImage()

Creates an image in the specified format. This function can be used to create an image file from an image buffer returned by the content parser. The creation of multi-page TIFF as well as single page bmp, jpg, png,and jpc (JPEG2000) image formats are supported.

 
 

CreateStructureTree()

Creates a structure tree to enable the creation of a tagged PDF file.

 
 

DeleteEmbeddedFile()

Deletes an embedded file.

 
 

FlattenAnnots()

Draws annotations directly on the page and deletes already flattened annotations.

 
 

FreeImageBuffer()

Frees the current open image buffer if the image was created in memory.

 
 

GetFontCount()

Returns the number of fonts used in the PDF file.

 
 

GetFontEx()

Returns important properties of a font.

 
 

GetImageBuffer()

Returns the file buffer of an image that was created in memory. See CreateImage().

 
 

GetInPrintSettings()

Returns the print settings stored in the current open import PDF file. The print settings are used to initialize the print dialog in a viewer application.

 
 

GetInIsXFAForm()

Returns true if the current open import file contains a XFA form.

 
 

GetJavaScriptAction2()

Returns a JavaScript action that is associated with an object, e.g. a form field, page, and so on.

 
 

GetPrintSettings()

Returns the print settings of the PDF file.

 
 

HighlightAnnot()

This function can be used to create a Highlight, Squiggly, StrikeOut, or Underline annotation.

 
 

OpenTag()

Opens a new tag so that arbitrary contents can be placed into it. The tag must be closed with CloseTag() when finish. See Tagged PDF for further information.

 
 

SetPrintSettings()

Change or set the print settings to initialize the printer dialog in a viewer application.

 
 

StampAnnot()

Creates a stamp annotation.

 
 

Version 2.0.36.395

 

 
 

Bugfix

Description

 
 

WriteFText()

The function could cause an access violation if a page break occurred.

 
 

Version 2.0.36.394

 

 
 

Bugfix

Description

 
 

PDF Import

Image masks were not imported. Transparent images could appear opaque due to this error.

The check for damaged layers was too strict. DynaPDF did not import PDF files with incomplete OCGroups (Optional Content Groups). Such files are now automatically repaired.

 
 

Font handling

The DBCS space character 0x3000 (Unicode) was mapped to the normal space 0x20. Because the normal space character has normally another width the result could be incorrect.

 
 

WriteFText()

The word breaking algorithm did not consider the current character spacing if a single word did not fit into the output rectangle.

 
 

VB .Net and C# Interfaces

The parameter Matrix of the callback functions TBeginPattern and TBeginTemplate was wrongly declared.

 
 

Version 2.0.36.390

 

 
 

Bugfix

Description

 
 

PDF Import

DynaPDF could cause an endless loop if a template contained a matrix in form of an indirect object.

 
 

SetTextFieldValue()

The appearance streams of field groups, consisting of multiple text fields with identical name, were not overridden if the group contained no value. The field value was then not visible in Adobe's Acrobat, except if the cursor was placed into the field.

 
 

AiCrypto Library

The AiCrypto library, which is used in DynaPDF to create digital signatures, contained the MD2 hash algorithm. This algorithm was never used by DynaPDF but still included in the source directory of the AiCrypto library. For safety, the source codes of the MD2 algorithm were fully removed since this algorithm is for private use.

 
 

New Functions

Description

 
 

DeleteEmbeddedFile()

The function deletes an embedded file.

 
 

Version 2.0.35.385

 

 
 

Bugfix

Description

 
 

PDF Import

DynaPDF could cause an endless loop if the PDF file contained a damaged outline tree (bookmarks are stored in the outline tree).

An access violation could occur on big-endian machines such as IBM-AIX, HP-UX, and so on if the PDF file was encrypted and contained an Interactive Form (AcroForm).

 
 

WriteFText()

The SetFont tag (\FT[]) did not work with the Unicode version of the function. In addition, the leading was always set to the font size if the OnPageBreak() callback function was executed. It was also not possible to change the leading in the callback function.

 
 

Version 2.0.35.380

 

 
 

Bugfix

Description

 
 

FlattenForm()

The text color could be set to the background color of a previously flattened form field. This error could occur with imported form fields only.

 
 

Tagged PDF

DynaPDF produced under certain circumstances an invalid structure tree. The tagging information was not usable in this case.

 
 

Version 2.0.35.376

 

 
 

Bugfix

Description

 
 

GetPageText()

The function could cause an infinite loop if a PDF file contained nested templates with no resources.

 
 

PDF Import

A damaged PDF file could be produced if an imported PDF file contained non-embedded fonts which were already used before importing the document.

 
 

Version 2.0.35.374

 

 
 

Bugfix

Description

 
 

PDF Import

DynaPDF could produce a damaged PDF file if an imported template contained a transformation matrix with very small scaling factors which required a precision of more than two digits.

Damaged LZW compressed streams were fully decoded if possible while invalid LZW codes were ignored. However, it is better to break decompression if an invalid LZW code was found because it then easier to repair the valid part of the content stream.

Adobe's LiveCycle Designer 8.0 writes an invalid key into Layers which contain a Usage Creator Info dictionary. The Subtype key should be a name object but Designer writes the key as string instead. This error caused that DynaPDF did not import the layer. If the layer was used by a form field or an annotation no error was reported and the resulting PDF file could be damaged due to the missing layer.

 
 

Content Parser

The content parser stayed in an endless loop if a content stream contained a non-break-space character.

 
 

SetFontEx()

The function stored the font internally in the font array for interactive forms. This could cause errors if the font was used with WriteFText() because the handle of the font was invalid.

 
 

WriteFText()

The function could cause an access violation if the processing was canceled in the OnPageBreak callback function.

 
 

Version 2.0.35.370

 

 
 

Bugfix

Description

 
 

ComputeBBox()

The bounding box of CCITT Fax compressed images were computed with wrong colors. DynaPDF tested for black on white pixels and white on black pixels. Due to this error the computed bounding was mostly as large as the entire image.

 
 

CreateSeparationCS()

DynaPDF created a wrong interpolation function if all components of the color in the alternate color space are zero. This error causes that that the entire range was always interpolated either to black or white depending on whether the alternate color space was an additive or subtractive space.

 
 

EMF Konvertierung

Glyph indexes were processed as Unicode in SmallTextOut() records.

User defined palettes were not applied to 1 bit bitmaps. The colors of such images could then be wrong.

 
 

ParseContent()

DynaPDF contained an error in the ToUnicode cmap parser. This error caused that in certain cases no valid Unicode mapping could be created for CID fonts. The Unicode mapping is required to extract the text of a PDF file.

 
 

New Functions

Description

 
 

GetAnnotEx()

In contrast to GetAnnot() this function returns also the destination of link annotations.

 
 

GetPageAnnot(),

GetPageAnnotEx()

Like GetAnnot() or GetAnnotEx() but for access on per page basis.

 
 

GetPageAnnotCount()

The function returns the number of annotations which are used by the page.

 
 

GetInNamedDest()

The function returns the destination of a named destination contained in the currently open import PDF file.

 
 

GetInNamedDestCount()

The function returns the number of named destinations stored in the currently open import PDF file.

 
 

Version 2.0.33.366

 

 
 

Bugfix

Description

 
 

Interactive Forms

The background or border color could be changed during saving the document, if the one of these colors were set to white.

 
 

PDF Import

A very special code sequence within LZW compressed streams could cause that not the entire stream was decompressed.

 
 

Version 2.0.33.364

 

 
 

Bugfix

Description

 
 

EMF Conversion

The font Symbol could not be used with glyph indexes. In addition, under certain circumstances it was not possible to access glyph index 32 of a font if it was used with glyph indexes.

Images were not rotated with the coordinate system.

The fill color was not initialized to black before converting an EMF file. This error could cause that objects were drawn in a wrong color if no brush was set beforehand.

It was possible that DynaPDF computed another color in comparison to the GDI if the high byte of a COLORREF structure contained invalid values. The high byte is reserved for the system palette and the GDI ignores invalid values.

 
 

FlattenForm()

Under certain circumstances rotated fields were drawn on a wrong position.

Image buttons were ignored if the default appearance stream was empty.

 
 

GetAnnot()

The field PageNum was always set to 0 for many annotation types.

 
 

SetUseSwapFile(),
SetUseSwapFileEx()

The function caused an access violation if SwapLimit was set to 0 and if no swap file was already used beforehand.

 
 

Version 2.0.33.358

 

 
 

Bugfix

Description

 
 

EMF Conversion

The bounding box of an EMF file can be computed in different ways. While most EMF viewers do not display objects outside the output rectangle the GDI function PlayEnhMetaFile() for example, extends the output rectangle so that such contents becomes visible. DynaPDF uses per default the latter variant to compute the output rectangle. To get the same result as in most EMF viewers we have added the new flag mfRclFrameEx which causes that the output rectangle is not extended. If this flag is set the flag mfClipView should be set too so that contents outside the output rectangle becomes invisible.

 
 

GetUserRights(), GetInEncryptionFlags()

Both functions returned different values. The function GetInEncryptionFlags() returned the original value which is usually negative. GetUserRights() returned the binary inverted value.

 
 

PDF Import

It was not possible to import multiple documents which contained layers. The PDF import has now been changed so that multiple documents with layers can be imported. By default layers with identical names are imported separately. Alternatively, layers with identical name can be merged. Therefore, the new flag if2MergeLayers  has been added. This flag must be set with the new function SetImportFlags2().

 
 

DynaPDF für Mac OS X

It was not possible to link the precompiled binaries on Mac OS X 10.4.

 
 

New Functions

Description

 
 

ComputeBBox()

The function computes the visible area of a page.

 
 

ConvertColors()

The function converts RGB black/white to DeviceGray. This conversion is useful if a color printer processes such b/w values as color to reduce the print costs.

 
 

SetImportFlags2()

The function sets additional flags to control the PDF import.

 
 

Version 2.0.31.353

 

 
 

Bugfix

Description

 
 

EMF conversion

The font size of font could change if it was loaded in Unicode mode and used with glyph indexes.

 
 

PDF Import

The destination of imported bookmarks were lost if the destination was defined with an inline action.

 
 

Global Javascripts

With DynaPDF created global Javascripts were sometimes not executed in Adobe's Acrobat.

 
 

Interactive Forms

All functions to create form fields returned a wrong handle if two field with identical name were created. This error occurred only when the second field with identical name was created.

 
 

DynaPDF for Mac OS X

The Mac OS X version of DynaPDF contained an error in the font loader. Due to this bug it was impossible to load Type1 fonts from resource forks. In addition, the loading time of the font table was sometimes very long.

 
 

Version 2.0.31.349

 

 
 

Bugfix

Description

 
 

Content Parser

The color space operator (cs or CS) was incorrectly processed if it was used to set a device color space which in turn was defined as inline color space. An error occurred only if the color space operator followed a set color operator (sc or SC). This operator combination occurs very seldom.

 
 

SetMetaConvFlags()

The flag mfNoTextScaling was ignored during EMF conversion. This flag is useful if low resolution EMF files must be converted to PDF.

 
 

SetTextDrawMode()

The actual fill or stroke color was not updated if the draw mode was set to dmFillClip or dmStrokeClip. In addition, it was not possible to clip another text with a previously drawn clipping text if no vector graphic or image was drawn beforehand.

 
 

Delphi Interface

The constructor and destructor of the class TPDF was not thread-safe since the instance counter was not incremented or decremented in a thread-safe manner.

 
 

Version 2.0.30.346

 

 
 

Bugfix

Description

 
 

CheckConformance()

The function could produce a damaged PDF file if the document contained converted EMF files which used Unicode fonts.

 
 

CreateColItemString()

The optional parameter Prefix was not correctly written to the file.

 
 

SetFont()

Due to a wrongly initialized variable it was not possible to load Type1 fonts.

 
 

SetLineDashPattern()

A previously set line dash pattern was not deleted and the new pattern was appended to the already existing one. This error could cause a damaged PDF file if the function was called many times on a page.

 
 

New Features

Description

 
 

Tagged PDF

DynaPDF supports now the creation of tagged PDF files. However, the new functions to create such files will be documented in the next update.

 
 

Version 2.0.29.344

 

 
 

Bugfix

Description

 
 

GetBookmark()

The exact destination was not returned if the bookmark used a GoTo Action to open the destination.

 
 

Rectangle()

If a rectangle was drawn as filled path and if then further rectangles were drawn clockwise and finally stroked with StrokePath() the rectangles were not closed.

 
 

SetFieldExpValue()

The export value of checkboxes with identical name, which are organized in a group field, could not be changed. Such checkboxes act like a radio button if the export values of the checkboxes are different.

 
 

Version 2.0.29.343

 

 
 

Bugfix

Description

 
 

EMF Conversion

ExcludeClipRect records were wrongly applied if no other clipping region was already in memory.

 
 

PDF Import

The appearance of button fields could change if the field used an icon fit dictionary which was defined as indirect object.

 
 

New Features

Description

 
 

Mac OS X Font Handling

The font handling has been extended for Mac OS X. System fonts are now automatically loaded like under Windows. DynaPDF loads the fonts of the following directories automatically: /System/Library/Fonts, /Library/Fonts, and ~Library/Fonts. Other font directories are ignored. However, it is still possible to add arbitrary more font directories to the search list. The dependency to the Carbon Framework has been removed.

 
 

Version 2.0.29.342

 

 
 

Bugfix

Description

 
 

EMF Conversion

The coordinate system was incorrectly scaled if the scaling was applied with the EMF records ScaleVieportExt() or ScaleWindowExt().

 
 

PDF Date/Time strings

Due to changes in the computation of date/time strings DynaPDF produced an invalid formatted string if the time offset between local time and gm time was negative. This error caused for example, that the signature of a signed PDF file could not be validated in Adobe's Acrobat.

 
 

configure script for Linux/Unix

The configure script, which is delivered with DynaPDF Enterprise, didn't work on Mac OS X Tiger. The configure script has now been extended so that DynaPDF can be build on Mac OS X. Precompiled binaries will be available as soon as possible. In addition, the font handling will be extended so that system fonts can be loaded in the same way as on a Windows OS.

 
 

Version 2.0.29.338

 

 
 

Bugfix

Description

 
 

PDF Import

Version 2.0.29.337 did not import global objects like bookmarks, embedded files, or Javascripts. This version only available for about 12 hours.

 
 

Version 2.0.29.337

 

 
 

Bugfix

Description

 
 

DrawCircle()

The new start position was not set if the circle was drawn in a larger path which was filled later with ClosePath(). Due to this error lines occurred between the circle and the previous path.

 
 

JPEG2000 compressed Images

DynaPDF did not understand a few typical JPEG2000 marker and canceled the import with an error message. In addition, a memory leak of 8 bytes occurred if a JPEG2000 image was loaded from a file buffer.

 
 

PDF Import

DynaPDF could not import PDF files which contained a ViewerPreferences dictionary as indirect object.

The duplicate check for imported pages is now less restrictive. For example, it is now possible to import a page multiple times also if the flag mfImportAsPage is set. However, form fields cannot be imported multiple since this would cause a damaged PDF file.

 
 

Font embedding

Artifacts occurred sometimes in Adobe's Acrobat with a few fonts if the text was displayed in very small font sizes.

 
 

WriteFText()

If a page break event was executed, and if the page was closed, and if the current font was loaded with the code page cpUnicode DynaPDF raised an out of memory exception. This error occurred since the font file was closed with the page and not loaded again if necessary.

 
 

Version 2.0.28.336

 

 
 

Bugfix

Description

 
 

DrawChord(), RoundRect(), RoundRectEx()

The start position was not recomputed if multiple such shapes  were combined in one large path, e.g. to apply the even odd rule.

 
 

14 PDF Standard fonts

Due to changes in the font handling DynaPDF didn't considered space characters of these fonts to compute the text width for underlined or strike out text. The lines were too short due to this error. GetTextWidth() returned still the correct value since another algorithm is used in this function.

 
 

Version 2.0.28.335

 

 
 

Bugfix

Description

 
 

Ellipses, Circles

Adobe's Acrobat produces artifacts if the shape is stroked and if the end point of the last bezier curve lies not exactly on the start point of the first curve. It seems that this is an error in the stroker of Adobe's Acrobat since no such effect can be produced with filled ellipses or circles. To avoid this effect we changed the calculation so that the last bezier curve overlaps the first one now a little.

 
 

Imported Interactive Forms

DynaPDF produced under certain circumstances an invalid string for the default appearance of a field. This error occurred only with combo boxes at this time but other field types could be theoretically involved too.

 
 

ParseContent()

The function produced an access violation if no callback function to process text was set in the parser interface structure.

 
 

Shadings

With DynaPDF created shadings were written to the file without the required Domain entry. The PDF file was damaged due to this error. However, imported shadings were processed correlctly.

 
 

Schrifthandling

The embedding rights of TrueType and OpenType fonts were not considered in version 2.0.28.332. It was then possible to embed fonts which contain no embedding rights.

 
 

Version 2.0.28.331

 

 
 

Bugfix

Description

 
 

PDF Creation time

DynaPDF did not consider the summer time offset. The creation time stored in the PDF file could be differ from the real local time.

 
 

PDF Import

A damaged PDF file was produced if an imported PDF file contained a stitching function with only one sub function.

 
 

Visual Basic Interface

The processing of Unicode strings need to be changed again since the current implementation did not work on Asian locales. In addition, the functions GetFont(), GetPageLabel() and ConvToUnicode() were incomplete or wrongly implemented.

 
 

Version 2.0.28.330

 

 
 

Bugfix

Description

 
 

GetFont()

The function returned incomplete properties of CID Fonts.

 
 

GetPageText()

The text color was not correctly set.

 
 

PDF Import

Under certain circumstances imported DeviceN color spaces were wrongly written to the output file. The PDF file was damaged due to this error.

 
 

ReplacePageText(), ReplacePageTextEx()

If a begin text operator (BT) was not terminated with a white space character the resulting PDF file could be damaged if the text object contained no further text records.

 
 

WriteFText()

The function did not change the font within a text block if it was selected with the postscript name.

 
 

Version 2.0.28.328

 

 
 

Bugfix

Description

 
 

EMF Conversion

The graphics state was not restored if the clipping flag was set in a text record and if the text used a font with the charset DEFAULT_CHARSET or if the flag mfUseUnicode was set and if the text consist of space characters only. This error caused that the clipping area was not deactivated and coordinate issues could occur.

 
 

Unicode text output

Due to changes in the font class in version 2.0.28.325 space characters of Unicode string were printed twice if the font was loaded with the code page cpUnicode.

 
 

Version 2.0.28.326

 

 
 

Bugfix

Description

 
 

PDF Import

DynaPDF caused an access violation if a PDF file contained an invalid blend mode in an extended graphics state dictionary.

 
 

New Features

Description

 
 

ConvColor(), GetPageText()

A CIE based algorithm is now used to convert CMYK colors to RGB. This technique reduces color differences significantly.

 
 

Version 2.0.28.325

 

 
 

Bugfix

Description

 
 

Unicode Text output

The issue in the processing of Unicode texts was still not fully solved.

 
 

GetPageText(), Content Parser

Under certain circumstances some characters of Type1 fonts could not be converted to Unicode.

 
 

Version 2.0.28.324

 

 
 

Bugfix

Description

 
 

GIF Images

GIF images with an invalid end of encoding marker (EOE) could not be imported.

 
 

Unicode text output

DynaPDF ignored the first embedded character if the string consists of only one character and if the font contained no space character.

 
 

Delphi Interface

The interface contained an invalid function declaration if it was compiled with Delphi 4 or earlier.

 
 

Version 2.0.28.323

 

 
 

Bugfix

Description

 
 

Font selection

Due to a wrongly initialized variable it was impossible to emulate font styles like Bold or Italic since the font selection failed already if the font was not available in the whished style. This error could also cause that wrong fronts were selected during the conversion of EMF files.

 
 

Image Buttons

The size of imported image buttons could change if a reset form action was executed and if the button used an invisible border larger than one unit.

 
 

DynaPDF for AIX

Due to a missing library DynaPDF was terminated if it raised internally a C++ exception.  DynaPDF must be linked with the library libsubc++ since the standard libraries of AIX contain an incomplete C++ exception handling.

 
 

IsEmptyPage(), IsColorPage()

Due to a wrongly initialized variable an empty or color page could not be detected if the page contained no setcolor operator.

 
 

Version 2.0.28.322

 

 
 

Bugfix

Description

 
 

GetTextWidth()

The text widths of Unicode string was under certain circumstances  incorrectly computed if a 8 bit code page was used and if a character could not be found in the font.

 
 

EMF Conversion

Image masks were sometimes incorrectly processed. The image that used such a mask was then fully transparent.

 
 

Image Buttons

Image Buttons changed still the appearance if a reset form action was executed and if the border width was set to two or three units.

 
 

New Features

Description

 
 

SetFont()

Font files are no longer loaded fully into memory to reduce the memory usage.

 
 

Version 2.0.28.321

 

 
 

Bugfix

Description

 
 

PDF Import

Under certain circumstance PDF Shadings were incorrectly imported. The resulting PDF file caused that Acrobat crashed when trying to view such a PDF file.

Imported uncompressed images were incorrectly written to the file if a swap file was used.

 
 

Unicode Javascripts

Javascripts in Unicode format were written to the file in an incorrect format if the script was longer 128 characters.

 
 

Visual Basic Interface

All Unicode functions were wrongly declared in the VB interface. Due to this error it was impossible to output characters outside of the Ansi character set. In addition, the function GetBookmark() was wrongly declared.

 
 

Image Buttons

Image Buttons changed the appearance if a reset form action was executed since the image size was incorrectly computed.

 
 

SetFontW(), SetFontExW()

The Unicode versions of SetFont() performed an incorrect duplicate check. Due to this error a font was embedded multiple times and the resulting files were too large.

 
 

New Features

Description

 
 

EMF Konvertierung

DynaPDF contains now the new flag mfGDIFontSelection which causes that fonts are selected over a GDI device context. This makes sure that DynaPDF selects always the fonts which the GDI would use to render the EMF file.

 
 

GetPageText(), ReplacePageText(),

ReplacePageTextEx()

The function GetPageText() uses now internally the content parser of DynaPDF to return texts in a PDF file. Kerning arrays are now returned too. The kerning arrays are required to compute the exact string position as well as to replace texts in a PDF file.

In addition, colors of complex color spaces are now converted to a device color space. The function ReplacePageText() can now optionally preserve an arbitrary number of kerning records from deletion. This improves the development of text replacement algorithms.

DynaPDF is now delivered with the new demo project edit_text which demonstrates how text search and text replacement algorithms can be developed.

Due to the extensions of the function GetPageText() the interfaces for VB .Net and C# need to be modified. It is still possible to replace the library with the new version but you must modify your source codes when recompiling the project.

 
 

Transparent GIF Images

The transparent color of GIF images is now used from the image file if the transparent color is set to the special value NO_COLOR. If the image is not transparent it will be inserted opaque.

 
 

Version 2.0.27.319

 

 
 

Bugfix

Description

 
 

Interactive Forms

Due to changes in Adobe's Acrobat it is no longer possible to use fonts with an arbitrary 8 bit code page in form fields. It is still possible to use an arbitrary font, however, the font must use the code page 1252. In addition, it seems that Acrobat does no longer support Type1 fonts within form fields, with the exception of the 14 standard fonts. The use of Type1 fonts is not restricted at this time but you should test the form carefully if a Type1 font should be used.

 
 

PDF Import

Under certain circumstances it was not possible to import a compressed PDF 1.5 file due to an invalid range check.

It was not possible to import Run Length encoded content streams. This filter is normally used for images only.

 
 

Version 2.0.27.318

 

 
 

Bugfix

Description

 
 

Code page 862

The bidi algorithm was applied when using the code page 862. This is wrong, this code page must be processed without applying the bidi algorithm.

 
 

Version 2.0.27.317

 

 
 

Bugfix

Description

 
 

EMF Converter

The mapping modes MM_LOMETRIC and MM_HIMETRIC caused a wrongly scaled coordinate system.

 
 

PDF Import

An access violation could occur during import of a compressed PDF 1.5 file.

 
 

Bidirectional code pages

Bidirectional code pages were processed without applying a bidi algorithm. It is now possible to set the bidi mode with the new function SetBidiMode(). However, DynaPDF supports Hebrew code pages or Unicode only because other complex scripts like Arabic require further Unicode algorithms which are not included in DynaPDF.

 
 

Version 2.0.26.316

 

 
 

Bugfix

Description

 
 

EMF Converter

Due to the changed handling of text paths line dash patterns were not reset if necessary.

 
 

Visual Basic Interface

The data type of the parameter "Value" of the function SetSaveNewImgFmt() was declared as Long instead of Boolean.

 
 

New Features

Description

 
 

JPEG Import

JPEG compressed images are processed by default in pass through mode if the image need not to be downscaled or converted due to the used color space.

However, in certain cases it can be useful to recompress JPEG images. This can be archived now by using a negative value for the JPEG quality (SetJPEGQuality). JPEG images are no longer processed in pass through mode if the JPEG quality is set to a negative value.

 
 

Version 2.0.26.315

 

 
 

Bugfix

Description

 
 

Interactive Forms

DynaPDF crashed with an access violation, if an Unicode string was set to a text field.

 
 

PDF Import

Some PDF drivers use filter names in normal streams which are allowed in inline images only. It was not possible to import such PDF files.

 
 

TIFF Import

Old style JPEG compressed TIFFs (TIFF version < 6.0) could not be imported if the sampling rate was not identical for all image components.

 
 

New Features

Description

 
 

EMF Converter

Added support for PaintRgn(), FrameRgn(), OffsetRgn() und SetMetaRgn().

DynaPDF contains now a polygon clipper which enables the processing of the clipping modes RGN_OR, RGN_XOR, RGN_DIFF, and RGN_AND. This makes it possible to correctly process all possible combinations of clipping regions and clipping paths.

 
 

Version 2.0.26.314

 

 
 

Bugfix

Description

 
 

EMF Converter

16 bit images with a pure 5 bit mask were masked with a 5, 6, 5 bit mask.

Images which used a system palette were skipped.

Line dash patterns of cosmetic pen need to be slightly adjusted to get exactly the same result in comparison to the GDI output.

1 bit images which are printed with StretchBlt records did not appear transparent if required.

 
 

New Features

Description

 
 

EMF Converter

Support for PlgBlt and MaskBlt records were added.

DynaPDF scans now for image masks which must be taken from a separate image record. This technique is required to mask the overlaying image correctly.

 
 

Version 2.0.26.313

 

 
 

Bugfix

Description

 
 

EMF Converter

The string format could not always be correctly identified within SmallTextOut() records due to an unknown identification flag. This record type is not documented so that required processing flags can only be determined via trial and error.

 
 

Interactive Forms

Form fields were incorrectly painted if the orientation of the page was not zero. The field size and position was incorrect too in this case.

Due to a bug in the function WriteFText() it was also possible that DynaPDF hangs up during writing the file to disk.

 
 

SetFont()

If a font was used with different Unicode based code pages and if the selected font was not available in the whished font styles, DynaPDF created always a new instance of the font due to a bug in the duplicate check routine. If large fonts were loaded this error could cause an out of memory exception. The file size of successfully created documents was also greater than normal.

 
 

WriteFText()

The function could hang up in an endless loop if the width of the output rectangle was smaller than the width of the first character to be printed.

 
 

Version 2.0.26.312

 

 
 

Bugfix

Description

 
 

Visual C# interface

The function FlushPageContent() was wrongly implemented. Due to this error it was impossible to replace text on a page. In addition, Visual Studio raised an exception if the function was called.

 
 

PDF Import

DynaPDF produced a damaged PDF file if a transparency group used an ICC based color space.

 
 

EMF Conversion

In very cases a path was not reset if it was stroked. The following MoveTo / LineTo calls were then considered as path which could cause a wrong result.

 
 

Version 2.0.26.311

 

 
 

Bugfix

Description

 
 

.Net Interfaces, sample projects

All functions which accept file buffers as parameter were wrongly declared in the Visual C# interface.

Unmanaged string conversion functions accept no longer null pointers in Visual Studio 2005. Due to this change all functions need to be changed which use .Net string conversion functions.

Acrobat 8 does no longer support relative file paths. Due to this change the original file could not be opened in the demo project personalize.

 
 

PDF Import

Under certain circumstance an error could occur during importing a DeviceN or NChannel color space. It was not possible to import the PDF file in this case.

 
 

EMF Conversion

The graphics state was not saved if the flag ifClipView was set. It was impossible to place multiple EMF files on a page if this flag was set because the clipping area of the first EMF file was still active.

 
 

New Features

Description

 
 

PDF Import

It is now possible to import XFA forms with DynaPDF. However, such forms cannot be edited.

Layers are now natively imported. Invalid layers, which are created by certain Adobe products, do no longer avoid merging of such PDF files. However, PDF files which contain real layers cannot be merged.

 
 

Version 2.0.26.310

 

 
 

Bugfix

Description

 
 

Structures TPDFExtGState and

TPDFExtGState2

These structures were changed due to an inefficient declaration of some data types in the structure.

The structure TPDFExtGState were also extended to enable the usage of native PDF transparency. This makes it now possible to output vector graphics and images with native PDF transparency.

 
 

Version 2.0.25.309

 

 
 

Bugfix

Description

 
 

IsColorPage()

Space characters were not ignored. Black & White pages could be detected as color pages due to this error.

Images with a color table were sometimes detected as color image, also if only gray scale colors were used.

 
 

IsEmptyPage()

Space characters were not ignored so that empty pages, which contained just a few invisible space characters, were detected as non-empty.

 
 

Version 2.0.25.308

 

 
 

Bugfix

Description

 
 

EMF-Import

The coordinate calculation of text records could fail in rare cases.

The foreground and background colors of bitmap patterns were not changed dynamically with the brush.

The color table of 1 bit bitmaps were ignored.

Nested clipping paths were not correctly processed.

ModifyWorldTransform: TRANS_LEFTMULTIPLY and TRANS_RIGHTMULTIPLY were applied reversed. The transformation matrix could become invalid due to this error.

Under certain circumstances the fill color of 1 bit bitmap patterns were written into the pattern stream. This is not allowed and caused a damaged PDF file.

 
 

PDF-Import

PDF files which contain resource definitions which refer again to the same recourse definition could not be imported.

Documents with an invalid or damaged document info could not be imported. If the rest of the PDF file is intact it now possible to import such damaged files.

Damaged or invalid PDF objects were usually just as incorrectly imported, as they were found in the original document. DynaPDF applies now extensive examinations and automatically repairs such objects if possible. If a repair is not possible, the side concerned is not imported.

It was impossible to import a PDF file with ImportPDFFile() if the file contained one or more damaged pages. DynaPDF displays now a warning but imports all other pages if possible.

Global layer properties were not imported if a page was imported with ImportPage() or ImportPageEx(). The Layers of such pages became then invalid due to the missing layer properties.

Field groups were not always correctly imported or such fields could not be edited.

A memory leak occurred if a PDF file was imported that contains Flate compressed streams without end of encoding markers.

 
 

PDF/A output

The required identification key was written into a wrong name space because it was not correctly documented in the PDF/A standard.

It was impossible to produce PDF/A compatible PDF files with the demo version of DynaPDF because the demo string uses the non-embedded font Helvetica-Bold.

 
 

ClipPath()

It was not possible to apply the even odd rule on paths which consists of closed shapes like rectangles, ellipses, circles, and so on.

 
 

Interactive Forms

It was not possible to create field groups in all possible combinations. The state of checkboxes within a field group was incorrectly set if the group contained checkboxes with different export values. This error occurred too when flattening the form.

The font size of text fields were incorrectly calculated if the flag ffMultiline was set and if the font size was set to auto size (font size < 1.0).

 
 

GetFTextHeight()

Ending line break characters were not considered as part of the text. The function returned only the visible height of the output rectangle.

 
 

WriteFText()

If a text line consists of space characters only the entire text line was discarded and the first visible character was placed at the beginning of the next text line.

Individual words, which were wider than the output rectangle, were not broken into the next text line.

 
 

New Functions

Description

 
 

AddBookmarkEx

Adds a bookmark to the document by using a named destination as destination.

 
 

AttachFile

Attaches a file to the document.

 
 

AttachFileEx

Attaches a file buffer to the document.

 
 

ChangeAnnotName

Changes the name of an annotation.

 
 

ChangeFontStyleEx

Changes the font style and enables the emulation of italic or bold font style.

 
 

CheckCollection

Checks whether a PDF collection contains invalid fields.

 
 

CheckConformance

Checks whether the PDF file conforms to PDF/A 1b.

 
 

Create3DAnnot

Creates a 3D annotation from an U3D file.

 
 

Create3DBackground

Sets the background color of a 3D annotation.

 
 

Create3DGotoViewAction

With a Go To View Action you can dynamically change the view of a 3D annotation.

 
 

Create3DProjection

A 3D projection sets important properties such as camera position or zoom factor.

 
 

Create3DView

Creates a new view for a 3D annotation.

 
 

CreateColItemDate

Creates a user defined date field in an embedded file.

 
 

CreateColItemNumber

Creates a user defined number field in an embedded file.

 
 

CreateColItemString

Creates a user defined text field in an embedded file.

 
 

CreateCollection

Creates a PDF Collection, also knows as PDF Packet.

 
 

CreateCollectionField

Creates a user defined field in a PDF Collection.

 
 

CreateExtGState

Creates an extended graphics state, e.g. to change the overprint mode.

 
 

CreateGoToActionEx

Creates a Go To Action by using a named destination as destination.

 
 

CreateGoToRActionEx

Creates a Go To Remote action by using a named destination as destination.

 
 

CreateNamedDest

Creates a named destination.

 
 

CreateSigFieldAP

Creates a user defined appearance for a signature field.

 
 

EnumDocFonts

Enumerates all fonts used in a document.

 
 

EnumHostFontsEx

Enumerates available fonts incl. certain font properties.

 
 

FileAttachAnnot

Attaches a file to the document.

 
 

GetDocInfoCount

Returns the number of available document information entries.

 
 

GetDocInfoEx

Returns a document information entry incl. user defined keys.

 
 

GetEmbeddedFile

Returns an embedded file.

 
 

GetEmbeddedFileCount

Returns the number of embedded files in the document.

 
 

GetFieldGroupType

Returns the base field type of a field group.

 
 

GetFieldHighlightMode

Returns the highlight mode of a field.

 
 

GetFont

Fills a structure with most important font properties.

 
 

GetGStateFlags

Returns the current flags relating to the graphics state handling.

 
 

GetInDocInfoCount

Returns the number of document info entries of the currently opened PDF file.

 
 

GetInDocInfoEx

Returns a document info entry of the currently open PDF file.

 
 

GetInEncryptionFlags

Returns the encryption flags of the currently opened PDF file.

 
 

GetInIsCollection

Returns true if the currently opened PDF file is a PDF Collection.

 
 

GetInIsEncrypted

Returns true if the currently opened PDF file is encrypted.

 
 

GetJavaScriptName

Returns the name of a global JavaScript.

 
 

GetMatrix

Returns the current transformation matrix.

 
 

GetSpaceWidth

Returns the space width or a default value if the font contains no space character.

 
 

GetTextWidthEx

Returns the width of a string with a specific length.

 
 

GetTrapped

Returns the value of the Trapping property.

 
 

ImportCatalogObjects

Imports global objects of a PDF file like JavaScripts, Bookmarks and so on.

 
 

ImportDocInfo

Import the document info of the currently opened PDF file.

 
 

InitExtGState

Initializes an extended graphics state structure with default values.

 
 

LoadFont

Loads a font from a file buffer (TTF, TTC, OpenType, and Type1 font files PFB or PFA).

 
 

OpenOutputFile

Opens the output file into which the PDF file should be saved.

 
 

PageLink2

Creates a page link by using a named destination as destination.

 
 

ParseContent

Parses the contents of page, template, or patter.

 
 

PlaceSigFieldValidateIcon

Places the validation icon within a signature field.

 
 

SetAnnotSubject

Sets or changes the subject property of an annotation.

 
 

SetColDefFile

Sets the initial embedded file of the Collection that should be opened in the viewer.

 
 

SetColSortField

Sets the field by which the collection should be sorted.

 
 

SetDocInfoEx

Sets a document information entry. User defined keys are supported.

 
 

SetExtGState

Activates an extended graphics state.

 
 

SetFieldBBox

Changes the bounding box of a field.

 
 

SetFieldFontSize

Changes the font size of a field.

 
 

SetFieldHighlightMode

Changes the highlight mode of a field.

 
 

SetFillColorSpace

Sets the color space for fill colors.

 
 

SetFontEx

Tries to load a PDF font by using the Family- and PostScript name.

 
 

SetGStateFlags

Sets specific flags related to the graphics state handling.

 
 

SetListFont

Sets the font to display a list symbol -> used by WriteFText().

 
 

SetOrientationEx

Changes the orientation of a page incl. the coordinate system and page properties.

 
 

SetStrokeColorSpace

Sets the color space for stroke colors.

 
 

SetTrapped

Sets the trapping property of the document.

 
 

TranslateString

Converts a binary string returned by GetPageText() or ParseContent() to Unicode.

 
 

WriteTextEx

Prints a text of a specific length.

 
 

WriteTextMatrixEx

Prints a text of a specific length by using a transformation matrix.

 
 

Version 2.0.16.197

 

 
 

Bugfix

Description

 
 

CloseFileEx()

Content streams were encrypted with a wrong object number in version 2.0.12.192; the resulting PDF file was damaged due to this error.

 
 

EMF-Import

BeginPath() did not reset a previously drawn text path so that the text was printed again if another path was filled, stroked, or both.

DynaPDF merges now 200 MoveTo/LineTo calls each into one block. This results in more efficient PDF files and the file size can be reduced.

 
 

ImportPDFFile()

Due to required changes in the function ImportPage() in version 2.0.12.192, PDF pages which contains a non-normalized media box could not be properly imported, as long as the flag ifImportAsPage was not set.

 
 

New Functions

Description

 
 

FindField()

This function searches for field by using the fully qualified field name and returns the field handle on success.

 
 

ExchangePages()

The function exchanges two pages. The destinations of page links and GoTo Actions are still valid after the function was called.

 
 

MovePage()

This function moves a page to a another position within the page array. If the destination page is greater than the number of pages in the document, then the function creates empty pages until the destination page becomes valid. The destinations of page links and GoTo actions are still valid after the function was called.

 
 

SetLineDashPatternEx()

This function accepts an array of double instead of a string.

 
 

Version 2.0.12.192

   
 

Bugfix

Description

 
 

EMF import

Under certain circumstances the text color could be changed to the background color.

Due to a bug in the viewport calculation the coordinate calculation could fail if another mapping mode than MM_ANISOTROPIC was used.

Clipping paths were wrongly processed.

The RGB to CMYK conversion routine contained an error since version 2.0.12.180.

Space characters could be removed during conversion especially if the flag TA_UPDATECP was set.

1 Bit Images in StretchBlt() records were not inserted transparent.

 
 

ImportPage()

Imported PDF pages which contained a non-normalized media box could not correctly placed and scaled onto a page.

 
 

ImportPDFFile()

Fields with identical names were not properly imported. Under certain circumstances DynaPDF identified combo boxes as list boxes and changed the field type during import.

 
 

PDF import

PDF files which contained numbers smaller 1 without a leading zero (e.g. .005, -.5) could not be properly imported.

In addition, it was not possible to import a document that contained a document ID that was not 16 bytes long. The document ID is a 16 byte MD5 hash, it is only required if the document is encrypted.

 
 

Get/SetUseGlobalImportFiles()

Both function names were misspelled.

 
 

WriteAngleText()

The property font origin was changed to orDownLeft within the function.

 
 

WriteFText()

The calculation of the output rectangle was wrong if bottom-up coordinates were used. In addition, an unnecessary page break was raised under certain circumstances.

 
 

New Functions

Description

 
 

AddRenderingIntent()

The function embeds an ICC profil in the PDF file. An embedded ICC profile is required to create PDF/A or PDF/X compliant PDF files.

 
 

ChangeLinkAnnot()

The function changes the URL or file path of a web link or file link annotation.

 
 

FindLinkAnnot()

This function searches a web link or file link annotation.

 
 

GetAnnotLink()

The function returns the URL or file link of a web link or file link annotation.

 
 

GetInOrientation()

The function returns the orientation of a specific page in the currently opened import file.

 
 

ImportBookmarks()

This function can be used to imports the outline tree of a PDF file independent from the document.

 
 

InsertMetafileFromHandle()

This function converts an EMF file from an HENHMETAFILE handle to native PDF vector graphics.

 
 

InsertMetafileFromHandleEx()

Same as  InsertMetafileFromHandle() but accepts an additional parameter to zoom into a specific area of an EMF file.

 
 

SetUseSwapFileEx()

In contrast to SetUseSwapFile() the output directory of the temp file can be specified in this version.

 
 

EMF conversion

The EMF converter has been further improved and it is now able to remove unnecessary records completely. In addition, unnecessary MoveTo/LineTo are removed and Bezier curves are stored in a more compact format whenever possible.

Single characters are merged horizontally to complete strings; this reduces the output file size significantly.

It is now also possible to scale all coordinates to the output window size. This technique avoids floating point overflows in PDF viewer applications when high resolution EMF files are converted to PDF, especially if the EMF file uses 32 bit coordinates. The output file size can also be reduced because fully scaled coordinates are usually smaller than high resolution coordinates.

 
 

PDF/A and PDF/X compatibility

DynaPDF is now able to create PDF/A and PDF/X compliant PDF files.

 
 

JPEG2000 compression

(experimental)

DynaPDF supports now JPEG2000 compression over all image input image formats. In addition, decoders for the image formats JP2, JPC, and PGX were added to DynaPDF.

However, JPEG2000 compression requires in comparison to other compression filters very much CPU time and the usage is more complicated because it not possible to use default compression quality level that produces good results with most images. Due the limitations this filter is marked as experimental.

 
 

Version 2.0.8.167

   
 

Bugfix

Description

 
 

ImportPDFFile()

List boxes were sometimes identified as combo boxes so that the field type was changed during import.

 
 

SetFont()

Acrobat 3 does not display embedded TrueType fonts if the name table does not contain font names for the language ID 0x0409 (English American). DynaPDF did not create names for this language ID so that it is was impossible to view such fonts with Acrobat 3.

 
 

Version 2.0.8.166

   
 

Bugfix

Description

 
 

SetFont()

The cap height could be zero if the typographic ascender of a TrueType font was not set. Adobe's Acrobat viewer applications do not depend on the cap height.

 
 

Version 2.0.8.164

   
 

Bugfix

Description

 
 

Shadings

Shadings produced a damaged PDF file due to changes in a color function in version 2.0.7.163.

 
 

ImportPDFFile()

Rendering Intents were encrypted by using a wrong object number.

 
 

New functions

Description

 
 

ChangeJavaScriptName()

This function can be used to change the name of a global JavaScript.

 
 

GetInIsSigned()

This function checks whether a PDF file contains a digital signature.

 
 

Version 2.0.7.163

   
 

Bugfix

Description

 
 

EMF conversion

DynaPDF did not rotate text that was printed with the undocumented record type EMRSMALLTEXTOUT.

 
 

New functions

Description

 
 

ReadImageResolution()

This function retrieves the resolution of an image. Note that the resolution of an image file is a user defined value. Not all image formats support a record to store the resolution; the function sets the resolution to zero in the latter case.

 
 

ReadImageResolutionEx()

Same as ReadImageResolution(); this version accepts an image buffer as input.

 
 

Version 2.0.6.162

   
 

Bugfix

Description

 
 

EMF conversion

Colors of the system palette were not properly identified.

Due to a bug in a color conversion function it was impossible to use the color space DeviceCMYK.

 
 

Version 2.0.6.161

   
 

Bugfix

Description

 
 

Interactive Forms

Fields with identical field names were not supported. All functions to create fields were extended so that such fields can be successfully created.

With Adobe's Designer created PDF files use often Unicode strings for field names. Because of this the functions GetField(), GetPageFiel() and GetFieldName() must be extended so that Unicode names can be processed. C/C++ and Delphi users must check the string length with strlen() to determine whether the field name is an ANSI or Unicode string. The field name is an Unicode string if strlen(f.FieldName) != f.FieldNameLen.

Interactive Forms created by Adobe's could not be properly imported if the flag ifImportAsPage was not set. It was also possible that FlattenForm() produced an Exception if such a form should be flattened.

 
 

EMF conversion

DynaPDF did not check for open paths before processing the EMF record EMRSMALLTEXTOUT. The PDF file was damaged if an open path occurred before this record type.

Images were wrongly cropped and appeared on a wrong position if the world coordinate system of the reference DC contained a translation or scale.

The start or end angle of an arc, pie, or chord was wrongly calculated if the angle was nearly 90, 180, 270, or 360 degrees. DynaPDF must round the angle to the nearest integer value to get correct results.

The handling of 1 bit images has been changed:

DynaPDF prints such images now always transparent as long as they must not be converted to RGB due to the used background or foreground color. This results mostly in a much better output. However, because DynaPDF does still not support raster operation codes, the result is not always predictable.

 
 

PDF output

The used Quicksort algorithms of DynaPDF could produce a buffer overrun. An error has never been reported but it was theoretical possible that an exception occurred during font selection or when the PDF file was created.

 
 

IsColorPage()

The function could not identify vector graphics and text as color objects if the used color was an ICC based color space.

 
 

Version 2.0.6.160

   
 

Bugfix

Description

 
 

PDF import

Documents which use global page resources could not be properly imported. Such documents are not created by Adobe products.

 
 

IsEmptyPage(), IsColorPage()

Both functions ignored images which were inserted with DynaPDF functions as long as the document was not saved and imported again. These functions were developed to check imported pages. That people use them to check pages e.g. after an EMF file was inserted was not considered.

 
 

Version 2.0.6.159

   
 

Bugfix

Description

 
 

TrueType fonts

Due to changes in the embedding algorithm of TrueType glyphs the space character could be replaced by an arbitrary character.

 
 

Version 2.0.6.158

   
 

Bugfix

Description

 
 

PDF import

DynaPDF was unable to decrypt PDF files if the flag EncryptMetaData was set to false (PDF 1.5 or higher).

With Adobe's Designer created Interactive Forms share form fonts with normal page contents. This caused errors because it is not allowed to share form fonts with page contents in older versions of Adobe's Acrobat.

A memory leak occurred if the optional mapping name of fields was set.

Global javascripts were sorted before they were written to the file. This caused errors if a specific execution order was required, e.g. to initialize variables.

 
 

EMF conversion

Complex clipping regions were not properly applied if the graphics state was saved and restored more than one time within a clipping region.

The bitmap of a monobrush was mirrored vertically.

 
 

Text fields

The font size of text fields was not properly calculated if the font size was set to "auto". The text appeared too large if the string width was larger than the the field width.

 
 

New Functions

Description

 
 

Get/SetCheckBoxDefState()

This property enables the creation of checkboxes with a different default state as visible when the form is opened in Adobe's Acrobat.

 
 

Version 2.0.5.157

 

 
 

Bugfix

Description

 
 

EMF conversion

Due to changes in the font handling in version 2.0.5.155 an out of memory exception could occur if a font could not be found.

Not all properties of a brush and pen were restored with the EMF record RestoreDC.

 
 

Version 2.0.5.156

   
 

Bugfix

Description

 
 

EMF conversion

DynaPDF did not check for open paths when the EMF record RestoreDC was applied. Such open paths could then appear in wrong colors and line width.

IntersectClipRect records restored a previously created clipping region instead of creating an intersection.

 
 

Version 2.0.5.155

 

 
 

Bugfix

Description

 
 

EMF conversion

The font size of stockfonts was not properly scaled if the scaling factor or the viewport was < 1.0.

DynaPDF prefers now TrueType fonts for stockfonts if available; this results in better output.

The optional clipping rectangle within text records is not longer ignored.

ExtCreateFont records were ignored if the font name was not set, this is wrong. The font properties are used if a text is printed without setting a font.

 
 

Version 2.0.5.154

   
 

Bugfix

Description

 
 

EMF conversion

Text that was printed with the undocumented EMF record EMRSMALLTEXTOUT was not transformed with the transformation matrix and viewport.

 
 

Version 2.0.5.152

   
 

New Functions

Description

 
 

Get/SetFieldMapName()

Optional mapping name that is used when exporting form data to a web server.

 
 

Bugfix

Description

 
 

EMF conversion

DynaPDF checks for duplicate images during EMF conversion to avoid embedding of identical images multiple times. The duplicate checking based on a MD5 hash that is created from the image data. To improve processing speed DynaPDF used not the entire image buffer to create the hash, that caused that in the worst case an image could be replaced with another one. DynaPDF uses now the entire image puffer to create the hash to avoid problems with the duplicate checking.

The text alignment was not restored with the current graphics state. This could cause problems if the alignment was not set before printing a text.

The EMF record StrokePath closed a previously painted path.

The intercharacter spacing array of text records is now calculated with an error of 10 font units; this results in more compact string output.

 
 

Version 2.0.4.146

 
 

New Functions

Description

 
 

CloseAndSignFile()

Function to digitally sign a PDF file.

 
 

CloseAndSignFileEx()

Function to digitally sign and encrypt a PDF file.

 
 

CreateSigField()

Function to create an empty signature field.

 
 

GetDynaPDFVersion()

Returns the DynaPDF version string.

 
 

Get/SetFieldBorderWidth()

Border width of interactive forms fields.

 
 

Get/SetFieldOrientation()

This property can be used to rotate fields.

 
 

HaveOpenDoc()

Checks whether an open PDF file is in memory.

 
 

Bugfix

Description

 
 

Changed font handling

Acrobat 6/7 did not export embedded TrueType fonts if the flag "Convert TrueType fonts to Type1" was not enabled. The new Acrobat versions export TrueType fonts only if they are organized in a very special way.

 
 

EMF conversion

An exception could occur if 256 color images were downscaled to the wished resolution.

New Coordinate logic:

DynaPDF does not longer store coordinate transformations in the resulting PDF file. This avoids problems if very complex transformations are applied. The new coordinate logic is absolutely safe. Especially clipping regions cannot longer produce coordinate problems.

 
 

All image functions

The color table of bitmaps and DIBs was not properly converted from BGR to RGB. Such images could then appear in wrong colors.