The release is complete re-imagination of PoDoFo 0.9.x API in C++17, and it's API/ABI incompatible with the previous releases.
Changelog
- PdfPage/PdfAnnotationCollection/PdfAnnotation: Now functions with
rect input assume it to be using the canonical coordinate system
with no rotation - PdfImage: Added support for CYMK jpeg
- PdfParser: Cleaned FindToken2 -> FindTokenBackward
- Renamed base source folder -> main
- PdfPainter: Revamped API, added full state inspection with current point,
added added PdfPainterTextContext to handle text object operations
Use it with PdfPainter::Text instance member.
Added PdfContentStreamOperators low level interface for PdfPainter
moved SmoothCurveTo, QuadCurveTo SmoothQuadCurveTo, ArcTo, Arc,
to an helper structure until cleaned - PdfFontMetrics: Added FilePath/FaceIndex for debugging, when available
- PdfFont: Renamed GetStringLength() overloads with
PdfString to GetEncodedStringLength() - PdfFontManager: Renamed GetFont() -> SearchFont()
Re-Added better GetOrCreateFont() from file/buffer - PdfEncrypt: Cleaned factory methods
- Added PdfArray::FindAtAs(), PdfArray::FindAtAsSafe(), PdfArray::TryFindAtAs(),
PdfArray::GetAtAs(), PdfArray::GetAtAsSafe(), PdfArray::TryGetAtAs() - Added PdfDictionary::FindKeyAsSafe() and PdfDictionary::TryFindKeyAs()
- PdfDictionary::AddKeyIndirect/PdfArray::AddKeyIndirect accepts a reference
- PdfAnnotation/PdfField API review
- PdfDate: Introduced PdfDate::LocalNow() and PdfDate::UtcNow()
and default constructor is epoch time instead - Renamed PdfDocument::GetNameTree() -> GetNames()
- PdfObject: Flate compress on write objects that have no filters
- PdfMemDocument does collect garbage by default when saving
- PdfField/PdfAnntation: Fully reworked the hierarchy
and added proper fields ownership - Added PdfField::GetParent(), PdfField::GetChildren()
- PdfImage: Cleaned/reviewed/fixed SetData()/SetDataRaw()
- Renamed PdfPageTree -> PdfPageCollection
- Added XMP metadata reading/saving. Added PdfMetadata class
- Added text extraction API
- Review I/O API: Merged InputDevice/OutputDevice into StreamDevice.
New hierarchy deriving StreamDevice - Reviewed PdfObjectStream API: added streaming operations,
GetInputStream(), GetOutputStream(). Renamed
GetFilteredCopy() -> GetUnwrappedCopy()/UnwrapTo().
They only unwrap non media filters (see PdfImage::DecodeTo
for media ones). Added proper copy and move assignment operators - PdfImage: Added DecodeTo(pixelFormat)
From pdfmm 0.9.22
- Fixed serialization of strings with non ASCII PdfDocEncoding
characters - Removed PdfLocaleImbue
- PdfEncrypt: Removed PdfReference state. Added PdfStatefulEncrypt
- Removed use of std::ostringstream. Added efficient outstringstream
- Added PdfMath functionalities (matrix transformations and so on)
From pdfmm 0.9.21
- Fixed serialization of UTF-16BE strings
- More lenient PdfDate parsing
From pdfmm 0.9.20
- The project 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 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
- 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