Skip to content


Subversion checkout URL

You can clone with
Download ZIP
PDF rending plugin for Rails using FlyingSaucer.
Branch: master
Pull request Compare This branch is 1 commit ahead of timriley:master.

Fetching latest commit…

Cannot retrieve the latest commit at this time

Failed to load latest commit information.
lib OMG Significantly reduced size for Rails 3.
.gitignore make it work as both a gem and rails plugin
MIT-LICENSE initial commit update docs to show instructions for gem installaiton
Rakefile Turn plugin into a gem with jeweler.
TODO minor fixes and cleanups
VERSION Bump to version 0.5.1
saucerly.gemspec Bump to version 0.5.1


Saucerly provides PDF rendering for your Rails app using the Java-based FlyingSaucer library.

It is based on Princely. The benefit of Saucerly is that it provides competent XHTML to PDF rendering without the $4k PrinceXML pricetag.


Rendering from a template:

class ExamplesController < ApplicationController::Base
  def show
    @document = Document.find(params[:id])

    respond_to do |format|
      format.pdf { render :pdf => 'file_name', :template => 'controller/action.pdf.haml', :layout => 'pdf' }

Rendering from an inline string:

render :pdf => 'file_name', :inline => 'XHTML goes here'


First, set up the dependencies:

  1. Install JRuby
  2. Register the flying_saucer gem dependency: add config.gem 'flying_saucer' to config/environment.rb
  3. Install flying_saucer: jruby -S rake gems:install

Then, install Saucerly:

  • As a gem, add config.gem 'timriley-saucerly', :source => '', :lib => 'saucerly' to config/environment.rb and run jruby -S rake gems:install
  • As a plugin, run jruby script/plugin install git://

Now you're ready to go! Add some code to your controllers like the examples above.

If you're developing on OS X and you don't want a Java icon to appear in your dock, put java.lang.System.set_property("java.awt.headless", "true") in environment.rb or an initializer

Copyright (c) 2009 Tim Riley & RentMonkey Pty Ltd, released under the MIT license

Something went wrong with that request. Please try again.