pdfmm v0.9.20 Release Notes

    • pdfmm is now a C++17 library
    • ➕ Added move semantics for PdfVariant, PdfObject, PdfArray, PdfDictionary
    • 👌 Improved XRefStream support, added support in incremental saves
    • 🛠 Many fixes in save incremental object/generation number incrementing
    • String backed with UTF-8 storage
    • PdfName backed with UTF-8 storage
    • 👍 Brand new PdfEncoding class with support for both /Encoding and /ToUnicode, more complete Unicode support
    • ➕ Added a PdfDynamicEncoding class that creates a custom CID encoding based on actual used glyphs used
    • Automatic creation of CIDMap and /ToUnicode
    • ➕ Added PdfSigner class and mm::SignDocument()
    • ➕ Added PdfFontType1Encoding, which support Type1 implicit encoding
    • ➕ Added support for PDF 2.0 UTF-8 strings (untested)
    • ➕ Added indirect iteration for PdfArray/PdfDictionary (see GetIndirectIterator methods)
    • ➕ Added PdfDocument::GetPdfALevel()
    • ➕ Added PDFA preserving writing
    • 🔨 Refactored/Reviewed PdfInputDevice: versions that take buffer do not copy it (use istringviewstream)
    • ➕ Added font replacement facility PdfFont::TryCreateFontSubstitute()
    • ➕ Added standard14 fonts embedding, with font programs from PDFium
    • Reviewed PdfXObject hierarchy, added PdfXObjectForm, PdfXObjectPostScript
    • ➕ Added PdfTextState and use it to compute string widths in PdfFont
    • 👌 Improved PdfDocEncoding to expose conversion utf8 conversion facilities
    • 📜 PdfParser: Support also files with whitespace offset before magic start
    • PdfObject auto ownership
    • PdfContents: create on demand /Contents. First create a single stream, after array
    • 👌 Improved IsDirty handling: less dirty bit sets
    • ➕ Added PdfPostScriptTokenizer that as better general support for PostScript
    • PdfDictionary: Review/convert GetKey -> FindKey
    • PdfDictionary: Review GetKeyAs methods
    • 🛠 Fixed hundreds of warnings. No warnings left in tested builds
    • 🔧 FontConfigManager: better handling with custom configurations
    • ✂ Removed PdfMutex. Used std::mutex where necessary
    • 🚚 Datatypte: remove PdfDataType::HexString
    • ✂ Removed support for old compilers (MSVC6, hpux, borland, turbo...)
    • ➕ Added better endian swap functions
    • ✂ Removed auto_ptr usage
    • Removed pdf_int/pdf_uint types
    • ✂ Removed use of pdf_long/long types
    • ✂ Removed use of ptrdiff_t
    • ✂ Removed unistring and ugly string conversion code. Moved to utfcpp
    • Reviewed PdfObject::GetNumber/PdfObject::GetReal (strict/lenient)
    • ✂ Remove PdfObject inheritance on PdfVariant
    • Reviewed PdfVariant/PdfObject/PdfArray/PdfDictionary equality/disequality operators
    • Simplified copyright headers
    • Object copy constructor must copy also stream
    • PdfElement: GetDocument(), GetObject() refs
    • PdfVecObjects: GetParentDocument() -> GetDocument()
    • ✂ Remove PdfSignOutputDevice::SetSignatureSize(size)
    • 🚚 Moved inline code to .cpp
    • ✂ Remove comments on overrides
    • 🚚 Cleaned CMakeFiles (removed custom Find<>.cmake)
    • NULL -> nullptr
    • 👉 Use shared_ptr in PdfFontMetrics, PdfEncoding in PdfFont
    • 🚚 Cleaned PdfFontCache (renamed PdfFontManager), removed font functions from PdfDocument
    • PdfArray::FindAt() return ref
    • Simplified license headers
    • Reviewed PdfPageTree and PdfPageTreeCache API
    • Reviewed most int vs unsigned indexing
    • ✂ Remove all hungarian notation
    • 💅 Sanitize code style
    • Removed all const char* and passed to string/string_view
    • 📇 Renamed PdfFontCache -> PdfFontManager
    • 📇 Renamed PdfVecObjects -> PdfIndirectObjectList
    • 📇 Renamed PdfNamesTree -> PdfNameTree
    • 📇 Renamed PdfPagesTree -> PdfPageTree
    • 📇 Renamed PdfPagesTreeCache -> PdfPageTreeCache
    • 🚚 PdfObject: removed GetIndirectObject(), MustGetIndirectKey (must use PdfDictionary now)
    • 🆕 Remove PdfMemoryManagement.cpp, Removed podofo_new, podofo_free
    • ➕ Add chars type for char array storage/buffering which inerits string
    • Review pointer vs ref parameters/return types
    • ✂ Remove PdfRefCountedBuffer, PdfRefCountedInputDevice, PdfRefCountedOutputDevice
    • ✂ Removed PdfMemoryManagement and all C style malloc/free usage
    • 🔨 Refactored PdfOutputDevice (PdfMemoryOutputDevice/PdfFileOutputDevice/etc.)
    • 🚚 Clean PdfError, remove wchar_t
    • ✂ Remove printf, snprintf
    • 📇 Renamed PdfElement-> {PdfDictionaryElement|PdfArrayElement} that respectively have GetDictionary(), GetArray()
    • Reviwed PdfWriteFlags, added PdfSaveOptions