Skip to content

orchetect/PDFGadget

Repository files navigation

PDFGadget

CI Build Status Platforms - macOS 11+ | iOS 14+ | visionOS 1+ Swift 6.0 Xcode 16 License: MIT

Batch PDF utilities with simple API for Swift. Declarative API for:

  • assigning or removing file attributes (metadata)
  • file filtering, ordering, and merging
  • page management: reordering, collation, copying, moving, and replacement
  • page presentation: rotation, cropping, etc.
  • page content: filtering, removal or burn-in of annotations, removal of file protections

Basic Usage

import PDFGadget

let sources = [URL, URL, URL, ...] // URLs to one or more PDF files
let outputDir = URL.desktopDirectory

The steps of loading source PDFs, performing operations, and saving the resulting PDFs can be performed individually:

let pdfGadget = PDFGadget()

try pdfGadget.load(pdfs: sources)
try pdfGadget.perform(operations: [
    // one or more operations
])

// access the resulting PDF documents in memory
pdfGadget.pdfDocuments // [PDFDocument]

// or save them as PDF files to disk
try pdfGadget.savePDFs(outputDir: outputDir)

Or a fully automated batch operation can be run with a single call to run() by passing in a populated instance of PDFGadget.Settings.

let settings = try PDFGadget.Settings(
    sourcePDFs: sources,
    outputDir: outputDir,
    operations: [
        // one or more operations
    ],
    savePDFs: true
)

try PDFGadget().run(using: settings)

Batch Operations

The following are single operations that may be used in a batch sequence of operations.

Note

More operations may be added in future on an as-needed basis.

File Operations

  • New empty file
  • Clone file
  • Filter files
  • Merge files
  • Set file filename(s)
  • Set or remove file attributes (metadata such as title, author, etc.)
  • Remove file protections (encryption and permissions)

Page Operations

  • Filter pages
  • Copy pages
  • Move pages
  • Replace pages by copying or moving them
  • Reverse page order (all or subset of pages)
  • Rotate pages
  • Crop pages
  • Split file into multiple files

Page Content Operations

  • Filter annotations (by types, or remove all)
  • Burn in annotations
  • Extract plain text (to system pasteboard, to file on disk, or to variable in memory)

Getting Started

  1. Add the package to your application as a dependency using Swift Package Manager
  2. import PDFGadget

Author

Coded by a bunch of 🐹 hamsters in a trenchcoat that calls itself @orchetect.

License

Licensed under the MIT license. See LICENSE for details.

Sponsoring

If you enjoy using PDFGadget and want to contribute to open-source financially, GitHub sponsorship is much appreciated. Feedback and code contributions are also welcome.

Community & Support

Please do not email maintainers for technical support. Several options are available for issues and questions:

  • Questions and feature ideas can be posted to Discussions.
  • If an issue is a verifiable bug with reproducible steps it may be posted in Issues.

Contributions

Contributions are welcome. Posting in Discussions first prior to new submitting PRs for features or modifications is encouraged.

About

Batch PDF operations for Swift

Topics

Resources

License

Stars

Watchers

Forks

Sponsor this project

 

Languages