acroform-pdf

Crates.ioacroform-pdf
lib.rsacroform-pdf
version0.0.16
created_at2025-10-15 14:42:55.75612+00
updated_at2025-10-17 02:38:33.091951+00
descriptionPDF reader (fork of pdf-rs for acroform)
homepage
repositoryhttps://github.com/nibsbin/acroform-rs
max_upload_size
id1884525
size426,094
Nibs (nibsbin)

documentation

https://docs.rs/acroform-pdf

README

acroform-rs

A minimal, auditable PDF form manipulation library forked from pdf-rs.

This repository contains:

  • pdf/: Forked PDF parsing and manipulation library
  • acroform/: High-level form filling API (NEW)

Quick Start

File-based API

use acroform::{AcroFormDocument, FieldValue};
use std::collections::HashMap;

// Load a PDF
let mut doc = AcroFormDocument::from_pdf("form.pdf")?;

// List fields
for field in doc.fields()? {
    println!("Field: {} = {:?}", field.name, field.current_value);
}

// Fill and save
let mut values = HashMap::new();
values.insert("firstName".to_string(), FieldValue::Text("John".to_string()));
doc.fill_and_save(values, "filled_form.pdf")?;

In-Memory API (NEW!)

The high-level API now performs all operations in-memory, returning byte vectors instead of writing to disk:

use acroform::{AcroFormDocument, FieldValue};
use std::collections::HashMap;

// Load from bytes
let pdf_data = std::fs::read("form.pdf")?;
let mut doc = AcroFormDocument::from_bytes(pdf_data)?;

// Fill fields and get result as bytes (no disk I/O!)
let mut values = HashMap::new();
values.insert("firstName".to_string(), FieldValue::Text("John".to_string()));
let filled_pdf_bytes = doc.fill(values)?;

// Use the bytes directly (e.g., send over HTTP, store in database, etc.)
// Or write to disk if needed
std::fs::write("filled_form.pdf", filled_pdf_bytes)?;

See acroform/README.md for detailed documentation.

Original README (pdf-rs)

Read, alter and write PDF files.

Modifying and writing PDFs is still experimental.

One easy way you can contribute is to add different PDF files to tests/files and see if they pass the tests (cargo test).

Feel free to contribute with ideas, issues or code! Please join us on Zulip if you have any questions or problems.

Workspace

This repository uses a Cargo Workspace and default members. This means by default only the pdf library is build. To build additional parts, pass --package=read to build the subcrate you are interested in (here the read example).

Examples

Examples are located in pdf/examples/ and can be executed using:

cargo run --example {content,metadata,names,read,text} -- <files/{choose a pdf}>

Renderer and Viewer

A library for rendering PDFs via Pathfinder and minimal viewer can be found here.

Inspect

There is a tool for visualizing a PDF file as an interactive hierarchy of primitives at inspect-prim. Just clone and cargo run.

Commit count: 0

cargo fmt