Skip to content

Commit

Permalink
Progressing #137
Browse files Browse the repository at this point in the history
  • Loading branch information
Alastair Carey committed Aug 19, 2024
1 parent fc0efe5 commit 3dab114
Show file tree
Hide file tree
Showing 10 changed files with 5,212 additions and 722 deletions.
115 changes: 100 additions & 15 deletions .github/workflows/build_test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -37,33 +37,118 @@ jobs:
run: cargo install wasm-pack && wasm-pack build examples/ --target no-modules
- name: Generate documentation
run: cargo doc
- name: Check backward compatibility with pdfium_5961

# Compatibility checks for dynamic and thread safe bindings

- name: Check forward compatibility with pdfium_future and dynamic bindings
run: cargo check --no-default-features --features="image, thread_safe, pdfium_future"
- name: Check backward compatibility with pdfium_5961 and dynamic bindings
run: cargo check --no-default-features --features="image, thread_safe, pdfium_5961"
- name: Check backward compatibility with pdfium_6015
- name: Check backward compatibility with pdfium_6015 and dynamic bindings
run: cargo check --no-default-features --features="image, thread_safe, pdfium_6015"
- name: Check backward compatibility with pdfium_6043
- name: Check backward compatibility with pdfium_6043 and dynamic bindings
run: cargo check --no-default-features --features="image, thread_safe, pdfium_6043"
- name: Check backward compatibility with pdfium_6084
- name: Check backward compatibility with pdfium_6084 and dynamic bindings
run: cargo check --no-default-features --features="image, thread_safe, pdfium_6084"
- name: Check backward compatibility with pdfium_6110
- name: Check backward compatibility with pdfium_6110 and dynamic bindings
run: cargo check --no-default-features --features="image, thread_safe, pdfium_6110"
- name: Check backward compatibility with pdfium_6124
- name: Check backward compatibility with pdfium_6124 and dynamic bindings
run: cargo check --no-default-features --features="image, thread_safe, pdfium_6124"
- name: Check backward compatibility with pdfium_6164
- name: Check backward compatibility with pdfium_6164 and dynamic bindings
run: cargo check --no-default-features --features="image, thread_safe, pdfium_6164"
- name: Check backward compatibility with pdfium_6259
- name: Check backward compatibility with pdfium_6259 and dynamic bindings
run: cargo check --no-default-features --features="image, thread_safe, pdfium_6259"
- name: Check backward compatibility with pdfium_6295
- name: Check backward compatibility with pdfium_6295 and dynamic bindings
run: cargo check --no-default-features --features="image, thread_safe, pdfium_6295"
- name: Check backward compatibility with pdfium_6337
- name: Check backward compatibility with pdfium_6337 and dynamic bindings
run: cargo check --no-default-features --features="image, thread_safe, pdfium_6337"
- name: Check backward compatibility with pdfium_6406
- name: Check backward compatibility with pdfium_6406 and dynamic bindings
run: cargo check --no-default-features --features="image, thread_safe, pdfium_6406"
- name: Check backward compatibility with pdfium_6490
- name: Check backward compatibility with pdfium_6490 and dynamic bindings
run: cargo check --no-default-features --features="image, thread_safe, pdfium_6490"
- name: Check backward compatibility with pdfium_6555
- name: Check backward compatibility with pdfium_6555 and dynamic bindings
run: cargo check --no-default-features --features="image, thread_safe, pdfium_6555"
- name: Check backward compatibility with pdfium_6569
- name: Check backward compatibility with pdfium_6569 and dynamic bindings
run: cargo check --no-default-features --features="image, thread_safe, pdfium_6569"
- name: Check backward compatibility with pdfium_6611
- name: Check backward compatibility with pdfium_6611 and dynamic bindings
run: cargo check --no-default-features --features="image, thread_safe, pdfium_6611"

# Compatibility checks for static bindings

- name: Check forward compatibility with pdfium_future and static bindings
run: cargo check --no-default-features --features="image, static, pdfium_future"
- name: Check backward compatibility with pdfium_5961 and static bindings
run: cargo check --no-default-features --features="image, static, pdfium_5961"
- name: Check backward compatibility with pdfium_6015 and static bindings
run: cargo check --no-default-features --features="image, static, pdfium_6015"
- name: Check backward compatibility with pdfium_6043 and static bindings
run: cargo check --no-default-features --features="image, static, pdfium_6043"
- name: Check backward compatibility with pdfium_6084 and static bindings
run: cargo check --no-default-features --features="image, static, pdfium_6084"
- name: Check backward compatibility with pdfium_6110 and static bindings
run: cargo check --no-default-features --features="image, static, pdfium_6110"
- name: Check backward compatibility with pdfium_6124 and static bindings
run: cargo check --no-default-features --features="image, static, pdfium_6124"
- name: Check backward compatibility with pdfium_6164 and static bindings
run: cargo check --no-default-features --features="image, static, pdfium_6164"
- name: Check backward compatibility with pdfium_6259 and static bindings
run: cargo check --no-default-features --features="image, static, pdfium_6259"
- name: Check backward compatibility with pdfium_6295 and static bindings
run: cargo check --no-default-features --features="image, static, pdfium_6295"
- name: Check backward compatibility with pdfium_6337 and static bindings
run: cargo check --no-default-features --features="image, static, pdfium_6337"
- name: Check backward compatibility with pdfium_6406 and static bindings
run: cargo check --no-default-features --features="image, static, pdfium_6406"
- name: Check backward compatibility with pdfium_6490 and static bindings
run: cargo check --no-default-features --features="image, static, pdfium_6490"
- name: Check backward compatibility with pdfium_6555 and static bindings
run: cargo check --no-default-features --features="image, static, pdfium_6555"
- name: Check backward compatibility with pdfium_6569 and static bindings
run: cargo check --no-default-features --features="image, static, pdfium_6569"
- name: Check backward compatibility with pdfium_6611 and static bindings
run: cargo check --no-default-features --features="image, static, pdfium_6611"

# Compatibility checks for WASM bindings. This is not as easy to test as with
# the other binding types, since we must construct a unique Cargo.toml for use
# with wasm-pack for each API version. We'll write a simple script to do it.
# wasm-pack should already be installed from earlier, so we don't need to
# install it again.

- name: Prepare WASM compatibility test harness
run: |
cp examples/Cargo.toml examples/Cargo.bak && echo $' \n
sed "s|pdfium-render = .*|pdfium-render = { path = \\"../\\", default-features = false, features = [\\"image\\", \\"$1\\"] }|g" examples/Cargo.bak > examples/Cargo.toml \n
wasm-pack build examples/ --target no-modules \n
' >> ./test-wasm-compat.sh
- name: Check forward compatibility with pdfium_future and WASM bindings
run: sh ./test-wasm-compat.sh pdfium_future
- name: Check backward compatibility with pdfium_5961 and WASM bindings
run: sh ./test-wasm-compat.sh pdfium_5961
- name: Check backward compatibility with pdfium_6015 and WASM bindings
run: sh ./test-wasm-compat.sh pdfium_6015
- name: Check backward compatibility with pdfium_6043 and WASM bindings
run: sh ./test-wasm-compat.sh pdfium_6043
- name: Check backward compatibility with pdfium_6084 and WASM bindings
run: sh ./test-wasm-compat.sh pdfium_6084
- name: Check backward compatibility with pdfium_6110 and WASM bindings
run: sh ./test-wasm-compat.sh pdfium_6110
- name: Check backward compatibility with pdfium_6124 and WASM bindings
run: sh ./test-wasm-compat.sh pdfium_6124
- name: Check backward compatibility with pdfium_6164 and WASM bindings
run: sh ./test-wasm-compat.sh pdfium_6164
- name: Check backward compatibility with pdfium_6259 and WASM bindings
run: sh ./test-wasm-compat.sh pdfium_6259
- name: Check backward compatibility with pdfium_6295 and WASM bindings
run: sh ./test-wasm-compat.sh pdfium_6295
- name: Check backward compatibility with pdfium_6337 and WASM bindings
run: sh ./test-wasm-compat.sh pdfium_6337
- name: Check backward compatibility with pdfium_6406 and WASM bindings
run: sh ./test-wasm-compat.sh pdfium_6406
- name: Check backward compatibility with pdfium_6490 and WASM bindings
run: sh ./test-wasm-compat.sh pdfium_6490
- name: Check backward compatibility with pdfium_6555 and WASM bindings
run: sh ./test-wasm-compat.sh pdfium_6555
- name: Check backward compatibility with pdfium_6569 and WASM bindings
run: sh ./test-wasm-compat.sh pdfium_6569
- name: Check backward compatibility with pdfium_6611 and WASM bindings
run: sh ./test-wasm-compat.sh pdfium_6611
1 change: 0 additions & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,6 @@ flatten = []

pdfium_latest = ["pdfium_6611"]
pdfium_future = [
"bindings",
] # For testing changes in Pdfium source control that are yet to be released
pdfium_6611 = []
pdfium_6569 = []
Expand Down
18 changes: 14 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -278,7 +278,7 @@ This crate provides the following optional features:

Release 0.8.24 introduced new features to explicitly control the version of the Pdfium API used by `pdfium-render`:

* `pdfium_future`: binds `PdfiumLibraryBindings` to the latest published Pdfium API at <https://pdfium.googlesource.com/pdfium/+/refs/heads/main/public>, irrespective of whether those changes have been built into a release at <https://github.com/bblanchon/pdfium-binaries/releases>. Useful for testing unreleased changes. Automatically activates the `bindings` feature.
* `pdfium_future`: binds `PdfiumLibraryBindings` to the latest published Pdfium API at <https://pdfium.googlesource.com/pdfium/+/refs/heads/main/public>, irrespective of whether those changes have been built into a release at <https://github.com/bblanchon/pdfium-binaries/releases>. Useful for testing unreleased changes.
* `pdfium_latest`: binds `PdfiumLibraryBindings` to the latest released build of Pdfium at <https://github.com/bblanchon/pdfium-binaries/releases>, currently 6611.
* `pdfium_6611`, `pdfium_6569`, `pdfium_6555`, `pdfium_6490`, `pdfium_6406`, `pdfium_6337`, `pdfium_6295`, `pdfium_6259`, `pdfium_6164`, `pdfium_6124`, `pdfium_6110`, `pdfium_6084`, `pdfium_6043`, `pdfium_6015`, `pdfium_5961`: binds `PdfiumLibraryBindings` to the specified version of the Pdfium API.

Expand Down Expand Up @@ -354,7 +354,7 @@ functions specific to interactive scripting, user interaction, and printing.
* Releases numbered 0.8.x aim to progressively add support for all remaining Pdfium editing functions to `pdfium-render`.
* Releases numbered 0.9.x aim to fill any remaining gaps in the high-level interface prior to 1.0.

There are 408 `FPDF_*` functions in the Pdfium API. As of version 0.8.25, 346 (85%) have
There are 408 `FPDF_*` functions in the Pdfium API. As of version 0.8.25, 368 (90%) have
bindings available in `PdfiumLibraryBindings`, with the functionality of the majority of these
available via the `pdfium-render` high-level interface.

Expand All @@ -368,14 +368,24 @@ at <https://github.com/ajrcarey/pdfium-render/issues>.
## Version history

* 0.8.25: adds bindings for `FPDFAnnot_GetFormAdditionalActionJavaScript()`,
`FPDFAnnot_GetFormFieldAlternateName()`, `FPDFAnnot_GetFileAttachment()`,
`FPDFBitmap_Create()`, `FPDFAnnot_GetFormFieldAlternateName()`, `FPDFAnnot_GetFileAttachment()`,
`FPDFAnnot_AddFileAttachment()`, `FPDFAvail_Create()`, `FPDFAvail_Destroy()`,
`FPDFAvail_IsDocAvail()`, `FPDFAvail_GetDocument()`, `FPDFAvail_GetFirstPageNum()`,
`FPDFAvail_IsPageAvail()`, `FPDFAvail_IsFormAvail()`, and `FPDFAvail_IsLinearized()` functions.
`FPDFAvail_IsPageAvail()`, `FPDFAvail_IsFormAvail()`, `FPDFAvail_IsLinearized()`,
`FPDFAnnot_GetFontColor()`, `FPDFPageObj_TransformF()`, `FPDFPageObj_GetMarkedContentID()`
`FPDF_StructElement_GetActualText()`, `FPDF_StructElement_GetObjType()`,
`FPDF_StructElement_GetChildMarkedContentID()`, `FPDF_StructElement_GetAttributeAtIndex()`,
`FPDF_StructElement_Attr_GetName()`, `FPDF_StructElement_Attr_GetValue()`,
`FPDF_StructElement_Attr_GetType()`, `FPDF_StructElement_Attr_GetBooleanValue()`,
`FPDF_StructElement_Attr_GetNumberValue()`, `FPDF_StructElement_Attr_GetStringValue()`,
`FPDF_StructElement_Attr_GetBlobValue()`, `FPDF_StructElement_Attr_GetChildAtIndex()`,
`FPDF_StructElement_GetMarkedContentIdCount()`, and `FPDF_StructElement_GetMarkedContentIdAtIndex()`
functions.
* 0.8.24: introduces crate feature flags for selecting Pdfium API versions to use in
`PdfiumLibraryBindings`; reworked `build.rs` to output bindings for multiple sets of Pdfium header
files; reworks bindings implementations to differentiate between API versions that include the
`FPDFFont_*` and `FPDFText_GetTextObject()` functions added in 0.8.23, and API versions that do not;
reinstates `FPDFText_GetTextRenderMode()` function removed in 0.8.23 behind feature flags;
adds WASM bindings utility function `copy_string_to_pdfium()` to correctly copy the string data of an
`FPDF_WIDESTRING` to Pdfium's WASM memory module, instead of just the pointer location;
adds `PdfiumLibraryBindings::version()` function for reporting the currently configured API version;
Expand Down
Loading

0 comments on commit 3dab114

Please sign in to comment.