Thanks to visit codestin.com
Credit goes to github.com

Skip to content

geomlattice/ex_typst

 
 

Repository files navigation

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

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Elixir 50.4%
  • Rust 46.8%
  • Nix 2.8%