leobessa / ex_typst

Elixir bindings and helpers for the typst typesetting system

Home Page:https://hexdocs.pm/ex_typst

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

ExTypst

Elixir bindings and helpers for the typst typesetting system.

Check Typst's documentation for a quick start.

Usage

# Write typst markup
template = """
= Current Employees

This is a report showing the company's current employees.

#table(
  columns: (auto, 1fr, auto, auto),
  [*No*], [*Name*], [*Salary*], [*Age*],
  <%= employees %>
)
"""

# Create some data
defmodule Helper do 
  @names ["John", "Nathalie", "Joe", "Jane", "Tyler"]
  @surnames ["Smith", "Johnson", "Williams", "Brown", "Jones", "Davis"]

  def build_employees(n) do 
    for n <- 1..n do 
      name = "#{Enum.random(@names)} #{Enum.random(@surnames)}"
      salary = "US$ #{Enum.random(1000..15_000) / 1}"
      [n, name, salary, Enum.random(16..60)]
    end
  end
end

# Convert it to a nice-looking PDF
{:ok, pdf_binary} = ExTypst.render_to_pdf(template, 
  employees: ExTypst.Format.table_content(Helper.build_employees(1_000))
)

# Write to disk
File.write!("employees.pdf", pdf_binary)

# Or maybe send via email
Bamboo.Email.put_attachment(email, %Bamboo.Attachment{data: pdf_binary, filename: "employees.pdf"})

You can see the generated PDF here.

Security

Please note that currently ExTypst is experimental and content added to templates is not escaped.

Installation

If available in Hex, the package can be installed by adding ex_typst to your list of dependencies in mix.exs:

def deps do
  [
    {:ex_typst, "~> 0.1"}
  ]
end

Documentation can be generated with ExDoc and published on HexDocs. Once published, the docs can be found at https://hexdocs.pm/ex_typst.

About

Elixir bindings and helpers for the typst typesetting system

https://hexdocs.pm/ex_typst

License:Apache License 2.0


Languages

Language:Elixir 53.7%Language:Rust 43.9%Language:Nix 2.4%