/pdfinfo

Simple ruby wrapper around pdfinfo

Primary LanguageRubyMIT LicenseMIT

Pdfinfo

Gem Version Build Status Coverage Status

Simple ruby wrapper around pdfinfo utility. This gem was written and tested around xpdf version 3.04.

Depdendecies

usage of this gem assumes that you have xpdf installed (which gives us access to the pdfinfo command). The fastest way to install xpdf:

$ brew install xpdf

Installation

Add this line to your application's Gemfile:

gem 'pdfinfo', '~> 1.4.2'

And then execute:

$ bundle

Or install it yourself as:

$ gem install pdfinfo

Usage

require 'pdfinfo'
pdfinfo = Pdfinfo.new('path/to/file.pdf')

pdfinfo.title         #=> "Title" # or nil
pdfinfo.subject       #=> "Subject" # or nil
pdfinfo.keywords      #=> ["Keyword1", "Keyword2"] # or nil
pdfinfo.author        #=> "Author Name" # or nil
pdfinfo.creator       #=> "Creator Name" # or nil
pdfinfo.producer      #=> "Producer Name" # or nil
pdfinfo.creation_date #=> 2014-10-26 20:50:45 -0700 # DateTime object
pdfinfo.modified_date #=> 2014-10-26 20:50:45 -0700 # DateTime object
pdfinfo.form          #=> "none" # (AcroForm / XFA / none)
pdfinfo.page_count    #=> 3
pdfinfo.width         #=> 612.0
pdfinfo.height        #=> 792.0
pdfinfo.size          #=> 1521 # file size in bytes
pdfinfo.pdf_version   #=> "1.3"
pdfinfo.encrypted?    #=> false # or true
pdfinfo.usage_rights  #=> {print: true, copy: true, change: true, add_notes: true} # always returns
pdfinfo.printable?    #=> true  # or false
pdfinfo.copyable?     #=> true  # or false
pdfinfo.changeable?   #=> true  # or false
pdfinfo.modifiable?   #=> true  # or false. alias for #changeable?
pdfinfo.annotatable?  #=> true  # or false
pdfinfo.tagged?       #=> false # or true
pdfinfo.optimized?    #=> false # or true

# Pages
pdfinfo.pages         #=> [#<Pdfinfo::Page height=792.0 width=612.0 rotation=0.0>, ...]
first_page = pdfinfo.page[0]
first_page.height     #=> 792.0
first_page.width      #=> 612.0
first_page.rotation   #=> 0.0

For encrypted files with a password you can pass in the user or owner password as options

pdfinfo = Pdfinfo.new("path/to/encrypted.pdf", user_password: 'foo')
# pdfinfo = Pdfinfo.new("path/to/encrypted.pdf", owner_password: 'foo')
pdfinfo.encrypted?    #=> true
pdfinfo.usage_rights  #=> {print: false, copy: false, change: false, add_notes: false}

You can directly set the location of the executable if its not located in your environment $PATH or you just want to point to a different location.

Pdfinfo.pdfinfo_command = '/another/bin/path/pdfinfo'
Pdfinfo.pdfinfo_command #=> '/another/bin/path/pdfinfo'

If you have an .xpdfrc file, you can set it globally or one-off with 'config_path'. With the pdfinfo command, Its main use will likely be to set text encoding and unicode mapping.

# set xpdfrc path globally
Pdfinfo.config_path = 'path/to/.xpdfrc'
# or one-off
Pdfinfo.new('path/to/file.pdf', config_path: 'path/to/.xpdfrc')

Recent Changes

see the CHANGELOG for recent changes

Running specs

generate pdf fixtures by first running

$ rake generate_fixtures

Then run specs by running

$ rake

TODO

  • add documentation for #to_hash
  • Error handling
  • type coersion is getting messy in initialize. refactor.