./print/podofo, Library to work with the PDF file format

[ Image CVSweb ] [ Image Homepage ] [ Image RSS ] [ Image Required by ] [ Image Add to tracker ]


Branch: CURRENT, Version: 1.0.2nb2, Package name: podofo-1.0.2nb2, Maintainer: pkgsrc-users

PoDoFo is a library to work with the PDF file format. The name
comes from the first letter of PDF (Portable Document Format). A
few tools to work with PDF files are already included in the PoDoFo
package.

The PoDoFo library is a free, portable C++ library which includes
classes to parse PDF files and modify their contents into memory.
The changes can be written back to disk easily. The parser can also
be used to extract information from a PDF file (for example the
parser could be used in a PDF viewer). Besides parsing PoDoFo
includes also very simple classes to create your own PDF files.
All classes are documented so it is easy to start writing your own
application using PoDoFo.


Required to run:
[graphics/tiff] [graphics/freetype2] [graphics/png] [graphics/jpeg] [fonts/fontconfig] [devel/libidn] [textproc/libunistring]

Master sites:

Filesize: 3280.705 KB

Version history: (Expand)


CVS history: (Expand)


   2026-01-07 09:49:50 by Thomas Klausner | Files touched by this commit (2525)
Log message:
*: recursive bump for icu 78.1
   2026-01-03 12:31:31 by Thomas Klausner | Files touched by this commit (1)
Log message:
podofo: fix pkgconfig file

Bump PKGREVISION.
   2025-11-10 14:53:33 by Thomas Klausner | Files touched by this commit (10) | Package removed
Log message:
podofo: update to 1.0.2.

Tools have been obsoleted upstream, pkgsrc follows suit.

## Version 1.0.2
- Fixed [#275](https://github.com/podofo/podofo/issues/275), \ 
[#276](https://github.com/podofo/podofo/issues/276)
- `PdfTokenizer`: Fixed free-after-use after failing to parse content while \ 
reading literal tokens
- `PdfFont`: Improved heursitic for word spacing
- `PdfDifferenceEncoding`: Fixed handling of ligatures in AGL character names
- `PdfXMPPAcket`: Make `GetDescription()` const correct
- `PdfMemDocument`: Fixed upgrade to PDF2.0 in a incremental update

## Version 1.0.1
- Fixed [#265](https://github.com/podofo/podofo/issues/265), \ 
[#264](https://github.com/podofo/podofo/issues/264)
- Fixed several issues related to use of `nullable<std::unique_ptr<T>>`
- XMP: Fixed removing extension from extension bag
- XMP: Fix double inserting pdfuaid schema
- Text extraction fixes: improved word spacing heuristic, space trimming in \ 
ligatures, text in XObject form with non identity matrix
- Fixed pkg-config for shared built library

## Version 1.0.0

- Added support for Type1, CFF and OpenType CFF font subsetting
- Added support for Type3 font subsetting (no encoding subsetting, yet)
- Implemented full "Adobe Glyph List" specification \ 
(https://github.com/adobe-type-tools/agl-specification) for text extraction and \ 
glyph selection
- Implemented full Type1, TrueType font glyph selection
- Many fixes in TrueType legacy subsetting
- Added support for PDF/UA preserving when adding annotations/form fields
- Improved PDF/A preserving (eg. when PDF/UA level is set as well in the XMP \ 
metadata)
- Added support for automatically rotating imported images drawn on a `PdfPainter`
  when a orientation is detected in the source image codec metadata. Currently \ 
supported
  on Tiff images only (Jpeg exif metadata support pending)
- Added high-level signing API, see `PdfSignerCMS` and \ 
[`TestSignature1`](https://github.com/podofo/podofo/blob/edbcb16a5b18cb20f1d0da1724639cee13608436/test/unit/SignatureTest.cpp#L37) \ 
test case
- Added support for signing encrypted documents
- Added support for preserving encryption among savings
- Removed Libidn dependency, default to AESV3R6 encryption
- Added support for predefined CMap(s) for improved CJK text extraction
- Added much better CMake \ 
[integration](https://github.com/podofo/podofo?tab=readme-ov-file#consume-podofo-from-package-managers-with-cmake)
- Added raw rectangle corners retrieval in `PdfAnnotation`, `PdfPage`
- `PdfDocument`: Added `GetFieldsIterator()`
- `PdfPage`: Added `GetFieldsIterator()`
- `PdfSignature`: Added `TryGetPreviousRevision()`
- `PdfCanvas`: Added `CopyContentsTo()`
- `FileStreamDevice` now uses again C stdio for better performance
- `PdfName`:
  * Optimized for struct size and construction from string const literal
  * Added `PdfName operator""_nm(const char*, size_t)`
- `PdfString`:
  * Optimized for struct size
  * Added `std::string&&` constructor
- `PdfVariant`: Optimized for accessing `PdfString`, `PdfName` and `PdfReference`
- Reviewed `PdfFileSpec`, `PdfAction`, `PdfDestination` API and their usage in
`PdfOutlineItem`, `PdfOutlines`, `PdfAnnotationActionBase`, `PdfAnnotationLink`, \ 
`PdfAnnotationFileAttachment`
- Reviewed `PdfExtension` API
- Reviewed `PdfNameTree`, renamed to `PdfNameTrees` and added `PdfNameTree` to \ 
pick specific trees with typed element
- Reviewed `PdfExtGState`
- Reviewed `PdfTilingPattern`, `PdfShadingPattern`, `PdfFunction`: the API now \ 
exposes the full capabilities of the PDF specification
- `PdfEncrypt` is now stateless: added `PdfEncryptContext` as a
   separate state context and used as argument in `PdfEncrypt` methods
- Set `PdfSignature` to have correct `/ByteRange` and `/Contents` after signing \ 
with `PoDoFo::SignDocument`
- Added `PdfNames` and moved all known names there from `PdfName`
- `PdfPageCollection`: Methods creating pages now takes `PdfPageSize` or default \ 
inferred size from doc
- Fixed `PdfStreamedDocument`, see #88
- Tons of API improvements (see \ 
[API-MIGRATION.md](https://github.com/podofo/podofo/blob/master/API-MIGRATION.md))
- Tons of other bug fixes

## Version 0.10.5
- Fix [#191](https://github.com/podofo/podofo/issues/191), \ 
[#197](https://github.com/podofo/podofo/issues/197),
  [#201](https://github.com/podofo/podofo/issues/201), \ 
[#212](https://github.com/podofo/podofo/issues/212),
  [#233](https://github.com/podofo/podofo/issues/233), \ 
[#241](https://github.com/podofo/podofo/issues/241),
  [#251](https://github.com/podofo/podofo/issues/251), \ 
[#252](https://github.com/podofo/podofo/issues/252),
  [#253](https://github.com/podofo/podofo/issues/253)
- `PdfParser`: Fixed stack overflow parsing documents with many XRef stream updates
- `PdfFont`: Fixed `GetBoundingBox()` retrival
- `PdfFontMetricsObject`: Fixed reading `/FontBBox`
- `PdfEncodingFactory`: Fixed parsing of limits with `/FirstChar` equals to \ 
`/LastChar`
- `PdfFontMetricsStandard14`: Fixed parsing /Widths
- `PdfMetadata`: Fixed missing init ensure for SetAuthor()
- `PdfTokenizer`: Fixed character escaping when reading strings
- `PdfPageCollection`: Fix memory leak in `RemovePageAt`
- Compilation and linking fixes in various conditions
- `PdfFontManager`: Fixed GetOrCreateFontFromBuffer stealing memory
- `PdfPageCollection`: Disable copy/assignment
- `PdfPage_TextExtraction`: Fix `decodeString` with no font
- Fix eating of non-space chars in `SplitTextAsLines`
- Fix FreeType segfault race condition
- `PdfCheckBox`: Fixed `IsChecked()`
- `PdfParser`: Uncondtionally try to read XRef stream in all PDFs that doesn't \ 
have a cross reference section

## Version 0.10.4
- Fixes [#161](https://github.com/podofo/podofo/issues/161), \ 
[#162](https://github.com/podofo/podofo/issues/162),
[#167](https://github.com/podofo/podofo/issues/167), \ 
[#183](https://github.com/podofo/podofo/issues/183),
merges [#157](https://github.com/podofo/podofo/issues/)
- `StandardStreamDevice`: Fixed `seek()` in case of `iostream`/`fstream`
- `PdfWriter`: Fixed computing the doc identifier with a wrong buffer
- `PdfPainter`: Fix `SetCurrentMatrix()` to really update CTM
- Fixed compilation in mingw < 12
- `PdfCIDToGIDMap`: Fixed map reading
- `PdfPainter`: Fixed offset on multiline text if text is not left aligned

## Version 0.10.3
- Fixed big performance regression introduced in 0.10, see \ 
[#108](https://github.com/podofo/podofo/issues/108)
- Fixed data loss with encrypted documents, see \ 
[#99](https://github.com/podofo/podofo/issues/99)
- Fixed compilation with VS2022 >= 17.8
- Fixed compilation using libxml >= 2.12.0

## Version 0.10.2
- Security related bugfixes [#76](https://github.com/podofo/podofo/issues/76),
[#89](https://github.com/podofo/podofo/issues/89),
[#96](https://github.com/podofo/podofo/issues/96)
- Some compilation and test fixes

## Version 0.10.1
- Security bugfixes, [#66](https://github.com/podofo/podofo/issues/66), \ 
[#67](https://github.com/podofo/podofo/issues/67),
[#69](https://github.com/podofo/podofo/issues/69), \ 
[#70](https://github.com/podofo/podofo/issues/70),
[#71](https://github.com/podofo/podofo/issues/71), \ 
[#72](https://github.com/podofo/podofo/issues/72)
- Rewritten `PdfPageCollection` for performance
- `PdfCMapEncoding`: Fix parsing some invalid CMap(s) supported by Acrobat
- `PdfXRefStreamParserObject`: Fixed handling of invalid XRef stream entries
- Support compilation of the library header (not the library itself) with C++20

## Version 0.10.0
- `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
- `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)`

## Version 0.9.22 (pdfmm)
- 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)

## Version 0.9.21 (pdfmm)
- Fixed serialization of UTF-16BE strings
- More lenient `PdfDate` parsing

## Version 0.9.20 (pdfmm)

- 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
- `PdfString` backed with UTF-8 storage
- `PdfName` backed with UTF-8 storage
- Brand new P`dfEncoding` 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`: Reviewed/convert `GetKey` -> `FindKey`
- `PdfDictionary`: Reviewed `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: removed `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
- `PdfIndirectObjectList`: `GetParentDocument()` -> `GetDocument()`
- Remove `PdfSignOutputDevice::SetSignatureSize(size)`
- Moved inline code to .cpp
- Remove comments on overrides
- Cleaned CMakeFiles (removed custom Find<>.cmake)
- `NULL` -> `nullptr`
- Use `std::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
- Removed `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()`
- Reviewed `PdfWriteFlags`, added `PdfSaveOptions`
   2025-08-31 00:46:51 by Thomas Klausner | Files touched by this commit (1355)
Log message:
*: recursive bump for tiff growing lerc dependency
   2025-08-14 18:03:58 by Greg Troxel | Files touched by this commit (3)
Log message:
print/podofo: Apply duct tape to cmake stuff, for 4.x

Fix two reasons why this package failed to build With cmake 4:
  - Instead of patching cmake min from 2.6 to 3.1, choose 3.22.
  - A makefile was created twice.  cmake 4 objects, seeming likely to
    be catching a real error.  Add APPEND to the second export, hoping
    that's ok.

In both cases, don't worry about the details because this package
needs updating anyway.
   2025-08-14 14:12:29 by Greg Troxel | Files touched by this commit (1) | Package updated
Log message:
print/podofo: Update HOMEPAGE

podofo has moved to github.  Adjust HOMEPAGE and leave note that it
needs updating to 1.0.1, which needs c++17.

podofo 0.9.8 doesn't build with cmake 4, but as it needs an update
anyway which might avoid that (because upstream might have fixed the
bug or performed a cmake exorcism), that isn't fixed in this commit.
   2025-04-24 16:16:37 by Thomas Klausner | Files touched by this commit (2412)
Log message:
*: recursive bump for jpeg -> libjpeg-turbo switch
   2024-08-25 08:19:21 by Thomas Klausner | Files touched by this commit (575)
Log message:
*: replace CMAKE_ARGS with CMAKE_CONFIGURE_ARGS