djvu-rs
Pure-Rust DjVu decoder. MIT licensed. Written from the DjVu v3 public specification.
Features
- IFF container parser — zero-copy, borrowing slices from input
- JB2 bilevel image decoder — adaptive arithmetic coding (ZP coder) with symbol dictionary
- IW44 wavelet image decoder — planar YCbCr storage, multiple refinement chunks
- BZZ decompressor — ZP arithmetic coding + MTF + BWT (DIRM, NAVM, ANTz chunks)
- Text layer extraction — TXTz/TXTa chunk parsing with zone hierarchy (page/column/region/paragraph/line/word/character)
- Annotation parsing — ANTz/ANTa chunk parsing (hyperlinks, map areas, background color)
- Bookmarks — NAVM table-of-contents parsing
- Multi-page documents — DJVM bundle format with DIRM directory chunk
- Page rendering — composite foreground + background into RGBA output
- PDF export — selectable text, lossless IW44/JB2 embedding, bookmarks, hyperlinks
- TIFF export — multi-page color and bilevel modes (feature flag
tiff) - Async render —
tokio::task::spawn_blockingwrapper (feature flagasync) no_stdcompatible — IFF/BZZ/JB2/IW44/ZP modules work withalloconly
Quick start
use ;
let data = read?;
let doc = parse?;
println!;
let page = doc.page?;
println!;
let opts = RenderOptions ;
let pixmap = render_pixmap?;
// pixmap.data — RGBA bytes (width × height × 4), row-major
Text extraction
use DjVuDocument;
let data = read?;
let doc = parse?;
let page = doc.page?;
if let Some = page.text?
PDF export
use ;
let data = read?;
let doc = parse?;
let pdf_bytes = djvu_to_pdf?;
write?;
TIFF export
Requires the tiff feature flag: djvu-rs = { version = "…", features = ["tiff"] }.
use ;
let data = read?;
let doc = parse?;
let tiff_bytes = djvu_to_tiff?;
write?;
Async render
Requires the async feature flag: djvu-rs = { version = "…", features = ["async"] }.
use ;
let data = read?;
let doc = parse?;
let page = doc.page?;
let opts = RenderOptions ;
let pixmap = render_pixmap_async.await?;
Low-level IFF access
use parse_form;
let data = read?;
let form = parse_form?;
println!;
for chunk in &form.chunks
CLI
The djvu binary is included when the std feature is enabled (the default).
# Install
# Document info
# Render page 1 to PNG at 200 DPI
# Render all pages to a PDF
# Export all pages to CBZ
# Extract text from page 2
# Extract text from all pages
Feature flags
| Flag | Default | Description |
|---|---|---|
std |
enabled | DjVuDocument, file I/O, rendering, PDF export, CLI |
tiff |
disabled | TIFF export via the tiff crate |
async |
disabled | Async render API via tokio::task::spawn_blocking |
Without std, the crate provides IFF parsing, BZZ decompression, JB2/IW44 decoding,
text/annotation parsing — all codec primitives that work on byte slices.
Minimum supported Rust version (MSRV)
Rust 1.88 (edition 2024 — let-chains stabilized in 1.88)
Roadmap
See GitHub milestones for the full roadmap and progress tracking.
License
MIT. See LICENSE.
Specification
Written from the public DjVu v3 specification:
- https://www.sndjvu.org/spec.html
- https://djvu.sourceforge.net/spec/DjVu3Spec.djvu (the spec is itself a DjVu file)
No code derived from GPL-licensed DjVuLibre or any other GPL source. All algorithms are independent implementations from the spec.