https://github.com/gutschilla/elixir-pdf-generator
defmodule Pdf do
@moduledoc "Generate PDFs from HTML"
def generate_pdf(html) do
{:ok, pdf} = PdfGenerator.generate(html, delete_temporary: true)
pdf
end
def assemble_pdf(pdfs, output) when is_list(pdfs) and is_binary(output) do
args = pdfs ++ [output]
{_, 0} = System.cmd("pdfunite", args, stderr_to_stdout: true)
{:ok, output}
end
end
defmodule PdfTest do
use ExUnit.Case
def dummy_html(text) do
"<!DOCTYPE html><body><h1>Hello World! : #{text}</h1></body></html>"
end
describe "pdf generation" do
test "generate a single page pdf" do
pdf = Pdf.generate_pdf(dummy_html("single"))
assert File.exists?(pdf)
assert is_binary(pdf)
File.rm(pdf)
end
test "assemble 2 pdf" do
pdf1 = Pdf.generate_pdf(dummy_html("1"))
pdf2 = Pdf.generate_pdf(dummy_html("2"))
output = "output.pdf"
Pdf.assemble_pdf([pdf1, pdf2], output)
assert File.exists?(output)
File.rm(pdf1)
File.rm(pdf2)
File.rm(output)
end
end
end