Files
pdfcraft/vendor/hayro
ab45a1855f Keep annotations readable under reading colours (#1548) (#1557)
* fix(render): keep annotations readable under reading colours (#1548)

Reading colours remapped annotation paints as line art: the yellow
highlight fill is luminance-light, so it was mapped toward the dark
background, and Multiply then darkened the remapped-white words under
it into invisibility.

Two changes in hayro:

- The /Annots loop in interpret_page is bracketed by a new
  begin_annotations/end_annotations Device signal (patch 26), and the
  renderer's reading-colours mapping leaves annotation paints alone.
  Reading colours replace document colours, never the colours a
  comment was given — the Acrobat model.
- The page background is painted inside the page transparency group
  (patch 27), as the initial backdrop, so a Multiply highlight blends
  with the background too. With the background outside the group the
  band kept its own flat colour and the words vanished into it. White
  pages are unaffected: multiplying with white is the identity.

Regression test reading_colors_keep_highlight_annotations_readable
covers both annotation paths (/AP and the no-/AP /QuadPoints
fallback) under WHITE_ON_BLACK; parity entry a11y.replace-page-colors
updated with the behaviour and evidence.

Co-Authored-By: GLM <noreply@z.ai>

* contributors: credit @edurbs as Eduardo Soares

The contributor's own entry, chosen by them (real and display name).

Co-Authored-By: GLM <noreply@z.ai>

* #1557: record the vendored hayro patches in vendor/README.md

Main already uses hayro-interpret patches (26)-(28), so the annotation hooks become
hayro-interpret (29) and the renderer's parts hayro (17) and (18).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Co-authored-by: GLM <noreply@z.ai>
Co-authored-by: Brandon Thomas <echelon@gmail.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 04:03:25 -04:00
..
2026-09-30 11:00:02 -04:00
2026-09-30 11:00:02 -04:00
2026-09-30 11:00:02 -04:00
2026-09-30 11:00:02 -04:00
2026-09-30 11:00:02 -04:00
2026-09-30 11:00:02 -04:00

hayro

Crates.io Documentation

A crate for rendering PDF files.

This crate allows you to render pages of a PDF file into bitmaps. It is supposed to be relatively lightweight, since we do not have any dependencies on the GPU. All the rendering happens on the CPU.

The ultimate goal of this crate is to be a feature-complete and performant PDF rasterizer. With that said, we are currently still very far away from reaching that goal: So far, no effort has been put into performance optimizations, as we are still working on implementing missing features. However, this crate is currently the most comprehensive and feature-complete implementation of a PDF rasterizer in pure Rust. This claim is supported by the fact that we currently include over 1000 PDF files in our regression test suite. The majority of those have been scraped from the pdf.js and PDFBOX test suites and therefore represent a very large and diverse sample of PDF files.

As mentioned, there are still some serious limitations, including lack of support for encrypted/password-protected PDF files, blending and isolation, knockout groups as well as a range of smaller features such as color key masking. But you should be able to render the vast majority of PDF files without too many issues.

Safety

This crate forbids unsafe code via a crate-level attribute.

Examples

For usage examples, see the example in the GitHub repository.

Cargo features

This crate has one optional feature:

  • embed-fonts: See the description of hayro-interpret for more information.

License

Licensed under either of

at your option.