A native Elixir library for generating PDF documents with support for text, fonts, images, and drawing.
Gutenex is a native Elixir library for generating PDF documents programmatically. It allows developers to create PDFs with text, fonts, images, and drawing primitives directly from Elixir code, solving the need for a pure-Elixir solution in document generation.
Elixir developers who need to generate PDF reports, invoices, or documents within their applications without relying on external services or non-Elixir dependencies.
Developers choose Gutenex for its idiomatic Elixir API, native implementation (not just an Erlang wrapper), and fine-grained control over PDF content like text positioning and image placement.
Native PDF generation for Elixir
Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.
A full rewrite in Elixir, not just an Erlang wrapper, providing better performance and seamless integration within the Elixir ecosystem, as stated in the description.
Offers low-level access to PDF features such as text render modes (fill, stroke), image positioning with translation controls, and drawing primitives with configurable line widths.
Uses Elixir's pipe operator for a clean, chainable interface, as demonstrated in the usage example with fluent function chaining like Gutenex.add_image |> Gutenex.begin_text.
Adheres to PDF spec with units of 1/72 inch and origin at lower-left corner, ensuring precision and consistency in document layout, as explained in the README.
The library does not yet support parsing existing PDFs or templating, as admitted in the README's plan section, limiting its use for editing or template-based generation.
Requires managing a process PID and state through chained functions, which can be error-prone and less intuitive compared to stateless designs, as seen in the usage example.
The README lists documentation as part of the unfinished plan, suggesting that API references and guides may be lacking or insufficient for comprehensive use.