Files
pdfcraft/vendor/hayro-interpret/src/lib.rs
T
mlkonradandClaude Opus 5.5 7f1b632519 M2, #1060: axial and radial shadings draw as native gradients (backport of hayro 0.8) (#1061)
InDesign writes fades as luminosity soft masks whose group is one
extended axial `sh` over the whole page. hayro 0.7 sampled every such
shading pixel by pixel through the shading function, so a report page
with 40 of them took 10-15 s at 144 dpi.

Backport hayro 0.8.0's `gradient` module: an axial or radial shading
that a native gradient draws exactly becomes sRGB stops (within 0.01
per channel, a stop at every stitching bound), painted as a vello_cpu
gradient. Upstream's half-pixel shift is left out: it suits vello_cpu
0.3 but moves 0.0.8's gradients off pixel centres.

Page 4 of the reported file: 10.8 s -> 1.0 s.

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 13:12:16 -04:00

65 lines
1.9 KiB
Rust

/*!
A crate for interpreting PDF files.
This crate provides an abstraction to interpret the content of a PDF file and render them
into an abstract [`Device`], which clients can implement as needed. This allows you, for
example, to render PDF files to bitmaps (which is what the `hayro` crate does), or other formats
such as SVG.
It should be noted that this crate is still very much in development. Therefore it currently
lacks pretty much any documentation on how to use it. It's current API also only really makes it
useful for rendering to PNG or SVG, though this will be improved upon in the future.
# Examples
See the `examples` folder on the GitHub repository. Apart from that, you can also consult
the implementation of `hayro` and `hayro-svg` to get an idea on how to use this crate.
# Safety
This crate forbids unsafe code via a crate-level attribute.
# Cargo features
This crate has one optional feature:
- `embed-fonts`: PDF processors are required to support 14 predefined fonts that do not need to be
embedded into a PDF file. If you enable this feature, hayro will embed a (permissively-licensed)
substitute for each font, so that you don't have to implement your custom font loading logic. This
will add around ~240KB to your binary.
*/
#![forbid(unsafe_code)]
#![deny(missing_docs)]
#[macro_use]
mod log;
mod cache;
mod context;
mod convert;
mod device;
mod function;
mod interpret;
mod ocg;
mod soft_mask;
mod types;
mod x_object;
/// PdfCraft patch: exported for its regression test.
pub use x_object::image_size_ok;
pub mod color;
pub mod encode;
pub mod font;
pub mod gradient;
pub mod pattern;
pub mod shading;
pub mod util;
pub use cache::CacheKey;
pub use context::*;
pub use device::*;
pub use function::Function;
pub use hayro_cmap;
pub use hayro_syntax;
pub use interpret::*;
pub use soft_mask::*;
pub use types::*;
pub use util::{RectExt, TransformExt};