> For the complete documentation index, see [llms.txt](https://docs.apryse.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.apryse.com/core/changelogs/version-6/6-9.md).

# Version 6.9.0 Changelog (2018-11-05)

World's #1 PDF SDK Library for Web, Mobile, Server, Desktop

### New Features

* PDFA Validation and Conversion have been overhauled to provide output much more compatible with VeraPDF and the PDF/A specifications/technical notes (see "Appendix: Full List of PDF/A Changes" below).
* XOD files are generated with built-in annotation appearance streams. This allows WebViewer 4.0+ to render annotations containing these streams as they appear in other PDF viewers.
* Added an option to PDFViewCtrl.OpenUrl which will restrict download usage. This is largely to reduce data usage/bandwidth, but can also be used for security reasons.
* Added the Convert::streamingPDFConversion method, for page-by-page streaming conversion of many file types to PDF.

### Improvements and Bugfixes

* Performance improvements for documents that have been opened directly from memory.
* More accurate bounding boxes for many annotation types
* Rendering accuracy improvements for nested transparency groups.
* Greatly reduced memory usage when converting XLSX to PDF.
* Lots of improvements and fixes to Office to PDF conversion outputs.
* More robust: improved handling of badly formed xref tables, page trees, fonts and file streams.
* Opacity support for fileattachment annotations.
* Many other miscellaneous bug fixes.

### Appendix: Full List of PDF/A Changes

1. We now expect the value of the N key to be an appearance subdictionary in Widget Button annotation AP dictionaries in PDF/A-1 mode (in addition to doing so for all the other modes, as we already do); also, we now match improvements made by other vendor(s), who now allow multiple entries in these subdictionaries
2. We now do the q/Q operator nesting limit calculation properly, taking only individual streams' nesting into account
3. Blend mode (BM) is now allowed to be set to "Compatible" in PDF/A-1 mode
4. The entire document is now checked for Metadata object stream dictionaries that contain the Filter key, in accordance with clarification in TechNote 0010 (A017)
5. Checking for equality of the values of the ID keywords between the first page trailer and last trailer dictionaries is only done if the ID keyword is actually present in the first page trailer, in accordance with clarification in ISO 19005-1:2005/Cor.2:2011
6. Added check for DeviceN colorant number implementation limit
7. Fixed dictionary size implementation limit check - used to allow 8190 entries instead of 4095
8. Added checks for real number magnitude implementation limits
9. Added checks for string length implementation limits
10. Added support for XMP metadata encoded in UTF-32
11. Fixed bug that caused crashes while processing PostScript Type 4 functions with invalid numbers of arguments
12. Added check for character identifier (CID) magnitude implementation limits
13. Disallowing OpenType fonts (to match other vendors' behaviour) and unrecognized font subtypes
14. Added check for BaseFont entry for non-Type3 fonts
15. Added checks for FirstChar, LastChar, and Widths entries and validation of their contents for non-standard simple fonts
16. Removed font loading as a validation step, to match other vendors' behaviour
17. Added XMP value type validation
18. Allowed XMP dates to have timezones
19. Added fix for checking colorspace device independence for all referenced colorspaces, not just the ones that are used
20. The presence of PresSteps is now flagged in validation mode too, not just convert mode
21. Page dictionaries with AA keys are now flagged (in PDF/A-2 mode or greater)
22. Limited appearance dictionary (AP) check to Widget annotations, and in PDF/A-2 mode and greater also annotations which have non-zero width and height and are not popups or links
23. Improved checking for "the stream keyword shall be followed either by a CARRIAGE RETURN (0Dh) and LINE FEED (0Ah) character sequence or by a single LINE FEED character"
24. Added a check for empty values of ID keys in file trailer dictionary in PDF/A-2 mode or greater
25. Added a fix for header validation in PDF/A-2 mode or greater: CRLF is now allowed to be used between "%PDF-1.n" and "%bbbb"
26. Added flagging of missing StructTreeRoot for PDF/A-1a, 2a, and 3a
27. Added fix for XMP parsing that allows more thorough syntactical validation
28. More thorough detection of the disallowed usages of transparency (matching what other vendors do)
29. Added fix for page dimensions validation
30. Inconsistent font Widths are now only flagged for embedded fonts
31. Added CharSet string validation for embedded Type1 fonts vis-a-vis font program glyph names
32. Removed XMP amendment (pdfaid:amd) contents validation, matching other vendors' behaviour
33. Updated the default PDF/A version mode from 1B to 2B in both SDK and command-line tool
34. Convert mode no longer outputs both "Z" and "00'00" hour/minute information when fixing dates within the PDF Info dictionary
35. We now only check for correspondence between PDF Info and XMP in PDF/A-1 mode
36. Fixed process colorant handling; Components is now treated as an Array, not a Dict
37. Fixed overprint mode handling to correspond to clarification in TechNote 0010; only the overprint control values in the ExtGState dictionary which correspond to actual use are now considered during validation
38. Default colorspaces are no longer inherited from the page's Resources dictionary, and are only sought within the current Resources, as per clarification with other vendors
39. Convert mode now removes notdefs from page Contents streams
40. Convert mode now replaces invalid UTF-8 strings


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.apryse.com/core/changelogs/version-6/6-9.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
