locally hosted web application that allows you to perform various operations on PDF files
Go to file
2023-11-12 16:57:53 +03:00
client-ionic Migrating shared-operations to TS (WIP) 2023-11-08 03:33:22 +03:00
client-tauri Undid a few things that broke in the last commit 2023-11-10 23:23:18 +03:00
client-vanilla Cleaned the server-node dir 2023-11-08 02:24:16 +01:00
server-node Migrated more functions to use PdfFile 2023-11-12 16:57:53 +03:00
shared-operations Migrated more functions to use PdfFile 2023-11-12 16:57:53 +03:00
.gitignore
.npmrc
CONTRIBUTE.md Merge branch 'stirling-pdf-rewrite' into version-2 2023-11-08 02:11:49 +03:00
package-lock.json Renamed editMetadata to match V1 naming. Added Operations controller 2023-11-11 18:35:33 +03:00
package.json Merge branch 'stirling-pdf-rewrite' into version-2 2023-11-08 02:11:49 +03:00
README.md Updated Progress 2023-10-28 19:31:56 +02:00

StirlingPDF rewrite

This is the development repository for the new StirlingPDF backend. With the power of JS, WASM & GO this will provide almost all functionality SPDF can do currently directly on the client. For automation purposes this will still provide an API to automate your workflows.

Try the new API!

Run in Postman

Understanding Workflows

Workflows define how to apply operations to a PDF, including their order and relations with eachother.

Workflows can be created via the web-ui and then exported or, if you want to brag a bit, you can create the JSON object yourself.

Basics

To create your own, you have to understand a few key features first. You can also look at more examples our github repository.

{
  "outputOptions": {
    "zip": false
  },
  "operations": [
    {
      "type": "extract",
      "values": {
        "pagesToExtractArray": [0, 2]
      },
      "operations": []
    }
  ]
}

The workflow above will extract the first (p[0]) and third (p[2]) page of the document.

You can also nest workflows like this:

{
  "outputOptions": {
    "zip": false
  },
  "operations": [
    {
      "type": "extract",
      "values": {
        "pagesToExtractArray": [0, 2]
      },
      "operations": [
        {
          "type": "impose",
          "values": {
            "nup": 2, // 2 pages of the input document will be put on one page of the output document.
            "format": "A4L" // A4L -> The page size of the Ouput will be an A4 in Landscape. You can also use other paper formats and "P" for portrait output. 
          },
          "operations": []
        }
      ]
    }
  ]
}

If you look at it closely, you will see that the extract operation has another nested operation of the type impose. This workflow will produce a PDF with the 1st and 2nd page of the input on one single page.

Advanced

If that is not enought for you usecase, there is also the possibility to connect operations with eachother.

You can also do different operations to produce two different output PDFs from one input.

If you are interested in learning about this, take a look at the Example workflows provided in the repository, ask on the discord, or wait for me to finish this documentation.

Features

Rewrite Roadmap

  • Client side PDF-Manipulation
  • Workflows
  • Feature equivalent with S-PDF v1
  • Stateful UI
  • Node based editing of Workflows
  • Propper auth using passportjs

Functions

Current functions of spdf and their progress in this repo.

Status Feature Description
✔️ Merge
✔️ Split
✔️ Rotate
✔️ Multi-Page-Layout
✔️ Adjust page size/scale
✔️ Organize
✔️ Change Metadata
✔️ Auto Rename
Add Watermark
PDF to Single large Page
Auto Redact
Remove Pages
Status Feature Description
✔️ Remove Blank Pages
✔️ Auto Split Pages
Status Feature Description
Repair
Compress
Flatten
Compare/Diff
Sanitize
Get info
Show JS
Status Feature Description
Sign
Sign with Certificate
Add Password
Remove Password
Change Permissions
Status Feature Description
Image to PDF
Add image
Extract Images
PDF to Image
OCR
Detect/Split Scanned photos
Status Feature Description
Convert file to PDF
PDF to Text/RTF
PDF to HTML
PDF to XML
URL to PDF
HTML to PDF
Markdown to PDF

✔️: Done, 🚧: Started Developement, : Planned Feature

Contribute

For initial instructions look at CONTRIBUTE.md