Module: PDF_EPS
- Defined in:
- vendor/plugins/rfpdf/lib/rfpdf/fpdf_eps.rb
Overview
Information
PDF_EPS class from Valentin Schmidt ported to ruby by Thiago Jackiw (tjackiw@gmail.com) working for Mingle LLC (www.mingle.com) Release Date: July 13th, 2006
Description
This script allows to embed vector-based Adobe Illustrator (AI) or AI-compatible EPS files. Only vector drawing is supported, not text or bitmap. Although the script was successfully tested with various AI format versions, best results are probably achieved with files that were exported in the AI3 format (tested with Illustrator CS2, Freehand MX and Photoshop CS2).
ImageEps(string file, float x, float y [, float w [, float h [, string link [, boolean useBoundingBox]]]])
Same parameters as for regular FPDF::Image() method, with an additional one:
useBoundingBox: specifies whether to position the bounding box (true) or the complete canvas (false) at location (x,y). Default value is true.
First added to the Ruby FPDF distribution in 1.53c
Usage is as follows:
require ‘fpdf’ require ‘fpdf_eps’ pdf = FPDF.new pdf.extend(PDF_EPS) pdf.ImageEps(…)
This allows it to be combined with other extensions, such as the bookmark module.
Instance Method Summary
Instance Method Details
- (Object) ImageEps(file, x, y, w = 0, h = 0, link = '', use_bounding_box = true)
35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 |
# File 'vendor/plugins/rfpdf/lib/rfpdf/fpdf_eps.rb', line 35 def ImageEps(file, x, y, w=0, h=0, link='', use_bounding_box=true) data = nil if File.exists?(file) File.open(file, 'rb') do |f| data = f.read() end else Error('EPS file not found: '+file) end # Find BoundingBox param regs = data.scan(/%%BoundingBox: [^\r\n]*/m) regs << regs[0].gsub(/%%BoundingBox: /, '') if regs.size > 1 tmp = regs[1].to_s.split(' ') @x1 = tmp[0].to_i @y1 = tmp[1].to_i @x2 = tmp[2].to_i @y2 = tmp[3].to_i else Error('No BoundingBox found in EPS file: '+file) end f_start = data.index('%%EndSetup') f_start = data.index('%%EndProlog') if f_start === false f_start = data.index('%%BoundingBox') if f_start === false data = data.slice(f_start, data.length) f_end = data.index('%%PageTrailer') f_end = data.index('showpage') if f_end === false data = data.slice(0, f_end) if f_end # save the current graphic state out('q') k = @k # Translate if use_bounding_box dx = x*k-@x1 dy = @hPt-@y2-y*k else dx = x*k dy = -y*k end tm = [1,0,0,1,dx,dy] out(sprintf('%.3f %.3f %.3f %.3f %.3f %.3f cm', tm[0], tm[1], tm[2], tm[3], tm[4], tm[5])) if w > 0 scale_x = w/((@x2-@x1)/k) if h > 0 scale_y = h/((@y2-@y1)/k) else scale_y = scale_x h = (@y2-@y1)/k * scale_y end else if h > 0 scale_y = $h/((@y2-@y1)/$k) scale_x = scale_y w = (@x2-@x1)/k * scale_x else w = (@x2-@x1)/k h = (@y2-@y1)/k end end if !scale_x.nil? # Scale tm = [scale_x,0,0,scale_y,0,@hPt*(1-scale_y)] out(sprintf('%.3f %.3f %.3f %.3f %.3f %.3f cm', tm[0], tm[1], tm[2], tm[3], tm[4], tm[5])) end data.split(/\r\n|[\r\n]/).each do |line| next if line == '' || line[0,1] == '%' len = line.length # next if (len > 2 && line[len-2,len] != ' ') cmd = line[len-2,len].strip case cmd when 'm', 'l', 'v', 'y', 'c', 'k', 'K', 'g', 'G', 's', 'S', 'J', 'j', 'w', 'M', 'd': out(line) when 'L': line[len-1,len]='l' out(line) when 'C': line[len-1,len]='c' out(line) when 'f', 'F': out('f*') when 'b', 'B': out(cmd + '*') end end # restore previous graphic state out('Q') Link(x,y,w,h,link) if link end |