mirror of
https://github.com/storytold/pdfcraft.git
synced 2026-10-27 03:27:21 -06:00
* Redact: operators split across a page's content streams are redacted whole A page's /Contents array is one content stream in pieces, and a writer may split it between any two tokens (ISO 32000-2 §7.8.2). Some office and layout exporters do: a TJ array ends one piece and its TJ operator starts the next, or a marked-content dictionary closes in the next piece. Redaction parsed each piece on its own, so such an operator was cut off from its operands. Glyphs shown by a split TJ were never checked against the marks: Apply drew the black box but left the text in the file, and Verify reported nothing under the box. When the piece holding the operands was rewritten for another mark, they were dropped, so the text after it vanished and the next piece began with an operator without operands, which other readers reject. process() now parses the pieces joined, gives each operator back to the piece its keyword is in, and rewrites every piece a split operator spans. Pages whose pieces split only between operators are unchanged. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Use the pdfcraft crate names after the rename Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> --------- Co-authored-by: EthanSuquet <292885762+EthanSuquet@users.noreply.github.com> Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> Co-authored-by: Brandon Thomas <echelon@gmail.com>