pdfcpu: a golang pdf processor
Package pdfcpu is a simple PDF processing library written in Go supporting encryption. It provides both an API and a CLI. Supported are all versions up to PDF 1.7 (ISO-32000).
- JPEG support across the board for watermarking, stamping and image extraction.
splitfunctionality now supporting a
- API console output is now using a Logger that can be disabled for embedded projects.
- Fixed #52, #53, #54, #56
This is an effort to build a PDF processing library from the ground up written in Go with strong support for batch processing via a rich command line. Over time
pdfcpu aims to support the standard range of PDF processing features and also any interesting use cases that may present themselves along the way.
One example is reducing the size of large PDF files for mass mailings by optimization to the bare minimum. This can be achieved by analyzing a PDF's cross reference table, removing redundant embedded resources like font files or images and by always writing back the file maxing out PDF compression. I also wanted to have my own swiss army knife for PDFs written entirely in Go that allows me to trim, split, stamp and merge PDF content.
- Validate (validates PDF files up to version 7.0)
- Read (builds xref table from PDF file)
- Write (writes xref table to PDF file)
- Optimize (gets rid of redundancies like duplicate fonts, images)
- Split (split multi-page PDF into several PDFs according to split span)
- Merge (a set of PDF files into one consolidated PDF file)
- Extract Images (extract all embedded images of a PDF file into a given dir)
- Extract Fonts (extract all embedded fonts of a PDF file into a given dir)
- Extract Pages (extract specific pages into a given dir)
- Extract Content (extract the PDF-Source into given dir)
- Extract Metadata (extract XML metadata)
- Trim (generate a custom version of a PDF file including selected pages)
- Stamp/Watermark selected pages with text, image or PDF page
- Manage (add,remove,list,extract) embedded file attachments
- Encrypt (sets password protection)
- Decrypt (removes password protection)
- Change user/owner password
- Manage (add,list) user access permissions
Demo Screencast (this is an older version with a smaller command set)
Required build version: go1.9 and up
go get github.com/hhrutter/pdfcpu/cmd/...
pdfcpu validate [-verbose] [-mode strict|relaxed] [-upw userpw] [-opw ownerpw] inFile pdfcpu optimize [-verbose] [-stats csvFile] [-upw userpw] [-opw ownerpw] inFile [outFile] pdfcpu split [-verbose] [-upw userpw] [-opw ownerpw] inFile outDir [span] pdfcpu merge [-verbose] outFile inFile... pdfcpu extract [-verbose] -mode image|font|content|page|meta [-pages pageSelection] [-upw userpw] [-opw ownerpw] inFile outDir pdfcpu trim [-verbose] -pages pageSelection [-upw userpw] [-opw ownerpw] inFile outFile pdfcpu stamp [-verbose] -pages pageSelection description inFile [outFile] pdfcpu watermark [-verbose] -pages pageSelection description inFile [outFile] pdfcpu attach list [-verbose] [-upw userpw] [-opw ownerpw] inFile pdfcpu attach add [-verbose] [-upw userpw] [-opw ownerpw] inFile file... pdfcpu attach remove [-verbose] [-upw userpw] [-opw ownerpw] inFile [file...] pdfcpu attach extract [-verbose] [-upw userpw] [-opw ownerpw] inFile outDir [file...] pdfcpu encrypt [-verbose] [-mode rc4|aes] [-key 40|128] [-perm none|all] [-upw userpw] [-opw ownerpw] inFile [outFile] pdfcpu decrypt [-verbose] [-upw userpw] [-opw ownerpw] inFile [outFile] pdfcpu changeupw [-verbose] [-opw ownerpw] inFile upwOld upwNew pdfcpu changeopw [-verbose] [-upw userpw] inFile opwOld opwNew pdfcpu perm list [-verbose] [-upw userpw] [-opw ownerpw] inFile pdfcpu perm add [-verbose] [-perm none|all] [-upw userpw] -opw ownerpw inFile pdfcpu version
- Please open an issue if you find a bug or want to propose a change.
- Feature requests - always welcome!
- Bug fixes - always welcome!
- PRs - also welcome, although I can't promise a merge-in right now.
pdfcpuis stable but still alpha and occasionally undergoing heavy changes.
- If you want to report a bug please attach the very verbose (
pdfcpu cmd -vv ...) output and ideally a test PDF that you can share.
- Always make sure your contribution is based on the latest commit.
- Please sign your commits.
- Please sign the CLA before you submit a PR.
Thanks goes to these wonderful people:
Code of Conduct
Please note that this project is released with a Contributor Code of Conduct. By participating in this project you agree to abide by its terms.
pdfcpu assumes you know about and respect all copyrights of any PDF content you may be processing. This applies to the PDF files as such, their content and in particular all embedded resources like font files or images. Credit goes to Renee French for creating our beloved Gopher.