/PDFGadget

Batch PDF operations for Swift

Primary LanguageSwiftMIT LicenseMIT

PDFGadget

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

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

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

Note

Currently this package is only a Swift library. A CLI tool and/or GUI frontend may be added in future.

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 to be added in future, including: page cropping, more sophisticated annotation editing/filtering/removal.

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
  • Split file into multiple files

Page Content Operations

  • Filter annotations (by types, or remove all)
  • 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.

Roadmap & Contributions

Planned and in-progress features can be found in Issues. Any help is welcome and appreciated.