A user-friendly PDF generator written in pure Rust.
genpdf is a high-level PDF generator built on top of
rusttype. It takes care of the page layout and text alignment and
renders a document tree into a PDF document. All of its dependencies are
written in Rust, so you don’t need any pre-installed libraries or tools.
// Load a font from the file system let font_family = genpdf::fonts::from_files("./fonts", "LiberationSans", None) .expect("Failed to load font family"); // Create a document and set the default font family let mut doc = genpdf::Document::new(font_family); // Change the default settings doc.set_title("Demo document"); // Customize the pages let mut decorator = genpdf::SimplePageDecorator::new(); decorator.set_margins(10); doc.set_page_decorator(decorator); // Add one or more elements doc.push(genpdf::elements::Paragraph::new("This is a demo document.")); // Render the document and write it to a file doc.render_to_file("output.pdf").expect("Failed to write PDF file");
For more information, see the API documentation.
This crate has the following Cargo features (deactivated per default):
images: Adds support for embedding images using the
hyphenation: Adds support for hyphenation using the
These features are currently not supported but planned for future versions:
See also the
genpdf-rs issue tracker.
printpdfis the low-level PDF library used by
genpdf. It provides more control over the generated document, but you have to take care of all details like calculating the width and height of the rendered text, arranging the elements and distributing them on multiple pages.
latexgenerates LaTeX documents from Rust. It requires a LaTex installation to generate the PDF files. Also, escaping user input is a non-trivial problem and not supported by the crate.
tectonicis a TeX engine based on XeTeX. It is partly written in C and has some non-Rust dependencies.
wkhtmltopdfgenerates PDF documents from HTML using the
wkhtmltoxlibrary. It requires a pre-installed library and does not support custom elements.
This crate supports at least Rust 1.45.0 or later.
Contributions to this project are welcome! Please submit patches to the
mailing list ~firstname.lastname@example.org (archive) using the
[PATCH genpdf-rs] subject prefix. For more information, see the
If you are looking for a good starting point, have a look at the issues with
the label “good first issue” in
genpdf-rs’s issue tracker.
This project is dual-licensed under the Apache-2.0 and MIT licenses.
The documentation and examples contained in this repository are licensed under
the Creative Commons Zero license. You can find a copy of the license
texts in the
genpdf-rs complies with version 3.0 of the REUSE specification.