You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@pdfbox.apache.org by "sz5000 (via GitHub)" <gi...@apache.org> on 2026/04/21 14:51:18 UTC

[PR] TTFSubsetter: add support for custom cmap subtables via addCustomCmapEntry() / addCustomCmap() [pdfbox]

sz5000 opened a new pull request, #446:
URL: https://github.com/apache/pdfbox/pull/446

   ## Summary
   
   Extends `TTFSubsetter` with two new public methods that allow callers to inject custom cmap
   subtables into the subset TTF. This enables correct re-subsetting of TrueType fonts that use
   non-Unicode cmap encodings — in particular fonts produced by Ghostscript with `TT_BIAS=0xF000`,
   where the Mac Roman cmap (platform 1, encoding 0) is the primary rendering cmap used by viewers.
   
   Fixes PDFBOX-XXXXX.
   
   ---
   
   ## Changes
   
   **`TTFSubsetter.java`**
   
   - New field `customCmapEntries` — accumulates entries added via the new API
   - `buildCmapTable()` extended:
     - now produces output even when `uniToGID` is empty (i.e. when only `addGlyphIds()` was used)
     - writes one Format 4 subtable per distinct `(platformId, platformEncodingId)` pair
     - GIDs are translated to renumbered subset GIDs via the existing `getNewGlyphId()` mechanism
   - New private helpers `buildFormat4Subtable()` and `buildFormat4SubtableNewGids()` extracted
     from the previous monolithic `buildCmapTable()` implementation
   - New public method `addCustomCmapEntry(platformId, platformEncodingId, charCode, gid)`
   - New public method `addCustomCmap(platformId, platformEncodingId, Map<Integer,Integer> codeToGid)`
   - Javadoc added for `addGlyphIds()` (previously undocumented)
   
   ---
   
   ## Backwards Compatibility
   
   Fully backwards-compatible. Callers that do not use the new API get identical behaviour to
   the previous implementation.
   
   ---
   
   ## Testing
   
   Verified against PDFs produced by Ghostscript 10.x containing Thai and other non-Latin scripts
   subsetted with `TT_BIAS=0xF000`. Before this change, re-subsetting such fonts produced a TTF
   with a broken or missing Mac Roman cmap, causing viewers to render blank glyphs. After this
   change, both the Mac Roman and Windows Symbol subtables are correctly preserved in the subset,
   and glyph rendering is identical to the original.


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: dev-unsubscribe@pdfbox.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@pdfbox.apache.org
For additional commands, e-mail: dev-help@pdfbox.apache.org