v1.24.0
Gerstep/cybosv1.24.0Sep 23, 2026by abimaelmartell
Upgrading?
AI Summary
This release enhances text extraction accuracy and rendering details by reporting text fill and stroke colors, rendering modes, and decoding a wider range of document information fields. It includes fixes for character encoding issues in titles and refines text extraction logic.
Key Highlights
- TextItem now exposes detailed paint information including fill_color, stroke_color, and render_mode.
- Document information dictionary is now decoded for Author, Subject, Keywords, Creator, Producer, CreationDate, and ModDate.
- Fixes for PDFDocEncoding and UTF-16LE decoding in document titles to prevent mojibake.
- Improved handling of text extraction for the `"` operator.
- Adjusted ActualText span weight calculation based on the paint of the first painted glyph.
Breaking Changes
- Rust literals for TextItem and PdfProcessResult types must now include new fields (fill_color, stroke_color, render_mode, author, etc.).
- Document titles are no longer read as U+FFFD (replacement character) for PDFDocEncoding.
- Titles in UTF-16LE are no longer read as mojibake.
- Text extraction logic now skips the `"` operator and the spacing/line move it makes (previously skipped together).
New Features
- New TextItem properties: fill_color, stroke_color, and render_mode.
- New PdfProcessResult and PdfTypeResult properties: author, subject, keywords, creator, producer, creation_date, and mod_date.
- Support for extracting text rendered with the `"` operator.
Full Release Notes
Changes since 1.23.0: - Report the paint each text run was shown with: `TextItem` gains `fill_color` and `stroke_color` (8-bit sRGB, read from DeviceRGB, DeviceGray, DeviceCMYK, ICCBased by component count and Indexed palettes; `None` for Separation, DeviceN, Pattern and CIE-based spaces) and `render_mode` (the `Tr` mode, so invisible text and clipping-only text can be told apart). Extraction and markdown are unchanged (#579). - Read the document information dictionary's `/Author`, `/Subject`, `/Keywords`, `/Creator`, `/Producer`, `/CreationDate` and `/ModDate` beside `/Title`, each decoded as a PDF text string (#579). - Decode the document `/Title` as a PDF text string: titles in PDFDocEncoding no longer read with U+FFFD, titles in UTF-16LE no longer read as mojibake, and titles given by reference are read (#579). - Extract text a page shows with the `"` operator, which the page parser skipped together with the spacing and line move it makes (#579). - Take an ActualText span's weight from the paint of its first painted glyph rather than from the paint in force at the span's end (#579). - Keep two lines of small type apart when their baselines lie less than 5 pt apart: a stacked table header at 4.7 pt on a 4.5 pt pitch no longer comes out as words zipped from both lines, and type of 8⅓ pt and above groups exactly as before (#580). API: `TextItem::fill_color`, `stroke_color` and `render_mode` (Node `fillColor`, `strokeColor`, `renderMode`; Python `fill_color`, `stroke_color`, `render_mode`; the `pdf2md --items-json` fields), and the `PdfProcessResult` / `PdfTypeResult` fields `author`, `subject`, `keywords`, `creator`, `producer`, `creation_date` and `mod_date` (Node and WebAssembly in camelCase, Python as attributes, and the `pdf2md --json` / `detect-pdf --json` members). Rust literals of these types must include the new fields. Release preparation: #582. [Full changelog](https://github.com/firecrawl/pdf-inspector/compare/v1.23.0...v1.24.0)
Related Repositories
The AI that really does things. Any OS. Any Platform. The lobster way. 🦞
Interactive roadmaps, guides and other educational content to help developers grow in their careers.
Reverse engineer anything with agents, from app behavior down to native binaries.
The open source coding agent.
Fair-code workflow automation platform with native AI capabilities. Combine visual building with custom code, self-host or cloud, 400+ integrations.