## PDFium
Native bindings for pdfium project
## Installing
* for Mix projects, add the following under `deps` in `mix.exs`:
```elixir
{:pdfium, "~> 0.1"}
```
* for single-file Elixir scripts, add the following:
```elixir
Mix.install([pdfium: "~> 0.1"])
```
## Usage
1. open a PDF file descriptor:
```elixir
{:ok, document} = PDFium.load_document("file.pdf")
# => {:ok, #Reference<0.2181297728.2193227786.166499>}
```
2. get the number of pages in the file:
```elixir
{:ok, pages} = PDFium.get_page_count(document)
# => {:ok, 1}
```
3. render a page to file:
```elixir
{: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:
```sh
echo -n (awk 'BEGIN{FS=OFS="."} {$NF+=1}1' VERSION) > VERSION
```
2. commit and push the change:
```sh
git add VERSION
git commit --message "Bump library version"
git push origin main
```
3. create a PR from `main` to `stable`. Run:
```sh
gh pr create --base stable --fill
```
4. wait until the PR checks are green, then merge the PR
## Running CI steps locally
1. Prepare:
```sh
mkdir output
```
1. Build:
```sh
dagger call \
precompile --src-dir . --platform-name linux/arm64 --abi musl \
export --path output/ --allowParentDirPath
```
2. Test:
```sh
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
* Installing the library was tested and will work in macOS and inside Docker images built by Bob. Installing
currently doesn't work under Elixir installed via package managers, such as via `apk add elixir` for example.
## License
See [LICENSE].