Giter Site home page Giter Site logo

origami's Introduction

Origami

Gem Version Downloads Build Status License: LGPL v3

Overview

Origami is a framework written in pure Ruby to manipulate PDF files.

It offers the possibility to parse the PDF contents, modify and save the PDF structure, as well as creating new documents.

Origami supports some advanced features of the PDF specification:

  • Compression filters with predictor functions
  • Encryption using RC4 or AES, including the undocumented Revision 6 derivation algorithm
  • Digital signatures and Usage Rights
  • File attachments
  • AcroForm and XFA forms
  • Object streams

Origami is able to parse PDF, FDF and PPKLite (Adobe certificate store) files.

Requirements

As of version 2, the minimal version required to run Origami is Ruby 2.1.

Some optional features require additional gems:

Quick start

First install Origami using the latest gem available:

$ gem install origami

Then import Origami with:

require 'origami'

To process a PDF document, you can use the PDF.read method:

pdf = Origami::PDF.read "something.pdf"

puts "This document has #{pdf.pages.size} page(s)"

The default behavior is to parse the entire contents of the document at once. This can be changed by passing the lazy flag to parse objects on demand.

pdf = Origami::PDF.read "something.pdf", lazy: true

pdf.each_page do |page|
    page.each_font do |name, font|
        # ... only parse the necessary bits
    end
end

You can also create documents directly by instanciating a new PDF object:

pdf = Origami::PDF.new

pdf.append_page
pdf.pages.first.write "Hello", size: 30

pdf.save("example.pdf")

# Another way of doing it
Origami::PDF.write("example.pdf") do |pdf|
    pdf.append_page do |page|
        page.write "Hello", size: 30
    end
end

Take a look at the examples and bin directories for some examples of advanced usage.

Tools

Origami comes with a set of tools to manipulate PDF documents from the command line.

  • pdfcop: Runs some heuristic checks to detect dangerous contents.
  • pdfdecompress: Strips compression filters out of a document.
  • pdfdecrypt: Removes encrypted contents from a document.
  • pdfencrypt: Encrypts a PDF document.
  • pdfexplode: Explodes a document into several documents, each of them having one deleted resource. Useful for reduction of crash cases after a fuzzing session.
  • pdfextract: Extracts binary resources of a document (images, scripts, fonts, etc.).
  • pdfmetadata: Displays the metadata contained in a document.
  • pdf2ruby: Converts a PDF into an Origami script rebuilding an equivalent document (experimental).
  • pdfsh: An IRB shell running inside the Origami namespace.

Note: Since version 2.1, pdfwalker has been moved to a separate repository.

License

Origami is distributed under the LGPL license.

Copyright © 2019 Guillaume Delugré.

origami's People

Contributors

meganemura avatar ssxenon01 avatar lcreid avatar pocke avatar krtschmr avatar rubonz avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.