PDFium

Native bindings for pdfium project

Installing

Usage

  1. open a PDF file descriptor:

    {:ok, document} = PDFium.load_document("file.pdf")
    # => {:ok, #Reference<0.2181297728.2193227786.166499>}
  2. get the number of pages in the file:

    {:ok, pages} = PDFium.get_page_count(document)
    # => {:ok, 1}
  3. render a page to file:

    {:ok, ref} = PDFium.load_document("/Users/eugene/Downloads/7ade6db09604a8b41104763c6f16a987.pdf")
    {:ok, binary, w, h} = PDFium.get_page_bitmap(ref, 0, 300) # 300 for DPI
    {:ok, image} = Vix.Vips.Image.new_from_binary(binary, w, h, 4, :VIPS_FORMAT_UCHAR)
    {:ok, _image} = Image.write(image, "/tmp/sample.png")

Releasing

  1. bump version in VERSION file. Run:

    echo -n (awk 'BEGIN{FS=OFS="."} {$NF+=1}1' VERSION) > VERSION
  2. commit and push the change:

    git add VERSION
    git commit --message "Bump library version"
    git push origin main
  3. create a PR from main to stable. Run:

    gh pr create --base stable --fill
  4. wait until the PR checks are green, then merge the PR

Running CI steps locally

  1. Prepare:

    mkdir output
  2. Build:

    dagger call \
      precompile --src-dir . --platform-name linux/arm64 --abi musl \
      export --path output/ --allowParentDirPath
  3. Test:

    dagger call test \
      --precompiled output/pdfium-nif-2.17-aarch64-linux-musl-0.1.23.tar.gz \
      --abi musl --platform-name linux/arm64

Known issues

License

See [LICENSE].