• Stars
    star
    283
  • Rank 146,066 (Top 3 %)
  • Language
    Ruby
  • License
    MIT License
  • Created almost 12 years ago
  • Updated over 7 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

a phantomjs based pdf renderer

Shrimp

Build Status Creates PDFs from URLs using phantomjs

Read our blogpost about how it works.

Installation

Add this line to your application's Gemfile:

gem 'shrimp'

And then execute:

$ bundle

Or install it yourself as:

$ gem install shrimp

Phantomjs

See http://phantomjs.org/download.html on how to install phantomjs

Usage

require 'shrimp'
url     = 'http://www.google.com'
options = { :margin => "1cm"}
Shrimp::Phantom.new(url, options).to_pdf("~/output.pdf")

Configuration

Shrimp.configure do |config|

  # The path to the phantomjs executable
  # defaults to `where phantomjs`
  # config.phantomjs = '/usr/local/bin/phantomjs'

  # the default pdf output format
  # e.g. "5in*7.5in", "10cm*20cm", "A4", "Letter"
  # config.format           = 'A4'

  # the default margin
  # config.margin           = '1cm'

  # the zoom factor
  # config.zoom             = 1

  # the page orientation 'portrait' or 'landscape'
  # config.orientation      = 'portrait'

  # a temporary dir used to store tempfiles
  # config.tmpdir           = Dir.tmpdir

  # the default rendering time in ms
  # increase if you need to render very complex pages
  # config.rendering_time   = 1000

  # change the viewport size.  If you rendering pages that have
  # flexible page width and height then you may need to set this
  # to enforce a specific size
  # config.viewport_width     = 600
  # config.viewport_height    = 600

  # the timeout for the phantomjs rendering process in ms
  # this needs always to be higher than rendering_time
  # config.rendering_timeout  = 90000

  # maximum number of redirects to follow
  # by default Shrimp does not follow any redirects which means that
  # if the server responds with non HTTP 200 an error will be returned
  # config.max_redirect_count = 0

  # the path to a json configuration file for command-line options
  # config.command_config_file = "#{Rails.root.join('config', 'shrimp', 'config.json')}"
end

Command Configuration

{
    "diskCache": false,
    "ignoreSslErrors": false,
    "loadImages": true,
    "outputEncoding": "utf8",
    "webSecurity": true
}

Middleware

Shrimp comes with a middleware that allows users to get a PDF view of any page on your site by appending .pdf to the URL.

Middleware Setup

Non-Rails Rack apps

# in config.ru
require 'shrimp'
use Shrimp::Middleware

Rails apps

# in application.rb(Rails3) or environment.rb(Rails2)
require 'shrimp'
config.middleware.use Shrimp::Middleware

With Shrimp options

# options will be passed to Shrimp::Phantom.new
config.middleware.use Shrimp::Middleware, :margin => '0.5cm', :format => 'Letter'

With conditions to limit routes that can be generated in pdf

# conditions can be regexps (either one or an array)
config.middleware.use Shrimp::Middleware, {}, :only => %r[^/public]
config.middleware.use Shrimp::Middleware, {}, :only => [%r[^/invoice], %r[^/public]]

# conditions can be strings (either one or an array)
config.middleware.use Shrimp::Middleware, {}, :only => '/public'
config.middleware.use Shrimp::Middleware, {}, :only => ['/invoice', '/public']

# conditions can be regexps (either one or an array)
config.middleware.use Shrimp::Middleware, {}, :except => [%r[^/prawn], %r[^/secret]]

# conditions can be strings (either one or an array)
config.middleware.use Shrimp::Middleware, {}, :except => ['/secret']

Polling

To avoid deadlocks Shrimp::Middleware renders the pdf in a separate process retuning a 503 Retry-After response Header. you can setup the polling interval and the polling offset in seconds.

config.middleware.use Shrimp::Middleware, :polling_interval => 1, :polling_offset => 5

Caching

To avoid rendering the page on each request you can setup some the cache ttl in seconds

config.middleware.use Shrimp::Middleware, :cache_ttl => 3600, :out_path => "my/pdf/store"

Ajax requests

To include some fancy Ajax stuff with jquery

 var url = '/my_page.pdf'
 var statusCodes = {
      200: function() {
        return window.location.assign(url);
      },
      504: function() {
       console.log("Shit's being wired")
      },
      503: function(jqXHR, textStatus, errorThrown) {
        var wait;
        wait = parseInt(jqXHR.getResponseHeader('Retry-After'));
        return setTimeout(function() {
          return $.ajax({
            url: url,
            statusCode: statusCodes
          });
        }, wait * 1000);
      }
  }
  $.ajax({
    url: url,
    statusCode: statusCodes
  })

Contributing

  1. Fork it
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create new Pull Request

Copyright

Shrimp is Copyright © 2012 adeven (Manuel Kniep). It is free software, and may be redistributed under the terms specified in the LICENSE file.

More Repositories

1

rmq

Message queue system written in Go and backed by Redis
Go
1,479
star
2

go-wrk

a small heavy duty http/https benchmark tool written in go
Go
816
star
3

ios_sdk

This is the iOS SDK of
Objective-C
579
star
4

android_sdk

This is the Android SDK of
Java
573
star
5

redismq

a durable message queue system for go based on redis, see also https://github.com/adjust/rmq
Go
501
star
6

parquet_fdw

Parquet foreign data wrapper for PostgreSQL
C++
317
star
7

sdks

SDKs of Adjust
141
star
8

unity_sdk

This is the Unity SDK of
C#
133
star
9

react_native_sdk

This is the React Native SDK of
Objective-C
119
star
10

kafka_fdw

kafka foreign database wrapper for postresql
C
101
star
11

gohub

github webhook based deloyment server
Go
60
star
12

gorails

A set of go packages to integrate your Go app into existing Rails project.
Go
60
star
13

flutter_sdk

This is the Flutter SDK of
Dart
54
star
14

web_sdk

JavaScript
40
star
15

pgbundle

bundling postgres extension
Ruby
39
star
16

postgresql_extension_demo

37
star
17

cordova_sdk

This is the Cordova SDK of
JavaScript
35
star
18

istore

development repo for integer hstore replacement in postgres
C
34
star
19

goem

go extension manager
Go
33
star
20

AEProductController

Small wrapper for SKStoreProductViewController that handles tracking links.
Objective-C
33
star
21

pg_cryogen

Compressed append-only pluggable storage for PostgreSQL 12+
C
30
star
22

adobe_air_sdk

This is the Adobe AIR SDK of
Java
24
star
23

rport

Connection management and SQL parallelisation for R analytics on big database clusters
R
23
star
24

nvd3-rails

nvd3 reusable charts for rails 3
Ruby
23
star
25

goenv

go boilerplate code
Go
23
star
26

pg-telemetry

Useful monitoring views for PostgreSQL, packaged as an extension
PLpgSQL
22
star
27

hydra-curl

a bash script to download with hundreds of parallel curls
Shell
17
star
28

pg-base36

a base36 extension for postgres
C
16
star
29

wltree

adjust's patched version of postgres ltree
C
14
star
30

xamarin_sdk

This is the Xamarin SDK of
C#
14
star
31

api-client-r

an R client for the KPI service https://docs.adjust.com/en/kpi-service/
R
14
star
32

unreal_sdk

This is the Unreal SDK of
C++
14
star
33

pg-currency

1 Byte Currency ISO type for PostgreSQL
C
12
star
34

windows_sdk

This is the Windows SDK of
C#
10
star
35

schaufel

C
10
star
36

cocos2dx_sdk

This is the Cocos2d-x SDK of
C++
8
star
37

pg-country

country type for postgres
C
7
star
38

marmalade_sdk

This is the Marmalade SDK of http://www.adjust.com
C++
7
star
39

pg_c_dev

Repo for Extending postgresql with C
PLpgSQL
7
star
40

corona_sdk

This is the Corona SDK of
Java
7
star
41

pg-roleman

Role Management Extension with some Nice Common Functions
PLpgSQL
6
star
42

ajbool

triple bool for postgres
C
6
star
43

adjust_signature_sdk

6
star
44

go_conf

a go package to simplify configuring golang apps with database.yml rails style
Go
5
star
45

gentoo-overlay

adjust Gentoo overlay
Shell
5
star
46

AEPriceMatrix

Tier based currency conversion for iOS
Objective-C
4
star
47

pg-numhstore

a postgres extension to support inthstore and floathstore types
C
4
star
48

postgresql_exporter

Go
4
star
49

csv-gists-r

Facilitates maintaining CSV on gist.github.com directly from R objects
R
4
star
50

react-and-rockets

React & Rockets - Challenge for Adjust Frontend Developer
JavaScript
4
star
51

pg-device_type

a device_type extension for postgres
C
3
star
52

iOS6AdTracking

Objective-C
3
star
53

titanium_sdk

This is the Titanium SDK of
JavaScript
3
star
54

pg_querylog

Show queries running on PostgreSQL backends
C
3
star
55

pg_type_template

An extension template for Postgres type
Jinja
3
star
56

redis_failover

redis failover scripts
Perl
3
star
57

adjust_anes

Google Play Services ANE Builder
Makefile
2
star
58

pg_intmap

Compressed integer-to-integer map
C
2
star
59

githubWorkflows

Shared workflows
2
star
60

pg-ext-actions

Github action to build and test PostgreSQL extensions
Shell
2
star
61

rport_demo

A Demo Rport App
R
2
star
62

goautoneg

fork of goautoneg from https://bitbucket.org/ww/goautoneg
Go
2
star
63

pg-geoip2lookup

A PL/Perl based extension for PostgreSQL for lookup in data in geoip2 dos for PostgreSQL
SQLPL
2
star
64

all_substrings_tokenizer

C Postgres extension for extracting all substrings of a string
C
2
star
65

pg-language

Postgres extension of language enumeration type
PLpgSQL
2
star
66

pg_lock_pool

A postgres Extension to wait on a lock pool
PLpgSQL
2
star
67

file_cache

Filesystem-backed caching for data, big and small
Elixir
2
star
68

pg_spec

ruby minitest based pg_tap like test runner for postgres
PLpgSQL
1
star
69

webdev-assignment

Vue
1
star
70

design-tokens

CSS
1
star
71

airbrake-client-r

An R client for the Airbrake API
R
1
star
72

dumbo

postgres extension fun
Ruby
1
star
73

ios_adobe_extension

Adjust SDK extension for Adobe Experience Platform Mobile
Objective-C
1
star
74

postgres_tools

adjust postgres tools
Perl
1
star
75

michaelbot

Go
1
star
76

pg-ajversion

simple semantic version type for postgres
PLpgSQL
1
star
77

go_demo

gogo demo app
Ruby
1
star
78

mailbot

Perl
1
star
79

hubot

smart ass bot
CoffeeScript
1
star
80

zabbix-api

perl zabbix bindings
Perl
1
star
81

postgres_agg_funcs

aggregation helper functions written in c
C
1
star
82

pg-mvtbl

A postgres Extension to easily move tables around tablespaces
PLpgSQL
1
star
83

smart_banner_sdk

Adjust Smart Banner SDK
TypeScript
1
star
84

dev-docs

Developer documentation for Adjust's SDKs and APIs.
MDX
1
star
85

PGObject-Util-Replication-Slot

Replication Slot monitoring and management for PostgreSQL via Perl/CPAN
Makefile
1
star