princely 1.2.5 → 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README.rdoc +4 -2
- data/Rakefile +1 -42
- data/VERSION +1 -1
- data/lib/princely.rb +39 -10
- data/lib/princely/pdf_helper.rb +37 -12
- data/lib/princely/rails.rb +5 -3
- data/lib/princely/version.rb +3 -0
- metadata +28 -37
- data/.gitignore +0 -2
- data/init.rb +0 -1
- data/princely.gemspec +0 -46
- data/rails/init.rb +0 -1
data/README.rdoc
CHANGED
@@ -16,8 +16,9 @@ respond_to blocks.
|
|
16
16
|
format.pdf do
|
17
17
|
render :pdf => "file_name",
|
18
18
|
:template => "controller/action.pdf.erb",
|
19
|
-
:stylesheets => ["application","prince"]
|
20
|
-
:layout => "pdf"
|
19
|
+
:stylesheets => ["application","prince"],
|
20
|
+
:layout => "pdf",
|
21
|
+
:disposition => "inline" # PDF will be sent inline, means you can load it inside an iFrame or Embed
|
21
22
|
end
|
22
23
|
end
|
23
24
|
end
|
@@ -37,6 +38,7 @@ The defaults for the render options are as follows:
|
|
37
38
|
layout: false
|
38
39
|
template: the template for the current controller/action
|
39
40
|
stylesheets: none
|
41
|
+
disposition: attachment (created PDF file will be sent as download)
|
40
42
|
|
41
43
|
== Contributors
|
42
44
|
|
data/Rakefile
CHANGED
@@ -1,42 +1 @@
|
|
1
|
-
require
|
2
|
-
require 'rake'
|
3
|
-
|
4
|
-
begin
|
5
|
-
require 'jeweler'
|
6
|
-
Jeweler::Tasks.new do |gem|
|
7
|
-
gem.name = "princely"
|
8
|
-
gem.summary = %Q{A simple Rails wrapper for the PrinceXML PDF generation library.}
|
9
|
-
gem.description = %Q{A wrapper for the PrinceXML PDF generation library.}
|
10
|
-
gem.email = "michael@intridea.com"
|
11
|
-
gem.homepage = "http://github.com/mbleigh/princely"
|
12
|
-
gem.authors = ["Michael Bleigh"]
|
13
|
-
# gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
|
14
|
-
end
|
15
|
-
|
16
|
-
rescue LoadError
|
17
|
-
puts "Jeweler (or a dependency) not available. Install it with: sudo gem install jeweler"
|
18
|
-
end
|
19
|
-
|
20
|
-
require 'rake/testtask'
|
21
|
-
Rake::TestTask.new(:test) do |test|
|
22
|
-
test.libs << 'lib' << 'test'
|
23
|
-
test.pattern = 'test/**/*_test.rb'
|
24
|
-
test.verbose = true
|
25
|
-
end
|
26
|
-
|
27
|
-
task :default => :test
|
28
|
-
|
29
|
-
require 'rake/rdoctask'
|
30
|
-
Rake::RDocTask.new do |rdoc|
|
31
|
-
if File.exist?('VERSION')
|
32
|
-
version = File.read('VERSION')
|
33
|
-
else
|
34
|
-
version = ""
|
35
|
-
end
|
36
|
-
|
37
|
-
rdoc.rdoc_dir = 'rdoc'
|
38
|
-
rdoc.title = "princely #{version}"
|
39
|
-
rdoc.options << '--line-numbers' << '--inline-source'
|
40
|
-
rdoc.rdoc_files.include('README*')
|
41
|
-
rdoc.rdoc_files.include('lib/**/*.rb')
|
42
|
-
end
|
1
|
+
require "bundler/gem_tasks"
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.2.
|
1
|
+
1.2.6
|
data/lib/princely.rb
CHANGED
@@ -16,21 +16,43 @@
|
|
16
16
|
#
|
17
17
|
$:.unshift(File.dirname(__FILE__))
|
18
18
|
require 'logger'
|
19
|
+
require 'princely/rails' if defined?(Rails)
|
19
20
|
|
20
21
|
class Princely
|
21
|
-
VERSION = "1.0.0" unless const_defined?("VERSION")
|
22
|
-
|
23
22
|
attr_accessor :exe_path, :style_sheets, :log_file, :logger
|
24
23
|
|
25
24
|
# Initialize method
|
26
25
|
#
|
27
|
-
def initialize()
|
26
|
+
def initialize(options={})
|
28
27
|
# Finds where the application lives, so we can call it.
|
29
|
-
@exe_path =
|
28
|
+
@exe_path = options[:path] || find_prince_executable
|
30
29
|
raise "Cannot find prince command-line app in $PATH" if @exe_path.length == 0
|
31
|
-
|
32
|
-
|
33
|
-
|
30
|
+
raise "Cannot find prince command-line app at #{@exe_path}" if @exe_path && !File.executable?(@exe_path)
|
31
|
+
@style_sheets = ''
|
32
|
+
@log_file = options[:log_file]
|
33
|
+
@logger = options[:logger]
|
34
|
+
end
|
35
|
+
|
36
|
+
def logger
|
37
|
+
@logger ||= defined?(Rails) ? Rails.logger : StdoutLogger
|
38
|
+
end
|
39
|
+
|
40
|
+
def log_file
|
41
|
+
@log_file ||= defined?(Rails) ?
|
42
|
+
Rails.root.join("log/prince.log") :
|
43
|
+
File.expand_path(File.dirname(__FILE__) + "/log/prince.log")
|
44
|
+
end
|
45
|
+
|
46
|
+
def ruby_platform
|
47
|
+
RUBY_PLATFORM
|
48
|
+
end
|
49
|
+
|
50
|
+
def find_prince_executable
|
51
|
+
if ruby_platform =~ /mswin32/
|
52
|
+
"C:/Program Files/Prince/Engine/bin/prince"
|
53
|
+
else
|
54
|
+
`which prince`.chomp
|
55
|
+
end
|
34
56
|
end
|
35
57
|
|
36
58
|
# Sets stylesheets...
|
@@ -47,7 +69,7 @@ class Princely
|
|
47
69
|
#
|
48
70
|
def exe_path
|
49
71
|
# Add any standard cmd line arguments we need to pass
|
50
|
-
@exe_path << " --input=html --server --log=#{
|
72
|
+
@exe_path << " --input=html --server --log=#{log_file} "
|
51
73
|
@exe_path << @style_sheets
|
52
74
|
return @exe_path
|
53
75
|
end
|
@@ -74,6 +96,7 @@ class Princely
|
|
74
96
|
pdf.close_write
|
75
97
|
result = pdf.gets(nil)
|
76
98
|
pdf.close_read
|
99
|
+
result.force_encoding('BINARY') if RUBY_VERSION >= "1.9"
|
77
100
|
return result
|
78
101
|
end
|
79
102
|
|
@@ -81,7 +104,7 @@ class Princely
|
|
81
104
|
path = self.exe_path()
|
82
105
|
# Don't spew errors to the standard out...and set up to take IO
|
83
106
|
# as input and output
|
84
|
-
path << " --silent - -o #{output_file} >> #{
|
107
|
+
path << " --silent - -o '#{output_file}' >> '#{log_file}' 2>> '#{log_file}'"
|
85
108
|
|
86
109
|
# Show the command used...
|
87
110
|
logger.info "\n\nPRINCE XML PDF COMMAND"
|
@@ -93,4 +116,10 @@ class Princely
|
|
93
116
|
pdf.puts(string)
|
94
117
|
pdf.close
|
95
118
|
end
|
96
|
-
|
119
|
+
|
120
|
+
class StdoutLogger
|
121
|
+
def self.info(msg)
|
122
|
+
puts msg
|
123
|
+
end
|
124
|
+
end
|
125
|
+
end
|
data/lib/princely/pdf_helper.rb
CHANGED
@@ -25,16 +25,11 @@ module PdfHelper
|
|
25
25
|
|
26
26
|
prince = Princely.new()
|
27
27
|
# Sets style sheets on PDF renderer
|
28
|
-
prince.add_style_sheets(*options[:stylesheets].collect{|style|
|
28
|
+
prince.add_style_sheets(*options[:stylesheets].collect{|style| asset_file_path(style)})
|
29
29
|
|
30
30
|
html_string = render_to_string(:template => options[:template], :layout => options[:layout])
|
31
31
|
|
32
|
-
|
33
|
-
html_string.gsub!(".com:/",".com/") # strip out bad attachment_fu URLs
|
34
|
-
html_string.gsub!( /src=["']+([^:]+?)["']/i ) { |m| "src=\"#{RAILS_ROOT}/public/" + $1 + '"' } # re-route absolute paths
|
35
|
-
|
36
|
-
# Remove asset ids on images with a regex
|
37
|
-
html_string.gsub!( /src=["'](\S+\?\d*)["']/i ) { |m| 'src="' + $1.split('?').first + '"' }
|
32
|
+
html_string = localize_html_string(html_string)
|
38
33
|
|
39
34
|
# Send the generated PDF file from our html string.
|
40
35
|
if filename = options[:filename] || options[:file]
|
@@ -44,16 +39,46 @@ module PdfHelper
|
|
44
39
|
end
|
45
40
|
end
|
46
41
|
|
42
|
+
def localize_html_string(html_string)
|
43
|
+
# Make all paths relative, on disk paths...
|
44
|
+
html_string.gsub!(".com:/",".com/") # strip out bad attachment_fu URLs
|
45
|
+
html_string.gsub!( /src=["']+([^:]+?)["']/i ) { |m| "src=\"#{Rails.public_path}/#{$1}\"" } # re-route absolute paths
|
46
|
+
|
47
|
+
# Remove asset ids on images with a regex
|
48
|
+
html_string.gsub!( /src=["'](\S+\?\d*)["']/i ) { |m| "src=\"#{$1.split('?').first}\"" }
|
49
|
+
html_string
|
50
|
+
end
|
51
|
+
|
52
|
+
def asset_file_path(asset)
|
53
|
+
stylesheet = stylesheet.to_s.gsub(".css","")
|
54
|
+
File.join(config.stylesheets_dir, "#{stylesheet}.css")
|
55
|
+
end
|
56
|
+
alias_method :stylesheet_file_path, :asset_file_path
|
57
|
+
|
47
58
|
def make_and_send_pdf(pdf_name, options = {})
|
59
|
+
options[:disposition] ||= 'attachment'
|
48
60
|
send_data(
|
49
61
|
make_pdf(options),
|
50
62
|
:filename => pdf_name + ".pdf",
|
51
|
-
:type => 'application/pdf'
|
63
|
+
:type => 'application/pdf',
|
64
|
+
:disposition => options[:disposition]
|
52
65
|
)
|
53
66
|
end
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
67
|
+
|
68
|
+
module AssetSupport
|
69
|
+
def localize_html_string(html_string)
|
70
|
+
# Make all paths relative, on disk paths...
|
71
|
+
html_string.gsub!(".com:/",".com/") # strip out bad attachment_fu URLs
|
72
|
+
html_string.gsub!( /src=["']+([^:]+?)["']/i ) { |m| "src=\"#{asset_file_path($1)}\"" } # re-route absolute paths
|
73
|
+
|
74
|
+
# Remove asset ids on images with a regex
|
75
|
+
html_string.gsub!( /src=["'](\S+\?\d*)["']/i ) { |m| 'src="' + $1.split('?').first + '"' }
|
76
|
+
html_string
|
77
|
+
end
|
78
|
+
|
79
|
+
def asset_file_path(asset)
|
80
|
+
# Remove /assets/ from generated names and try and find a matching asset
|
81
|
+
Rails.application.assets.find_asset(asset.gsub(/\/assets\//, "")).try(:pathname) || asset
|
82
|
+
end
|
58
83
|
end
|
59
84
|
end
|
data/lib/princely/rails.rb
CHANGED
@@ -1,6 +1,8 @@
|
|
1
|
-
require 'princely'
|
2
1
|
require 'princely/pdf_helper'
|
3
2
|
|
4
|
-
Mime::Type.
|
3
|
+
if Mime::Type.lookup_by_extension(:pdf) != 'application/pdf'
|
4
|
+
Mime::Type.register 'application/pdf', :pdf
|
5
|
+
end
|
5
6
|
|
6
|
-
ActionController::Base.send(:include, PdfHelper)
|
7
|
+
ActionController::Base.send(:include, PdfHelper)
|
8
|
+
ActionController::Base.send(:include, PdfHelper::AssetSupport) if Rails::VERSION::MINOR > 0
|
metadata
CHANGED
@@ -1,65 +1,56 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: princely
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.3.0
|
5
|
+
prerelease:
|
5
6
|
platform: ruby
|
6
|
-
authors:
|
7
|
+
authors:
|
7
8
|
- Michael Bleigh
|
9
|
+
- Jared Fraser
|
8
10
|
autorequire:
|
9
11
|
bindir: bin
|
10
12
|
cert_chain: []
|
11
|
-
|
12
|
-
date: 2009-09-19 00:00:00 -04:00
|
13
|
-
default_executable:
|
13
|
+
date: 2012-01-25 00:00:00.000000000 Z
|
14
14
|
dependencies: []
|
15
|
-
|
16
15
|
description: A wrapper for the PrinceXML PDF generation library.
|
17
|
-
email:
|
16
|
+
email:
|
17
|
+
- michael@intridea.com
|
18
|
+
- dev@jsf.io
|
18
19
|
executables: []
|
19
|
-
|
20
20
|
extensions: []
|
21
|
-
|
22
|
-
extra_rdoc_files:
|
21
|
+
extra_rdoc_files:
|
23
22
|
- README.rdoc
|
24
|
-
files:
|
25
|
-
- .gitignore
|
23
|
+
files:
|
26
24
|
- MIT-LICENSE
|
27
25
|
- README.rdoc
|
28
26
|
- Rakefile
|
29
27
|
- VERSION
|
30
|
-
- init.rb
|
31
28
|
- lib/princely.rb
|
32
29
|
- lib/princely/pdf_helper.rb
|
33
30
|
- lib/princely/rails.rb
|
34
|
-
- princely.
|
35
|
-
- rails/init.rb
|
36
|
-
has_rdoc: true
|
31
|
+
- lib/princely/version.rb
|
37
32
|
homepage: http://github.com/mbleigh/princely
|
38
33
|
licenses: []
|
39
|
-
|
40
34
|
post_install_message:
|
41
|
-
rdoc_options:
|
42
|
-
|
43
|
-
require_paths:
|
35
|
+
rdoc_options: []
|
36
|
+
require_paths:
|
44
37
|
- lib
|
45
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
38
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
39
|
+
none: false
|
40
|
+
requirements:
|
41
|
+
- - ! '>='
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: '0'
|
44
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
45
|
+
none: false
|
46
|
+
requirements:
|
47
|
+
- - ! '>='
|
48
|
+
- !ruby/object:Gem::Version
|
49
|
+
version: '0'
|
57
50
|
requirements: []
|
58
|
-
|
59
51
|
rubyforge_project:
|
60
|
-
rubygems_version: 1.
|
52
|
+
rubygems_version: 1.8.24
|
61
53
|
signing_key:
|
62
54
|
specification_version: 3
|
63
55
|
summary: A simple Rails wrapper for the PrinceXML PDF generation library.
|
64
56
|
test_files: []
|
65
|
-
|
data/.gitignore
DELETED
data/init.rb
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
require File.dirname(__FILE__) + '/rails/init'
|
data/princely.gemspec
DELETED
@@ -1,46 +0,0 @@
|
|
1
|
-
# Generated by jeweler
|
2
|
-
# DO NOT EDIT THIS FILE
|
3
|
-
# Instead, edit Jeweler::Tasks in Rakefile, and run `rake gemspec`
|
4
|
-
# -*- encoding: utf-8 -*-
|
5
|
-
|
6
|
-
Gem::Specification.new do |s|
|
7
|
-
s.name = %q{princely}
|
8
|
-
s.version = "1.2.5"
|
9
|
-
|
10
|
-
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
|
-
s.authors = ["Michael Bleigh"]
|
12
|
-
s.date = %q{2009-09-19}
|
13
|
-
s.description = %q{A wrapper for the PrinceXML PDF generation library.}
|
14
|
-
s.email = %q{michael@intridea.com}
|
15
|
-
s.extra_rdoc_files = [
|
16
|
-
"README.rdoc"
|
17
|
-
]
|
18
|
-
s.files = [
|
19
|
-
".gitignore",
|
20
|
-
"MIT-LICENSE",
|
21
|
-
"README.rdoc",
|
22
|
-
"Rakefile",
|
23
|
-
"VERSION",
|
24
|
-
"init.rb",
|
25
|
-
"lib/princely.rb",
|
26
|
-
"lib/princely/pdf_helper.rb",
|
27
|
-
"lib/princely/rails.rb",
|
28
|
-
"princely.gemspec",
|
29
|
-
"rails/init.rb"
|
30
|
-
]
|
31
|
-
s.homepage = %q{http://github.com/mbleigh/princely}
|
32
|
-
s.rdoc_options = ["--charset=UTF-8"]
|
33
|
-
s.require_paths = ["lib"]
|
34
|
-
s.rubygems_version = %q{1.3.3}
|
35
|
-
s.summary = %q{A simple Rails wrapper for the PrinceXML PDF generation library.}
|
36
|
-
|
37
|
-
if s.respond_to? :specification_version then
|
38
|
-
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
39
|
-
s.specification_version = 3
|
40
|
-
|
41
|
-
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
42
|
-
else
|
43
|
-
end
|
44
|
-
else
|
45
|
-
end
|
46
|
-
end
|
data/rails/init.rb
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
require File.dirname(__FILE__) + "/../lib/princely/rails"
|