pdf_manipulator 5.0.1
pdf_manipulator: ^5.0.1 copied to clipboard
Cross-platform PDF toolkit for Flutter. Merge, split, render, extract, search, sign, encrypt, convert, build from scratch. Rust engine, off the main thread.
Changelog #
5.0.1 #
- Engine updated — web: re-run
flutter pub run pdf_manipulator:setup --force web(native updates itself) - Fixed a
keep:list withoutextract, such askeep: [], failing to compile the engine withcannot find search in crate— the search module now compiles in every keep-set (#256 reported by @DarkWingMcQuack) - Fixed a PDF encrypted with Standard Security R2–R4 (RC4) failing to open on web with
compiled without 'legacy-crypto'— the web engine now carries the same legacy encryption and ICC colour support as native (#257 reported by @crurui)
Commits since v5.0.0 (10)
- cd83915 stamp: asset hashes for v5.0.1
- 3b9d837 release: v5.0.1
- dfa7c6b release: promote dev → prod (v5.0.1) (#259)
- f08b245 Merge branch 'prod' into dev
- 51a259f fix: every keep-set compiles, and web opens R2-R4 encrypted PDFs (#256, #257) (#258)
- 7896412 chore: bump Flutter SDK (#254)
- f2a90a9 chore: refresh lockfiles (#253)
- 13d080c chore: bump pinned versions (#252)
- 5f34453 chore: bump the deps group with 2 updates (#255)
- 6cbe43b chore: refresh lockfiles (#251)
5.0.0 #
- Breaking:
PdfEditor.optimizeImages(quality:, minSize:)is removed → usereduceImages(PdfImagePolicy(jpegQuality: quality, minPixels: minSize, convertCmykToRgb: true)); the count it returned isreport.changed - Breaking:
compress(imageQuality:)→compress(images:), aPdfImagePolicydefaulting toPdfImagePolicy.ebook(150 ppi, JPEG quality 75), so a plaincompressnow downsamples images drawn above 225 ppi; passPdfImagePolicy(jpegQuality: q)for the old behaviour - Breaking: the editor's argument-less reads are getters (a property reads as a noun, never with a
getprefix):getTitle()→title,getAuthor()→author,getSubject()→subject,getKeywords()→keywords,getProducer()→producer,getCreationDate()→creationDate, and onPdfDocgetSignatures()→signatures; the one read with an argument is a noun method,getPageMediaBox(page)→pageMediaBox(page) - Breaking:
flattenAllAnnotations()isflattenAnnotations({int? page}), andflattenForms()gains the same optionalpage; without it both flatten every page as before - Breaking:
applyRedactions()now returns aPdfRedactionReport(regions, glyphs removed, images modified or removed, paths pruned) instead ofvoid; awaiting it still applies the redactions - Breaking:
mergeFrom(other)gainspages:(a 0-based list;nullmerges every page) andembedFile(name, data)gainsdescription:,mimeType:andrelationship:; positional callers are unchanged - Engine updated — web: re-run
flutter pub run pdf_manipulator:setup --force web(native updates itself) - Added
PdfEditor.pageImages(page)— every image XObject drawn on a page with its resource name, bounds and transform; the name is whatresizeImagetakes - Added
PdfEditor.repositionImage(page, name, x:, y:)andsetImageBounds(page, name, bounds)— move, or move and resize, an image by the namepageImageslists - Added
PdfEditor.reduceImages(PdfImagePolicy)— downsamples images to the resolution they are drawn at and re-encodes them by kind (JPEG, predicted Flate, CCITT G4), soft masks included, presetsscreen/ebook/print/lossless, onePdfImageReportrow per image with the reason when it is kept; images reached only through annotation appearances, patterns or inlineBI … EIstay as stored - Added
compress(images: PdfImagePolicy.screen)— the one-shot takes the same policy - Added
PdfImagePolicy.minSavings(default 10%: a lossy re-encode must earn its bytes or the image is kept),chromaSubsampling(auto= 4:4:4 from quality 90,full,half;printpinsfull) andrecompressJpeg(re-encode stored JPEGs atjpegQualityeven when not downsampled; off by default) - Added
PdfEditor.pageCropBox(page)(nullwhen the page has no CropBox),setPageMediaBox,setPageCropBoxandsetPageRotation(page, degrees:)(absolute, whererotatePageis relative) - Added
PdfEditor.clearEraseRegions(page)to drop the regions queued byeraseRegionsbefore save - Added
PdfEditor.sanitize(PdfSanitizeOptions)— strip metadata, JavaScript actions and embedded files in one pass;scrubMetadata()is its metadata-only form - Added
PdfDoc.formFieldsandformField(name)— every AcroForm field with its type, typed value, tooltip, bounds, max length, alignment and read-only/required flags - Added the form field property setters on
PdfEditor:removeFormField,setFormFieldReadOnly,setFormFieldRequired,setFormFieldTooltip,setFormFieldBounds,setFormFieldMaxLength,setFormFieldAlignment,setFormFieldBackgroundColor,setFormFieldBorderColor,setFormFieldBorderWidth,setFormFieldAppearanceandsetFormFieldFlags— each read back after save byformFields - Added
PdfDoc.exportFormData(sink, format:)— the filled values as FDF or XFDF - Added
PdfDoc.xfa(PdfXfaInfowith field count, page count and field types, ornullwithout an XFA packet) and the one-shotconvertXfaToAcroForm(source, output)that rewrites an XFA form as a plain AcroForm - Added
PdfDoc.attachments(name, size, description, MIME type, read from the name tree without decoding the files) andextractAttachment(name, sink) - Fixed images optimized in an edit session being saved unchanged — the full-rewrite writer copied page-referenced XObjects from the source and skipped the staged replacement
- Fixed
pageImageslisting Form XObjects — only/Subtype /Imageresources are listed, so every name is a validresizeImagetarget - Fixed a DOCX table converting to PDF several times wider than declared, columns off the page — the converter now honours the
w:tblGridwidths, scaled to the printable width (#243 reported by @kampmapa1-design) - Fixed a web instance failing with
WASM init failed: Out of memoryduring rapid create-and-dispose churn — a worker slot is freed when the browser confirms the worker is gone, not atterminate() - Fixed
pageMediaBoxreturning the box's far corner as its width and height whenever the MediaBox origin is not (0, 0) - Fixed form field property changes being lost on save unless the form was also flattened — the engine wrote only the value; every property and a removed field now reach the saved file
- Fixed
eraseRegionsandaddRedactionacting on the wrong rectangle — the width and height were passed where the far corner was expected, so every region past the origin was off by its own size - Fixed
addStamplosing the stamp on save when its rectangle sits high on the page — the same size-for-corner mix-up placed the label above the page edge; the builder'simagewas drawn at the wrong size for the same reason - Fixed
mergeFromdropping the merged document's form fields — the pages arrived but no/Fieldsentry pointed at them, so they could not be listed or filled; the AcroForm is carried across now - Fixed an embedded file's MIME type being written as
text#232Fplain— the solidus was escaped twice - Vendored engines synced upstream: pdf_oxide v0.3.73 → v0.3.78 and office_oxide v0.1.3 → v0.1.11 (extraction, rendering, table-structure and legacy
.docfixes)
Commits since v4.2.0 (10)
- cfe2c92 stamp: asset hashes for v5.0.0
- 03e85e6 release: v5.0.0
- 02ae148 release: promote dev → prod (v5.0.0) (#250)
- d39c358 Merge branch 'prod' into dev
- 83d218f feat!: 5.0.0 — image reducer, image edits, and every PLANNED capability row (#249)
- b72a04d fix: DOCX tables convert at their declared widths (#243); vendors synced; web worker budget frees a slot on confirmed death (#248)
- e16164f chore: bump pinned versions (#245)
- afd708e chore: refresh lockfiles (#246)
- bd388a8 chore: bump Flutter SDK (#247)
- 30cd3f0 chore: bump code_assets from 1.2.1 to 2.0.0 in the deps group (#244)
4.2.0 #
- Engine updated — web: re-run
flutter pub run pdf_manipulator:setup --force web(native updates itself) - Added
setCheckboxFieldValue(fieldName, checked)— checks a checkbox without knowing its on-state name (/Yes,/On,/1…);setFormFieldValuestill takes the name directly - Fixed a checked checkbox flattening as an empty box and losing its value on reopen — button values are read, resolved and written as appearance-state names, and flattening draws the state that was set (#215 reported by @DarkWingMcQuack)
- Fixed radio groups being impossible to select — the state is set on the kid widget that offers it (siblings cleared), and the Radio/Pushbutton flag bits are read per ISO 32000-1
Commits since v4.1.0 (31)
- 7688536 stamp: asset hashes for v4.2.0
- ebcbaad release: v4.2.0
- 2bc950c release: promote dev → prod (v4.2.0) (#242)
- 357d6e4 Merge branch 'prod' into dev
- 750cc12 fix: checked checkboxes and selected radios flatten as set (#215) (#218)
- 97a47b1 ci: whuppi/ci v2.7.3 (#241)
- 6649f0c ci: pkg: Web rows keep their host hook tree on ghcr under their own family (#240)
- cd33e85 ci: int: Android rows keep their hook trees on ghcr under their own family (#239)
- b4c655c ci: verify: Android and verify: macOS keep their hook trees on ghcr under their own families (#238)
- 5a89cd4 ci: whuppi/ci v2.7.2 (#237)
- 6e033aa ci: compile rows keep their release trees on ghcr under their own family (#236)
- 20b978a ci: whuppi/ci 2.7.0 → 2.7.1 (SDK cache key carries the runner image version) (#235)
- 3afd1b6 ci: cache diagnostics — restored-artifacts summary; probe dispatch input (#234)
- 4725c8d ci: whuppi/ci 2.6.3 → 2.7.0; Android SDK components from ghcr on the emulator rows (#233)
- 070689a ci: the Rust test family keeps its whole target trees on ghcr.io (#232)
- 2038a2c ci: engine-artifacts archive carries the crates' fingerprints and build dirs (#231)
- 013ebdf ci: whuppi/ci 2.6.1 → 2.6.3 (ghcr restore resilience, Windows symlinks, emulator version) (#230)
- 2745f3f ci: whuppi/ci 2.6.0 → 2.6.1 (SDK cache keyed on the .fvmrc version; emulator version parse) (#229)
- fe18919 ci: keep the big caches on ghcr.io via whuppi/ci 2.6.0 oci-cache (#228)
- c6d178e ci: compile rows share the deps archive and own only their engine-artifacts archive (#227)
- 28f2d02 ci: warm the caches from dev; PR runs read only; delete a PR's caches on close (#226)
- a7bb13f ci: run the engine test suites through cargo-nextest and link with mold (#225)
- 6d2c92d ci: cache cargo's target dir with rust-cache; one target dir for every build path; cold guard (#224)
- d17f23c chore: refresh lockfiles (#222)
- 048a591 ci: bump all action refs (workflows + composites) (#213)
- e992002 chore: reformat under the Flutter 3.47.2 formatter (#221)
- 7d27b2a chore: bump pinned versions (#211)
- f6b303b chore: bump Flutter SDK (#214)
- dee1675 ci: bump whuppi/ci refs to v2.4.1 (#220)
- 812f1a4 docs: point S8 at where release.sh actually lives (#219)
- 76adf8e test: mark hook_app_root_test dart:io-exempt (#217)
4.1.0 #
- Added
scan-dirs— extra directories forkeep: autoto scan beyondlib/andbin/(scan-dirs: [tools, packages/shared/lib], relative to your app); a directory that is not there keeps the full binary rather than scanning less - Verify your app after upgrading:
keep: autonow actually trims the native engine; if something is missing, state it withkeep: [render, …] - Fixed
setupignoring your config when run from a subfolder of your project — both lanes now locate your app from its own.dart_tool/, not from the working directory - Fixed
keep: autokeeping every capability on native — the build hook scanned its own package instead of your app; it now derives your app from the hook's output path (web was never affected) - Fixed the native keep decision never re-evaluating — your source is now a hook dependency, so adding a
sign()call recompiles the engine with signatures
Commits since v4.0.0 (5)
- 1b5edb1 stamp: asset hashes for v4.1.0
- bbf0ff8 release: v4.1.0
- 00054ef release: promote dev → prod (v4.1.0) (#210)
- bd94ef4 Merge branch 'prod' into dev
- 65f4233 feat: scan-dirs, and make keep: auto actually scan your app (#209)
4.0.0 #
- Breaking: the engine is configured with three flat keys under
hooks: user_defines: pdf_manipulator:—keep(auto,[render, …], or omit for everything),detector(only withkeep: auto) andbuild. Migrate:trim: auto→keep: auto,trim: {keep: […]}→keep: […],trim-detector: X→detector: X, dropsetup --trimand re-runflutter pub run pdf_manipulator:setup; an invalid config fails the build with a clear message - Added
build:in the same block —speed(default, prebuilt),size(smaller, opt-level z) ordebug(symbols for native crash traces);sizeanddebugcompile from source and need Rust - Changed the prebuilt-binary download to retry and resume over HTTP Range, so one network blip on a large asset no longer forces a from-source compile
- Fixed a cryptic
feature edition2024 is requiredcargo error on older Rust toolchains — the build checks the required Rust version first and names therustupcommand to run (#183 reported by @mrhazelh)
Commits since v3.0.0 (19)
- 56ab37f stamp: asset hashes for v4.0.0
- 29d564f release: v4.0.0
- c4f6afc release: promote dev → prod (#208)
- b624f54 Merge branch 'prod' into dev
- 7502a31 feat!: engine config → keep / detector / build; one compile driver; Rust pin+gate (#183); resilient downloads (#185)
- cca99f0 ci: bump all action refs (workflows + composites) (#207)
- 5e9c33f chore: refresh lockfiles (#205)
- 551491b chore: bump Flutter SDK (#204)
- b983534 ci: one owner for all action refs (whuppi/ci v2.4.0), Dependabot = pub only (#206)
- 8927f03 ci: revert Renovate — back to dependabot + upgrade-check (#201)
- c25c058 ci: Renovate — no hourly PR limit for the go-live backlog (#194)
- e5c7afe ci: Renovate — open bump PRs immediately (drop not-pending) (#191)
- 37af265 ci: Renovate — disable commit statuses (unblock PR creation) (#189)
- d52959c ci: go live on Renovate — remove dependabot + upgrade-check shared job (#188)
- bd510b6 ci: tune Renovate config (pinDigests + schedules) (#187)
- a474ca5 ci: add self-hosted Renovate (replaces dependabot + sweeps) (#186)
- da98a3e chore: bump the deps group with 2 updates (#181)
- ab9217b chore: refresh lockfiles (#184)
- 2364765 chore: bump Flutter SDK (#182)
3.0.0 #
- Breaking: flattening CJK or emoji form values no longer uses a bundled font (4.4 MB on every install) → register one:
await pdf.registerFallbackFont(PdfFallbackFontKind.cjk, fontBytes)(.emojifor emoji); without one the value is still saved, only the baked-in look falls back to the field's font - Breaking (only if you took the retracted 2.2.0):
trim-detector: analyzeris nowscan→ change it or delete the line, it is the default - Engine updated — web: re-run
flutter pub run pdf_manipulator:setup --force web(native updates itself) - Added trim — keep only the features your app uses:
trim: autounderhooks: user_defines: pdf_manipulator:, ortrim: {keep: [render, signatures]}; on web also runflutter pub run pdf_manipulator:setup --trim; needs Rust, compiled once and cached (#167) - Added
Pdf.registerFallbackFont(PdfFallbackFontKind, Uint8List) - Changed the default binary — dead engine surfaces, barcode support and the embedded fonts are gone: native 28.7 MB → 21.1 MB, gzipped web download 11.3 MB → 7.3 MB; no action needed
- Changed the web build to compile wasm-bindgen and wasm-opt inside the engine's cargo workspace —
wasm-bindgen-cli,binaryenandjqare no longer needed, Rust is the only requirement (#177 reported by @DarkWingMcQuack) - Fixed the package forcing an old
analyzerversion onto your app — the dependency is gone;trim: autouses a dependency-free scan that can only keep slightly more than you use, never less (#171 reported by @DarkWingMcQuack) - Fixed the package archive missing the engine's
Cargo.lock, which broketrimand every compile-from-source path (#171 reported by @DarkWingMcQuack) - Fixed the web compile error telling you to install
wasm-pack— it now names the tool it actually misses, with the install command - Fixed
trim: autocounting member names inside comments as usage — the scan ignores comments and prints where each kept member matched, e.g.render (lib/preview.dart:12)(#175 reported by @DarkWingMcQuack) - Fixed source builds failing with "rustup: command not found" on Rust installs not managed by rustup — the build asks rustc which targets are installed and uses rustup only as the fallback (#176 reported by @DarkWingMcQuack)
Commits since v2.2.0 (9)
- 2e710e6 stamp: asset hashes for v3.0.0
- 705ce19 release: v3.0.0
- eeb322d chore: promote dev to prod (3.0.0) (#179)
- 9fadb24 Merge branch 'prod' into dev
- afd3b45 fix: Rust-only trim toolchain — comment-aware scan, rustc target probe, workspace-locked wasm tools (#178)
- 7322e8d chore: refresh lockfiles (#174)
- e423aad ci: run analyze-floor in make check and guard battery-runner completeness
- 4066afa docs(roadmap): record_use ^0.6.0 pin reason + bump trigger (#173)
- 23fe620 fix: ship vendor Cargo.lock in the pub tarball + tarball gate (#171) (#172)
2.2.0 #
Retracted on pub.dev: the published archive was missing a build file (the engine's
Cargo.lock), breakingtrimand compile-from-source installs. Superseded by 3.0.0, which consolidates everything here.
- Breaking: flattening CJK or emoji form values no longer uses a bundled font (4.4 MB on every install) → register one:
await pdf.registerFallbackFont(PdfFallbackFontKind.cjk, fontBytes)(.emojifor emoji); without one the value is still saved, only the baked-in look falls back to the field's font - Engine updated — web: re-run
flutter pub run pdf_manipulator:setup --force web(native updates itself) - Added trim — keep only the features your app uses:
trim: autounderhooks: user_defines: pdf_manipulator:, ortrim: {keep: [render, signatures]}; on web also runflutter pub run pdf_manipulator:setup --trim; needs Rust, compiled once and cached (#167) - Added
Pdf.registerFallbackFont(PdfFallbackFontKind, Uint8List) - Changed the default binary — dead engine surfaces, barcode support and the embedded fonts are gone: native 28.7 MB → 21.1 MB, gzipped web download 11.3 MB → 7.2 MB; no action needed
Commits since v2.1.4 (8)
- c2d8163 stamp: asset hashes for v2.2.0
- 1a51770 release: v2.2.0
- 2002f69 chore: promote dev to prod (2.2.0) (#170)
- 6ce511d Merge branch 'prod' into dev
- f15167e chore: bump pinned versions (#168)
- ff1309d feat: trim — ship only the ops the app calls (#167) (#169)
- 41155eb ci: bump dorny/paths-filter from 4.0.1 to 4.0.2 in the actions group (#165)
- 7cde443 chore: refresh lockfiles (#166)
2.1.4 #
- Engine updated — web: re-run
flutter pub run pdf_manipulator:setup --force web(native updates itself) - Fixed
flattenFormsdropping a field's value when fill and flatten happen in separate editor sessions — the appearance is regenerated from the persisted/V(#161 reported by @DarkWingMcQuack) - Fixed
addImageStamperasing a page's form widgets when/Annotsis an indirect reference (#161 reported by @DarkWingMcQuack) - Fixed a reopened filled form rendering blank where its value should appear — the renderer regenerates a widget's appearance from
/Vunder/NeedAppearances, matching the flattener
Commits since v2.1.3 (8)
- b7fdb35 stamp: asset hashes for v2.1.4
- 260091e release: v2.1.4
- 14cd751 chore: promote dev to prod (2.1.4) (#164)
- cefb01f Merge branch 'prod' into dev
- 0f751b1 docs: 2.1.4 — split-session flatten, indirect /Annots stamp, NeedAppearances render (#163)
- 0245950 fix: #161 split-session flatten + indirect /Annots stamp (bump pdf_oxide v0.3.73 / office_oxide v0.1.3) (#162)
- 7dd115d chore: refresh lockfiles (#160)
- 6e7e8fa chore: bump Flutter SDK (#159)
2.1.3 #
- Engine updated — web: re-run
flutter pub run pdf_manipulator:setup --force web(native updates itself) - Fixed
setFormFieldValuereporting field-not-found on forms whose field names are raw UTF-8 (LibreOffice-class producers) — one spec-tolerant text-string decoder covers UTF-16, UTF-8 and PDFDocEncoding (#155) - Fixed
flattenFormsbaking mojibake for values outside ASCII (ß→ß) — values decode per ISO 32000-1 §7.9.2.2 and appearance text is written in WinAnsi (#155) - Fixed fill → flatten silently dropping the value on widgets without an appearance stream when the field name is non-ASCII — the flattener and the form extractor decode names the same way (#155)
- Fixed flattening CJK and emoji values drawing nothing — the bundled fallback font ships in native and web builds (#155)
- Fixed document metadata (
getTitleand friends) mangling non-ASCII on read, and writes now encode per spec (#155)
Commits since v2.1.2 (7)
- 6aa4e45 stamp: asset hashes for v2.1.3
- 99c6e61 release: v2.1.3
- cce6645 chore: promote dev to prod (2.1.3) (#158)
- efa47f2 Merge branch 'prod' into dev
- 9ed0c7c docs: 2.1.3 — form text-string encoding fixes (#157)
- 10dee1f chore: bump Flutter SDK (#154)
- fb5ee1f fix: form fill/flatten non-ASCII text handling (ß, umlauts, CJK) (#156)
2.1.2 #
- Engine updated — web: re-run
flutter pub run pdf_manipulator:setup --force web(native updates itself) - Fixed a Flutter Web WASM (
dart2wasm) compile failure — a switch overObject?that dart2js accepted was non-exhaustive under dart2wasm (#145 reported by @DarkWingMcQuack) - Fixed pub.dev not advertising Flutter Web support — the web runtime resolves to a stub default that
panacan analyze
Commits since v2.1.1 (31)
- 99d9159 stamp: asset hashes for v2.1.2
- 398d566 release: v2.1.2
- 9b21629 chore: promote dev to prod (2.1.2) (#153)
- 4f61ed1 Merge branch 'prod' into dev
- ec338d8 ci: bump whuppi/ci to v2.0.4 (#151)
- 8ae80af ci: bump whuppi/ci to v2.0.3 (#150)
- 6c267f8 ci: bump whuppi/ci to v2.0.2 (#149)
- 711055d ci: bump whuppi/ci to v2.0.1 (#148)
- f8fdf61 docs: 2.1.2 — dart2wasm web fix + web platform on pub.dev (#147)
- 7c0e15a fix: dart2wasm web build; adopt whuppi/ci v2.0.0 dual-compiler gate (#146)
- 6fc0ec3 chore: adopt whuppi/ci v1.0.8 (#144)
- f724639 build: adopt the shared platforms gate + shell lint (#142)
- f237ade ci: align dependabot/labels/upgrade-body with the workspace shape (#141)
- 6fe4598 chore: bump pinned versions (#139)
- f05ed54 build: shared strict analyze gate + whuppi/ci pin bump to v1.0.6 (#140)
- a98a69f docs: fix stale branch-protection recipe (#138)
- aa20ef0 ci: bump whuppi/ci shared refs to v1.0.4 (#137)
- 1614841 ci: migrate onto the shared whuppi/ci
@v1.0.1 (#136) - 79dc1f8 chore: bump pinned versions (#134)
- ffb3048 fix: show web platform support on pub.dev (stub-default seam) + pana platform gate (#133)
- ed305ea chore: bump pinned versions (#130)
- a82d751 chore: refresh lockfiles (#131)
- 1ccf266 fix(ci): resolve fvm on windows via native fvm.exe, not a .bat shim (#132)
- 657804e chore: promote dev to prod (#129)
- 9af712c Merge branch 'prod' into dev
- af178e9 fix(ci): refresh the example lockfile with flutter, not dart (#128)
- 9a8f5d0 chore: bump pinned versions (#127)
- 21368ff chore: refresh lockfiles (#125)
- cce4135 ci: verify the dependency floor compiles (analyze on oldest deps) (#126)
- 464f06c chore: bump pinned versions (#124)
- 0a58c7b ci: gate .gitmodules to the owner (#123)
2.1.1 #
- Fixed the README banner not rendering on pub.dev — the
<picture>element is flattened to a plain image in the published package
Commits since v2.1.0 (14)
- 655a804 stamp: asset hashes for v2.1.1
- ae38450 release: v2.1.1
- 7295a0e chore: promote dev to prod (2.1.1) (#122)
- e9c3bd5 Merge branch 'prod' into dev
- 3ac56cb ci: unblock the release pipeline + supply-chain & workflow hardening (#121)
- 8c63ea2 chore: promote dev to prod (2.1.1) (#119)
- cd4f499 Merge branch 'prod' into dev
- c9ef5d0 fix(ci): re-supply git push auth in release.sh (#120)
- 2724150 docs: add 2.1.1 changelog entry for the README fix (#118)
- 16d2241 ci: declare repo labels as code with a sync workflow (#117)
- dc1037d ci: harden CI to zizmor-auditor zero with a supply-chain SSOT (#113)
- 441ec72 ci: bump actions/stale from 9 to 10 in the actions group (#114)
- 2dde3f0 ci: auto-close resolved issues with an opt-out guard (#112)
- 3dbae4e ci: flatten README
banner for the pub.dev tarball (#111)
2.1.0 #
- Engine updated — web: re-run
flutter pub run pdf_manipulator:setup --force web(native updates itself) - Added document producer and creation-date metadata —
PdfEditor.setProducer()/getProducer()andsetCreationDate()/getCreationDate()(raw PDF date strings, e.g.D:20240101120000Z), plusPdfDoc.producer,PdfDoc.creator, andPdfDoc.creationDateread on open - Fixed
addImageStamprendering a transparent-background PNG as a solid black box — the alpha channel ships as a grayscale/SMask(#103 reported by @DarkWingMcQuack) - Fixed the
RenderedPage.datadoc —render()returns PNG-encoded bytes (decode to read pixels), not raw RGBA
Commits since v2.0.1 (11)
- 5f06717 stamp: asset hashes for v2.1.0
- cefb51e release: v2.1.0
- f8c7bf1 chore: promote dev to prod (#109)
- 4bb7149 ci: add changelog version check (#110)
- 779495f Merge branch 'prod' into dev
- 2b5c35e feat: add producer and creation-date document metadata (#108)
- cc837da docs: changelog 2.0.2 — addImageStamp PNG transparency fix (#107)
- 5392e95 ci: bump actions/checkout from 6 to 7 in the actions group across 1 directory (#106)
- eb15b4d fix: addImageStamp preserves PNG transparency (no black box) (#104)
- 271c1d5 ci: vendored-engine cargo tests + consistent job names (#105)
- 0d623bf ci: bump actions/labeler from 5 to 6 in the actions group (#102)
2.0.1 #
Docs-only — no code or API changes.
- README and every guide (architecture, capabilities, migration, updating, contributing) rewritten, restructured, and verified against the source
Commits since v2.0.0 (6)
- 9afea02 stamp: asset hashes for v2.0.1
- a393f2b release: v2.0.1
- 15ea53a chore: promote dev to prod (2.0.1) (#101)
- 8a41292 Merge branch 'prod' into dev
- 9786314 feat: pdf_manipulator/io.dart + README & docs polish (#100)
- c59fd4a chore: bump Flutter 3.44.1 → 3.44.2 (#98)
2.0.0 #
The concurrency rewrite. Every operation now runs fully isolated on its own lane — a dedicated Rust thread (native) or Web Worker (web).
- Breaking:
webCoordinatorUrl+webWorkerUrl→ onewebLaneWorkerUrl - Breaking: web now ships
lane_worker.js(wascoordinator.js+worker.js) - Engine updated — web: re-run
flutter pub run pdf_manipulator:setup --force web(native updates itself) - Every method returns
PdfTask<T>— aFuturepluscancel(); cancelling kills just that job pdf.dispose()is instant — no joins, no timeouts, no leaks; in-flight ops resolve withPdfCancelled- Operations on different handles now run truly parallel on native (1.x serialized them)
- Lane budgets never error — past the cap, work queues instead of failing
- Added
PdfConfig.maxLanes— concurrent lanes per instance (default: half the cores, min 2) - All three web modes (JSPI, Atomics, OPFS) behave identically; a bad worker/WASM URL now fails instantly with a typed error instead of hanging
- Fixed flattening — translated appearances no longer land off-page, unfilled fields render their default value, stamps render their label
- Fixed missing WASM binaries in the 1.0.6 release
- Fixed Android 16 KB page-size alignment for Google Play API 35+ (PR whuppi/pdf_oxide#1, @Binary-Parse)
Commits since v1.0.6 (9)
- ad1cb65 stamp: asset hashes for v2.0.0
- e8134c3 release: v2.0.0
- 60e4200 chore: promote dev to prod (1.0.7) (#92)
- b3d1823 feat: lane runtime rewrite + test, docs & CI overhaul (#97)
- e202281 fix: release gate tag-check fallback for workflow_dispatch (#93)
- d031a96 Merge branch 'prod' into dev
- fb93efa feat: 16 KB Android page-size alignment (vendor/pdf_oxide update) (#91)
- 78dfd87 fix(ci): WASM release assets + binary verification gate (#89)
- 0091e99 fix(ci): WASM artifacts missing from releases + binary verification
1.0.6 #
- Fixed release build routing for consumer builds (by @Binary-Parse)
- Fixed Windows NDK linker
.cmdextension for Android cross-compilation (by @Binary-Parse) - Added CI verify tests — release builds now verified on all 6 targets (Android, iOS, macOS, Linux, Windows, Web)
Commits since v1.0.5 (9)
- f53de02 stamp: asset hashes for v1.0.6
- 9ea4073 release: v1.0.6
- c8ff236 chore: promote dev to prod (#88)
- cc4f9b8 Merge branch 'prod' into dev
- 0679c51 chore: add 1.0.6 changelog entries (#86)
- ce9d7ec fix(ci): release gate only triggers on new changelog versions (#85)
- 5083450 refactor(ci): capability-based architecture + verify release builds (#82)
- 0132518 fix(hook): append .cmd to the NDK clang linker on Windows hosts (Android cross-compile fails) (#81)
- 453b39e fix(hook): add link.dart passthrough, build.json, release-build tests (#80)
1.0.5 #
- Fixed README version not stamped on pub.dev
- Updated tracking links for web build hook support
Commits since v1.0.4 (4)
- 8d3e363 stamp: asset hashes for v1.0.5
- 86ade5b release: v1.0.5
- 1288d12 chore: promote dev to prod (#79)
- 694c96e chore: 1.0.5 release — fix README stamp + tracking links (#78)
1.0.4 #
- Web setup now verifies all assets against release hashes — detects stale files automatically
setupsupports--forceto re-download everything,--nativeto pre-fetch the native binary
Commits since v1.0.3 (6)
- 902cf4f stamp: asset hashes for v1.0.4
- d1266fb release: v1.0.4
- 5cd981f chore: promote dev to prod (#77)
- cdabb02 Merge branch 'prod' into dev
- 8dbad3b chore: add 1.0.4 changelog entries (#76)
- d912aa1 feat: unified asset resolver — same waterfall for native and web (#75)
1.0.3 #
- Fixed changelog on pub.dev
Commits since v1.0.2 (10)
- 6bbaaa8 stamp: asset hashes for v1.0.3
- 1339dc4 release: v1.0.3
- 9b228dc chore: promote dev to prod (#73)
- 223c1a4 Merge branch 'prod' into dev
- 3e0ebd8 chore: add 1.0.3 changelog entries (#72)
- 6a33c47 chore: promote dev to prod (#71)
- 77c8738 feat(ci): preview filtered changelog in CI logs before publish approval (#70)
- c7ffae8 docs: move slopfairy manual comments to workspace rule
- d4471ac docs: add slopfairy manual comments + changelog preview recipes
- ab0a74e fix(ci): same-file read-write race in stamp-changelog + bash 3.2 compat
1.0.2 #
- Fixed changelog on pub.dev missing commit history between versions
Commits since v1.0.1 (10)
- e420ba0 stamp: asset hashes for v1.0.2
- 1154d43 release: v1.0.2
- 0b610c0 fix(ci): edit asset_hashes.dart between markers instead of overwriting
- 91bd9ad fix(ci): add doc comment to generated asset_hashes.dart constant
- bd78225 fix(ci): version-scoped staging branch + updated UPDATING.md
- eb2e822 fix(ci): delete stale _release-staging before push to avoid lock conflicts
- 6990128 fix(ci): fall back to HEAD when tag doesn't exist yet in commits_collapsible
- 0ddc9ce fix(ci): correct repo fallback to whuppi/pdf_manipulator
- 83b44cb feat(ci): rewrite release pipeline — single release.sh, changelog builder, idempotent (#68)
- 392aaa8 fix(ci): version-level release concurrency + branch-file gate (#67)
1.0.1 #
- Added public API doc comments across all exported classes and methods
- Minimum Android API corrected from 35 to 21 (Android 5.0)
- Setup command is now
flutter pub run pdf_manipulator:setup(avoids triggering native build hooks withdart run)
Commits since v1.0.0 (48)
- 4ed5b3b release: v1.0.1
- 722b2dd chore: add 1.0.1 changelog entry (#65)
- d04b556 chore: add 1.0.1-dev.0 prerelease changelog entry (#64)
- 52b6d52 ci: bump the actions group across 1 directory with 5 updates (#57)
- 9c798ee fix(ci): notify maintainer to recreate dependabot PRs on new pushes
- 4ade698 docs: explain Windows DLL lock in dispose test (#60)
- e8dee7b fix: analyzer clean + web CI + native dispose safety
- ea9c961 ci: write bore port to artifact for API access
- 88197b4 ci: split setup/keepalive steps so SSH port shows immediately
- 07749ec ci: fix bore version (0.6.0), serveo was dead
- 4b4d6e5 ci: raw sshd + serveo.net tunnel (no binary downloads)
- 4a4bd3a ci: raw sshd + bore tunnel, no tmate, 5hr timeout
- 015b951 ci: update debug-ssh workflow
- 5b71adf ci: add debug-ssh workflow for interactive CI debugging
- 5874c1a chore: bump Flutter 3.44.0 → 3.44.1 (#50)
- a26b3c2 chore: add Dependabot for GitHub Actions updates (#56)
- 684b840 docs: fix rendering + add fvmrc pinning section (#54)
- c06e2d9 fix: flutter-upgrade PRs created as draft (#53)
- 9d18776 fix: slopfairy PR#51 suggestions — printf credentials + remove redundant gitignore (#52)
- a548f42 feat: secrets.sh + per-env pub.dev credentials (#51)
- 8ac73ea fix: add vendor false_secrets at stamp-tag time (#49)
- 53c52aa fix: force-add Cargo.lock in stamp-tag (gitignored in vendor) (#48)
- cbae62b fix: auto-detect wasm-bindgen-cli version from Cargo.lock (#47)
- 3e4e5f6 fix: force-push temp branch + stale comment refs (#46)
- 81a789f fix: push stamped commit before creating release tag (#45)
- 90617d2 fix: mode guard was rejecting --github-notes (#44)
- a07b935 fix: install snippets on release, generic version, cancel-in-progress (#43)
- 8b4387f feat: unified release pipeline with approval gate (#42)
- 7b1fac9 fix: move asset_hashes.dart to lib/src/hook/ (#41)
- 7637a29 fix: false_secrets for test PEM keys + pin example .fvmrc (#40)
- b16ccc4 fix: single stamp_release.sh for all pre-publish stamping (#39)
- 51c845b fix: API-based asset hashes, MSVC-first Windows, git identity (#38)
- 6d44016 fix: publish fails on dirty git + create-release YAML syntax (#36)
- 5909946 fix: YAML syntax error in create-release.yml (#35)
- ab2e79f fix: auto-generate commit lists + asset hashes at publish time (#34)
- 6adbed3 docs: add rebuild-release recovery flow to UPDATING.md (#33)
- 193c460 fix: compile per-platform — CI builds only the targets it installed (#32)
- f874171 fix: add validation gate to publish.yml (#31)
- 8da554d fix: quote YAML expression in publish.yml (#30)
- 7fc4ae6 fix: publish.yml errors on branch push — replace all bare inputs.tag (#29)
- d5630a0 docs: fix UPDATING.md release section — correct workflow names, document auto-trigger chain
- 2d6d65c fix: publish.yml fails on branch push due to inputs.tag in concurrency
- 26ce093 feat!: cross-platform Rust engine, streaming I/O, web WASM (#28)
- 7456369 chore: rename main → prod (workflows, docs, ruleset) (#26)
- 8dcc13f ci: commit-msg hook (merge blocker + printf), promotion-check, hooksPath docs (#23)
- 074868f ci: fix release-please config and PR formatting (#21)
- 945a51f ci: add release-please + tag-triggered release pipeline (#19)
- e5e698e ci: enforce conventional commits via hook + PR title check (#17)
1.0.0 #
Complete ground-up rewrite — new Rust engine, new instance API, cross-platform (previously Android only). The package docs carry the migration guide and the full capability list.
- Engine: pdf_oxide (Rust, MIT/Apache-2.0) replaces the Android-only backend
- Targets: iOS, Android, macOS, Windows, Linux, Web — previously Android only
- API: instance-based
Pdf()withdispose(); batch editing viapdf.edit(source), create from scratch viapdf.build() - I/O:
DataSourcein,DataSinkout — no file paths, nodart:io, same code on every target - Errors: typed
PdfErrorsealed class — no morePlatformException - Performance: every operation off the main thread, no full-file buffers
- SDK: requires Dart >=3.10.0
0.5.9 #
- The last release of Android-only version before the cross-platform rewrite
Commits since initial (301)
- cd83915 stamp: asset hashes for v5.0.1
- 3b9d837 release: v5.0.1
- dfa7c6b release: promote dev → prod (v5.0.1) (#259)
- f08b245 Merge branch 'prod' into dev
- 51a259f fix: every keep-set compiles, and web opens R2-R4 encrypted PDFs (#256, #257) (#258)
- 7896412 chore: bump Flutter SDK (#254)
- f2a90a9 chore: refresh lockfiles (#253)
- 13d080c chore: bump pinned versions (#252)
- 5f34453 chore: bump the deps group with 2 updates (#255)
- 6cbe43b chore: refresh lockfiles (#251)
- 02ae148 release: promote dev → prod (v5.0.0) (#250)
- d39c358 Merge branch 'prod' into dev
- 83d218f feat!: 5.0.0 — image reducer, image edits, and every PLANNED capability row (#249)
- b72a04d fix: DOCX tables convert at their declared widths (#243); vendors synced; web worker budget frees a slot on confirmed death (#248)
- e16164f chore: bump pinned versions (#245)
- afd708e chore: refresh lockfiles (#246)
- bd388a8 chore: bump Flutter SDK (#247)
- 30cd3f0 chore: bump code_assets from 1.2.1 to 2.0.0 in the deps group (#244)
- 2bc950c release: promote dev → prod (v4.2.0) (#242)
- 357d6e4 Merge branch 'prod' into dev
- 750cc12 fix: checked checkboxes and selected radios flatten as set (#215) (#218)
- 97a47b1 ci: whuppi/ci v2.7.3 (#241)
- 6649f0c ci: pkg: Web rows keep their host hook tree on ghcr under their own family (#240)
- cd33e85 ci: int: Android rows keep their hook trees on ghcr under their own family (#239)
- b4c655c ci: verify: Android and verify: macOS keep their hook trees on ghcr under their own families (#238)
- 5a89cd4 ci: whuppi/ci v2.7.2 (#237)
- 6e033aa ci: compile rows keep their release trees on ghcr under their own family (#236)
- 20b978a ci: whuppi/ci 2.7.0 → 2.7.1 (SDK cache key carries the runner image version) (#235)
- 3afd1b6 ci: cache diagnostics — restored-artifacts summary; probe dispatch input (#234)
- 4725c8d ci: whuppi/ci 2.6.3 → 2.7.0; Android SDK components from ghcr on the emulator rows (#233)
- 070689a ci: the Rust test family keeps its whole target trees on ghcr.io (#232)
- 2038a2c ci: engine-artifacts archive carries the crates' fingerprints and build dirs (#231)
- 013ebdf ci: whuppi/ci 2.6.1 → 2.6.3 (ghcr restore resilience, Windows symlinks, emulator version) (#230)
- 2745f3f ci: whuppi/ci 2.6.0 → 2.6.1 (SDK cache keyed on the .fvmrc version; emulator version parse) (#229)
- fe18919 ci: keep the big caches on ghcr.io via whuppi/ci 2.6.0 oci-cache (#228)
- c6d178e ci: compile rows share the deps archive and own only their engine-artifacts archive (#227)
- 28f2d02 ci: warm the caches from dev; PR runs read only; delete a PR's caches on close (#226)
- a7bb13f ci: run the engine test suites through cargo-nextest and link with mold (#225)
- 6d2c92d ci: cache cargo's target dir with rust-cache; one target dir for every build path; cold guard (#224)
- d17f23c chore: refresh lockfiles (#222)
- 048a591 ci: bump all action refs (workflows + composites) (#213)
- e992002 chore: reformat under the Flutter 3.47.2 formatter (#221)
- 7d27b2a chore: bump pinned versions (#211)
- f6b303b chore: bump Flutter SDK (#214)
- dee1675 ci: bump whuppi/ci refs to v2.4.1 (#220)
- 812f1a4 docs: point S8 at where release.sh actually lives (#219)
- 76adf8e test: mark hook_app_root_test dart:io-exempt (#217)
- 00054ef release: promote dev → prod (v4.1.0) (#210)
- bd94ef4 Merge branch 'prod' into dev
- 65f4233 feat: scan-dirs, and make keep: auto actually scan your app (#209)
- c4f6afc release: promote dev → prod (#208)
- b624f54 Merge branch 'prod' into dev
- 7502a31 feat!: engine config → keep / detector / build; one compile driver; Rust pin+gate (#183); resilient downloads (#185)
- cca99f0 ci: bump all action refs (workflows + composites) (#207)
- 5e9c33f chore: refresh lockfiles (#205)
- 551491b chore: bump Flutter SDK (#204)
- b983534 ci: one owner for all action refs (whuppi/ci v2.4.0), Dependabot = pub only (#206)
- 8927f03 ci: revert Renovate — back to dependabot + upgrade-check (#201)
- c25c058 ci: Renovate — no hourly PR limit for the go-live backlog (#194)
- e5c7afe ci: Renovate — open bump PRs immediately (drop not-pending) (#191)
- 37af265 ci: Renovate — disable commit statuses (unblock PR creation) (#189)
- d52959c ci: go live on Renovate — remove dependabot + upgrade-check shared job (#188)
- bd510b6 ci: tune Renovate config (pinDigests + schedules) (#187)
- a474ca5 ci: add self-hosted Renovate (replaces dependabot + sweeps) (#186)
- da98a3e chore: bump the deps group with 2 updates (#181)
- ab9217b chore: refresh lockfiles (#184)
- 2364765 chore: bump Flutter SDK (#182)
- eeb322d chore: promote dev to prod (3.0.0) (#179)
- 9fadb24 Merge branch 'prod' into dev
- afd3b45 fix: Rust-only trim toolchain — comment-aware scan, rustc target probe, workspace-locked wasm tools (#178)
- 7322e8d chore: refresh lockfiles (#174)
- e423aad ci: run analyze-floor in make check and guard battery-runner completeness
- 4066afa docs(roadmap): record_use ^0.6.0 pin reason + bump trigger (#173)
- 23fe620 fix: ship vendor Cargo.lock in the pub tarball + tarball gate (#171) (#172)
- 2002f69 chore: promote dev to prod (2.2.0) (#170)
- 6ce511d Merge branch 'prod' into dev
- f15167e chore: bump pinned versions (#168)
- ff1309d feat: trim — ship only the ops the app calls (#167) (#169)
- 41155eb ci: bump dorny/paths-filter from 4.0.1 to 4.0.2 in the actions group (#165)
- 7cde443 chore: refresh lockfiles (#166)
- 14cd751 chore: promote dev to prod (2.1.4) (#164)
- cefb01f Merge branch 'prod' into dev
- 0f751b1 docs: 2.1.4 — split-session flatten, indirect /Annots stamp, NeedAppearances render (#163)
- 0245950 fix: #161 split-session flatten + indirect /Annots stamp (bump pdf_oxide v0.3.73 / office_oxide v0.1.3) (#162)
- 7dd115d chore: refresh lockfiles (#160)
- 6e7e8fa chore: bump Flutter SDK (#159)
- cce6645 chore: promote dev to prod (2.1.3) (#158)
- efa47f2 Merge branch 'prod' into dev
- 9ed0c7c docs: 2.1.3 — form text-string encoding fixes (#157)
- 10dee1f chore: bump Flutter SDK (#154)
- fb5ee1f fix: form fill/flatten non-ASCII text handling (ß, umlauts, CJK) (#156)
- 9b21629 chore: promote dev to prod (2.1.2) (#153)
- 4f61ed1 Merge branch 'prod' into dev
- ec338d8 ci: bump whuppi/ci to v2.0.4 (#151)
- 8ae80af ci: bump whuppi/ci to v2.0.3 (#150)
- 6c267f8 ci: bump whuppi/ci to v2.0.2 (#149)
- 711055d ci: bump whuppi/ci to v2.0.1 (#148)
- f8fdf61 docs: 2.1.2 — dart2wasm web fix + web platform on pub.dev (#147)
- 7c0e15a fix: dart2wasm web build; adopt whuppi/ci v2.0.0 dual-compiler gate (#146)
- 6fc0ec3 chore: adopt whuppi/ci v1.0.8 (#144)
- f724639 build: adopt the shared platforms gate + shell lint (#142)
- f237ade ci: align dependabot/labels/upgrade-body with the workspace shape (#141)
- 6fe4598 chore: bump pinned versions (#139)
- f05ed54 build: shared strict analyze gate + whuppi/ci pin bump to v1.0.6 (#140)
- a98a69f docs: fix stale branch-protection recipe (#138)
- aa20ef0 ci: bump whuppi/ci shared refs to v1.0.4 (#137)
- 1614841 ci: migrate onto the shared whuppi/ci
@v1.0.1 (#136) - 79dc1f8 chore: bump pinned versions (#134)
- ffb3048 fix: show web platform support on pub.dev (stub-default seam) + pana platform gate (#133)
- ed305ea chore: bump pinned versions (#130)
- a82d751 chore: refresh lockfiles (#131)
- 1ccf266 fix(ci): resolve fvm on windows via native fvm.exe, not a .bat shim (#132)
- 657804e chore: promote dev to prod (#129)
- 9af712c Merge branch 'prod' into dev
- af178e9 fix(ci): refresh the example lockfile with flutter, not dart (#128)
- 9a8f5d0 chore: bump pinned versions (#127)
- 21368ff chore: refresh lockfiles (#125)
- cce4135 ci: verify the dependency floor compiles (analyze on oldest deps) (#126)
- 464f06c chore: bump pinned versions (#124)
- 0a58c7b ci: gate .gitmodules to the owner (#123)
- 7295a0e chore: promote dev to prod (2.1.1) (#122)
- e9c3bd5 Merge branch 'prod' into dev
- 3ac56cb ci: unblock the release pipeline + supply-chain & workflow hardening (#121)
- 8c63ea2 chore: promote dev to prod (2.1.1) (#119)
- cd4f499 Merge branch 'prod' into dev
- c9ef5d0 fix(ci): re-supply git push auth in release.sh (#120)
- 2724150 docs: add 2.1.1 changelog entry for the README fix (#118)
- 16d2241 ci: declare repo labels as code with a sync workflow (#117)
- dc1037d ci: harden CI to zizmor-auditor zero with a supply-chain SSOT (#113)
- 441ec72 ci: bump actions/stale from 9 to 10 in the actions group (#114)
- 2dde3f0 ci: auto-close resolved issues with an opt-out guard (#112)
- 3dbae4e ci: flatten README
banner for the pub.dev tarball (#111) - f8c7bf1 chore: promote dev to prod (#109)
- 4bb7149 ci: add changelog version check (#110)
- 779495f Merge branch 'prod' into dev
- 2b5c35e feat: add producer and creation-date document metadata (#108)
- cc837da docs: changelog 2.0.2 — addImageStamp PNG transparency fix (#107)
- 5392e95 ci: bump actions/checkout from 6 to 7 in the actions group across 1 directory (#106)
- eb15b4d fix: addImageStamp preserves PNG transparency (no black box) (#104)
- 271c1d5 ci: vendored-engine cargo tests + consistent job names (#105)
- 0d623bf ci: bump actions/labeler from 5 to 6 in the actions group (#102)
- 15ea53a chore: promote dev to prod (2.0.1) (#101)
- 8a41292 Merge branch 'prod' into dev
- 9786314 feat: pdf_manipulator/io.dart + README & docs polish (#100)
- c59fd4a chore: bump Flutter 3.44.1 → 3.44.2 (#98)
- 60e4200 chore: promote dev to prod (1.0.7) (#92)
- b3d1823 feat: lane runtime rewrite + test, docs & CI overhaul (#97)
- e202281 fix: release gate tag-check fallback for workflow_dispatch (#93)
- d031a96 Merge branch 'prod' into dev
- fb93efa feat: 16 KB Android page-size alignment (vendor/pdf_oxide update) (#91)
- 78dfd87 fix(ci): WASM release assets + binary verification gate (#89)
- 0091e99 fix(ci): WASM artifacts missing from releases + binary verification
- c8ff236 chore: promote dev to prod (#88)
- cc4f9b8 Merge branch 'prod' into dev
- 0679c51 chore: add 1.0.6 changelog entries (#86)
- ce9d7ec fix(ci): release gate only triggers on new changelog versions (#85)
- 5083450 refactor(ci): capability-based architecture + verify release builds (#82)
- 0132518 fix(hook): append .cmd to the NDK clang linker on Windows hosts (Android cross-compile fails) (#81)
- 453b39e fix(hook): add link.dart passthrough, build.json, release-build tests (#80)
- 1288d12 chore: promote dev to prod (#79)
- 694c96e chore: 1.0.5 release — fix README stamp + tracking links (#78)
- 5cd981f chore: promote dev to prod (#77)
- cdabb02 Merge branch 'prod' into dev
- 8dbad3b chore: add 1.0.4 changelog entries (#76)
- d912aa1 feat: unified asset resolver — same waterfall for native and web (#75)
- 9b228dc chore: promote dev to prod (#73)
- 223c1a4 Merge branch 'prod' into dev
- 3e0ebd8 chore: add 1.0.3 changelog entries (#72)
- 6a33c47 chore: promote dev to prod (#71)
- 77c8738 feat(ci): preview filtered changelog in CI logs before publish approval (#70)
- c7ffae8 docs: move slopfairy manual comments to workspace rule
- d4471ac docs: add slopfairy manual comments + changelog preview recipes
- ab0a74e fix(ci): same-file read-write race in stamp-changelog + bash 3.2 compat
- 0b610c0 fix(ci): edit asset_hashes.dart between markers instead of overwriting
- 91bd9ad fix(ci): add doc comment to generated asset_hashes.dart constant
- bd78225 fix(ci): version-scoped staging branch + updated UPDATING.md
- eb2e822 fix(ci): delete stale _release-staging before push to avoid lock conflicts
- 6990128 fix(ci): fall back to HEAD when tag doesn't exist yet in commits_collapsible
- 0ddc9ce fix(ci): correct repo fallback to whuppi/pdf_manipulator
- 83b44cb feat(ci): rewrite release pipeline — single release.sh, changelog builder, idempotent (#68)
- 392aaa8 fix(ci): version-level release concurrency + branch-file gate (#67)
- 722b2dd chore: add 1.0.1 changelog entry (#65)
- d04b556 chore: add 1.0.1-dev.0 prerelease changelog entry (#64)
- 52b6d52 ci: bump the actions group across 1 directory with 5 updates (#57)
- 9c798ee fix(ci): notify maintainer to recreate dependabot PRs on new pushes
- 4ade698 docs: explain Windows DLL lock in dispose test (#60)
- e8dee7b fix: analyzer clean + web CI + native dispose safety
- ea9c961 ci: write bore port to artifact for API access
- 88197b4 ci: split setup/keepalive steps so SSH port shows immediately
- 07749ec ci: fix bore version (0.6.0), serveo was dead
- 4b4d6e5 ci: raw sshd + serveo.net tunnel (no binary downloads)
- 4a4bd3a ci: raw sshd + bore tunnel, no tmate, 5hr timeout
- 015b951 ci: update debug-ssh workflow
- 5b71adf ci: add debug-ssh workflow for interactive CI debugging
- 5874c1a chore: bump Flutter 3.44.0 → 3.44.1 (#50)
- a26b3c2 chore: add Dependabot for GitHub Actions updates (#56)
- 684b840 docs: fix rendering + add fvmrc pinning section (#54)
- c06e2d9 fix: flutter-upgrade PRs created as draft (#53)
- 9d18776 fix: slopfairy PR#51 suggestions — printf credentials + remove redundant gitignore (#52)
- a548f42 feat: secrets.sh + per-env pub.dev credentials (#51)
- 8ac73ea fix: add vendor false_secrets at stamp-tag time (#49)
- 53c52aa fix: force-add Cargo.lock in stamp-tag (gitignored in vendor) (#48)
- cbae62b fix: auto-detect wasm-bindgen-cli version from Cargo.lock (#47)
- 3e4e5f6 fix: force-push temp branch + stale comment refs (#46)
- 81a789f fix: push stamped commit before creating release tag (#45)
- 90617d2 fix: mode guard was rejecting --github-notes (#44)
- a07b935 fix: install snippets on release, generic version, cancel-in-progress (#43)
- 8b4387f feat: unified release pipeline with approval gate (#42)
- 7b1fac9 fix: move asset_hashes.dart to lib/src/hook/ (#41)
- 7637a29 fix: false_secrets for test PEM keys + pin example .fvmrc (#40)
- b16ccc4 fix: single stamp_release.sh for all pre-publish stamping (#39)
- 51c845b fix: API-based asset hashes, MSVC-first Windows, git identity (#38)
- 6d44016 fix: publish fails on dirty git + create-release YAML syntax (#36)
- 5909946 fix: YAML syntax error in create-release.yml (#35)
- ab2e79f fix: auto-generate commit lists + asset hashes at publish time (#34)
- 6adbed3 docs: add rebuild-release recovery flow to UPDATING.md (#33)
- 193c460 fix: compile per-platform — CI builds only the targets it installed (#32)
- f874171 fix: add validation gate to publish.yml (#31)
- 8da554d fix: quote YAML expression in publish.yml (#30)
- 7fc4ae6 fix: publish.yml errors on branch push — replace all bare inputs.tag (#29)
- d5630a0 docs: fix UPDATING.md release section — correct workflow names, document auto-trigger chain
- 2d6d65c fix: publish.yml fails on branch push due to inputs.tag in concurrency
- 26ce093 feat!: cross-platform Rust engine, streaming I/O, web WASM (#28)
- 7456369 chore: rename main → prod (workflows, docs, ruleset) (#26)
- 8dcc13f ci: commit-msg hook (merge blocker + printf), promotion-check, hooksPath docs (#23)
- 074868f ci: fix release-please config and PR formatting (#21)
- 945a51f ci: add release-please + tag-triggered release pipeline (#19)
- e5e698e ci: enforce conventional commits via hook + PR title check (#17)
- 67edc60 add pre-commit hook: reject commits with gitignored files
- da16d8a untrack example/pubspec.lock (gitignored, should never have been tracked)
- 9a3dc68 fix: .pubignore for vendor/ + compile WASM before web tests
- 02e92a5 fix(ci): checkout in workflows before local composite actions
- 55d9e58 ci: 10 composite actions, zero duplication, test-first flow
- e6bf54b release: manual re-trigger + overwrite existing releases
- 9328919 ci: split WASM into its own compile job
- dfcd65f fix: WASM target + Rust warnings in release CI
- 2dbb00e hook: rewrite using native_toolchain_rust patterns
- 28daa58 hook: use StaticLinking for iOS + install both device and sim targets
- c8f4bfe hook: set NDK linker for Android cargo cross-compilation
- 4e72a4a ci: add x86_64-linux-android rust target for Android emulator tests
- c9c26ab ci: fix android emulator-runner cd not persisting between commands
- eef11c8 ci: commit .metadata, remove destructive flutter create
- f144ba5 ci: fix Android + iOS integration test failures
- 6b9e7d7 updating.md: add submodule commit discipline (3-step sequence)
- bf50a39 submodule: update to include all Rust patches
- 8fcec5f ci: fix pub get failure — skip example deps in Dart-only jobs
- a62a36b roadmap: add upstream v0.3.48 office conversion features
- 621f091 fix upstream URL + expand S1 bump recipe
- 8e67064 provenance: link to fork repo + branch, document fork convention
- b93b9ec v1.0.0 API redesign + web feature parity + doc cleanup
- e7e0338 editor: add missing addStamp + addWatermarkPositioned wrappers
- 4ba4264 fix migration guide + expand contributing
- 0374c59 readme: feature×platform matrix, docs table, community files
- c0e712c bump to 1.0.0, fix stale README references
- 581e844 v1.0.0 — complete ground-up rewrite
- a99fbdb Make plugin compatible with Gradle 8+ while keeping support for older versions
- 4a0102b Update issue templates
- 257bc10 Update issue templates
- 9dc0251 * Fixed error "Build file '\pdf_manipulator\android\build.gradle' should not contain a package statement".
- 8d17db2 * Attempts to fix "x + width must be <= bitmap.width()" exception on some devices in some case of PDF compressing. * Updated documentation regarding PlatformException in Release build: AbstractITextEvent is only for internal usage #2.
- 8e7c094 Update README.md
- 51a54b6 Update README.md
- 939c73f Update README.md
- bbf346f Update README.md
- ad48def Update README.md
- 51eac08 * Updated pub version.
- 5531a95 * Updated dependency.
- 4a787c1 * Pub version update.
- 2a40976 Merge remote-tracking branch 'origin/master'
- bd9155e * Added new description.
- 30ab01b Update README.md
- 2603470 * Updated documentation. * Improved example app.
- bf5ca20 Merge branch 'master' of https://github.com/chaudharydeepanshu/pdf_manipulator
- 083f86c Update README.md
- aab073a Merge branch 'master' of https://github.com/chaudharydeepanshu/pdf_manipulator
- c8b771e Create LICENSE
- 76e31b2 Update README.md
- 64d4388 * Fixes crash on
pdfCompressorwithunEmbedFontsset true for some pdfs. - bcf78e3 * Removed unnecessary catch blocks.
- dc681b6 * Now
pdfDecryptionfinishes with error on BadPasswordException and PdfException. - 22e58a9 * Fixed
imagesToPdfsmethod not working for absolute file paths of files with names containing:. - 0d0a83f * Fixed
imagesToPdfsmethod not working for android absolute file paths. - a31774e * Fixed
imagesToPdfsmethod not working for android uris. * FixedimagesToPdfsadding unnecessary padding to pdfs whencreateSinglePdfis set to false or default. * Updated example and example dependency. - 1dea7a8 * Added
imagesToPdfsmethod for converting images to single pdf or multiple pdfs. - c21c1f1 * Added
pdfEncryptionmethod for pdf encryption. * AddedpdfDecryptionmethod for pdf decryption. * AddedpdfValidityAndProtectionmethod for getting pdf validity and protection info. - c28db0a * Fixed
pdfPagesSizemethod OOM issue also removed redundant properties. - 81ae92c * Added
positionTypeinpdfWatermarkmethod which provides various predefined and allows providing custom watermark positions.* AddedpdfPagesSizemethod for getting size info of pages of pdf. * AddedcustomPositionXCoordinatesList,customPositionYCoordinatesListinpdfWatermark` method for more fine controlling of watermark position. - 18a5dc9 * Added
pdfWatermarkmethod for watermarking pdf. - 6886f97 * Added
unEmbedFontsforpdfCompressor. - c192813 * Added
pdfCompressormethod for compressing pdf. - 48df0f6 *
pdfUriis replaced withpdfPathas nowpdfPathis capable of taking care both URI path and absolute file path. *pdfsUrisis replaced withpdfsPathsas nowpdfsPathsis capable of taking care both URI paths and absolute file paths. * Fixed issue of not being able to use absolute file paths. * Flushing pdfWriters when splitting documents for trying to fix OOfM error in some cases. - db77334 * Support for rotating, deleting and reordering pdf pages. * Fixes OOfM error in some cases. * Fixes few errors in splitting by byte size.
- 439b37d new pub.dev version
- dcd3568 typo fix
- 42ea493 dependencies updated
- b4143c9 Update README.md
- cb740ed Update LICENSE
- 1bb42a3 Update README.md
- 87a7c36 added pdf page deleter functionality
- 90aff66 added other split pdf functions
- d903a62 Initial commit