Commit 3a584441 authored by Toshi MARUYAMA's avatar Toshi MARUYAMA Committed by Eric Davis

PDF: update rfpdf (#61).

https://github.com/edwinmoss/rfpdf
revision a04724b4af95c15a99675b34e353c15534d20411

git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@5247 e93f8b46-1217-0410-a6f0-8f06a7374b81
parent e06b5815
......@@ -11,3 +11,4 @@
* Added :filename option in this hash
If you're using the same settings for @options_for_rfpdf often, you might want to
put your assignment in a before_filter (perhaps overriding :filename, etc in your actions).
1.15 2009-11-20 Rails 2.* support - Thanks to Prawnto plugin for showing the way to the new TemplateHandler
\ No newline at end of file
FWIW - I am migrating my apps to Prawn and Prawnto
= RFPDF Template Plugin
A template plugin allowing the inclusion of ERB-enabled RFPDF template files.
== Example .rb method Usage
==
==
== TCPDF Version (The New or UTF8 Version)
==
==
If you are using HTML, it is recommended you install:
In the controller, something like:
gem install -r htmlentities
def mypdf
pdf = FPDF.new()
TCPDF Documentation located at:
#
# Chinese
#
pdf.extend(PDF_Chinese)
pdf.AddPage
pdf.AddBig5Font
pdf.SetFont('Big5','',18)
pdf.Write(5, '²{®É®ð·Å 18 C Àã«× 83 %')
icBig5 = Iconv.new('Big5', 'UTF-8')
pdf.Write(15, icBig5.iconv("宋体 should be working"))
send_data pdf.Output, :filename => "something.pdf", :type => "application/pdf"
end
http://phpdocs.moodle.org/com-tecnick-tcpdf/TCPDF.html
== Example .rfdf Usage
Example of simple use in .rhtml:
In the controller, something like:
<%
@pdf = TCPDF.new()
@pdf.SetMargins(15, 27, 15);
@pdf.AddPage();
text_options = {:font => "freeserif"}
@pdf.draw_text(15, 10, "text", {:font_size => 12, :font => "freeserif"})
%><%=@pdf.Output()%>
def mypdf
@options_for_rfpdf ||= {}
@options_for_rfpdf[:file_name] = "nice_looking.pdf"
end
See the following files for sample of useage:
In the layout (make sure this is the only item in the layout):
<%= @content_for_layout %>
In the view (mypdf.rfpdf):
test_unicode.rfpdf
utf8test.txt
logo_example.png
<%
pdf = FPDF.new()
#
# Chinese
#
pdf.extend(PDF_Chinese)
pdf.AddPage
pdf.AddBig5Font
pdf.SetFont('Big5','',18)
pdf.Write(5, '²{®É®ð·Å 18 C Àã«× 83 %')
icBig5 = Iconv.new('Big5', 'UTF-8')
pdf.Write(15, icBig5.iconv("宋体 should be working"))
#
# Japanese
#
pdf.extend(PDF_Japanese)
pdf.AddSJISFont();
pdf.AddPage();
pdf.SetFont('SJIS','',18);
pdf.Write(5,'9ÉñåéÇÃåˆäJÉeÉXÉgÇåoǃPHP 3.0ÇÕ1998îN6åéÇ…åˆéÆÇ…ÉäÉäÅ[ÉXÇ≥ÇÍNjǵÇΩÅB');
icSJIS = Iconv.new('SJIS', 'UTF-8')
pdf.Write(15, icSJIS.iconv("これはテキストである should be working"))
#
# Korean
#
pdf.extend(PDF_Korean)
pdf.AddUHCFont();
pdf.AddPage();
pdf.SetFont('UHC','',18);
pdf.Write(5,'PHP 3.0Àº 1998³â 6¿ù¿¡ °ø½ÄÀûÀ¸·Î ¸±¸®ÁîµÇ¾ú´Ù. °ø°³ÀûÀÎ Å×½ºÆ® ÀÌÈľà 9°³¿ù¸¸À̾ú´Ù.');
icUHC = Iconv.new('UHC', 'UTF-8')
pdf.Write(15, icUHC.iconv("이것은 원본 이다"))
#
# English
#
pdf.AddPage();
pdf.SetFont('Arial', '', 10)
pdf.Write(5, "should be working")
%>
<%= pdf.Output() %>
== Configuring
You can configure Rfpdf by using an @options_for_rfpdf hash in your controllers.
Here are a few options:
:filename (default: action_name.pdf)
Filename of PDF to generate
Note: If you're using the same settings for @options_for_rfpdf often, you might want to
put your assignment in a before_filter (perhaps overriding :filename, etc in your actions).
== Problems
Layouts and partials are currently not supported; just need
to wrap the PDF generation differently.
FPDF users can migrate to TCPDF by changing the following from:
pdf = FPDF.new
to:
pdf = TCPDF.new
ENJOY!
\ No newline at end of file
require 'rfpdf'
begin
ActionView::Template::register_template_handler 'rfpdf', RFPDF::View
rescue NameError
# Rails < 2.1
RFPDF::View.backward_compatibility_mode = true
ActionView::Base::register_template_handler 'rfpdf', RFPDF::View
require('htmlentities')
rescue LoadError
# This gem is not required - just nice to have.
end
require('cgi')
require 'rfpdf'
Mime::Type.register "application/pdf", :pdf
ActionView::Template::register_template_handler 'rfpdf', RFPDF::TemplateHandlers::Base
#============================================================+
# File name : barcode.rb
# Begin : 2002-07-31
# Last Update : 2005-01-02
# Author : Karim Mribti [barcode@mribti.com]
# Version : 1.1 [0.0.8a (original code)]
# License : GNU LGPL (Lesser General Public License) 2.1
# http://www.gnu.org/copyleft/lesser.txt
# Source Code : http://www.mribti.com/barcode/
#
# Description : Generic Barcode Render Class for PHP using
# the GD graphics library.
#
# NOTE:
# This version contains changes by Nicola Asuni:
# - porting to Ruby
# - code style and formatting
# - automatic php documentation in PhpDocumentor Style
# (www.phpdoc.org)
# - minor bug fixing
# - $mCharSet and $mChars variables were added here
#============================================================+
#
# Barcode Render Class for PHP using the GD graphics library.
# @author Karim Mribti, Nicola Asuni
# @name BarcodeObject
# @package com.tecnick.tcpdf
# @@version 0.0.8a 2001-04-01 (original code)
# @since 2001-03-25
# @license http://www.gnu.org/copyleft/lesser.html LGPL
#
# Styles
# Global
#
# option: generate barcode border
#
define("BCS_BORDER", 1);
#
# option: use transparent background
#
define("BCS_TRANSPARENT", 2);
#
# option: center barcode
#
define("BCS_ALIGN_CENTER", 4);
#
# option: align left
#
define("BCS_ALIGN_LEFT", 8);
#
# option: align right
#
define("BCS_ALIGN_RIGHT", 16);
#
# option: generate JPEG image
#
define("BCS_IMAGE_JPEG", 32);
#
# option: generate PNG image
#
define("BCS_IMAGE_PNG", 64);
#
# option: draw text
#
define("BCS_DRAW_TEXT", 128);
#
# option: stretch text
#
define("BCS_STRETCH_TEXT", 256);
#
# option: reverse color
#
define("BCS_REVERSE_COLOR", 512);
#
# option: draw check
# (only for I25 code)
#
define("BCS_I25_DRAW_CHECK", 2048);
#
# set default background color
#
define("BCD_DEFAULT_BACKGROUND_COLOR", 0xFFFFFF);
#
# set default foreground color
#
define("BCD_DEFAULT_FOREGROUND_COLOR", 0x000000);
#
# set default style options
#
define("BCD_DEFAULT_STYLE", BCS_BORDER | BCS_ALIGN_CENTER | BCS_IMAGE_PNG);
#
# set default width
#
define("BCD_DEFAULT_WIDTH", 460);
#
# set default height
#
define("BCD_DEFAULT_HEIGHT", 120);
#
# set default font
#
define("BCD_DEFAULT_FONT", 5);
#
# st default horizontal resolution
#
define("BCD_DEFAULT_XRES", 2);
# Margins
#
# set default margin
#
define("BCD_DEFAULT_MAR_Y1", 0);
#
# set default margin
#
define("BCD_DEFAULT_MAR_Y2", 0);
#
# set default text offset
#
define("BCD_DEFAULT_TEXT_OFFSET", 2);
# For the I25 Only
#
# narrow bar option
# (only for I25 code)
#
define("BCD_I25_NARROW_BAR", 1);
#
# wide bar option
# (only for I25 code)
#
define("BCD_I25_WIDE_BAR", 2);
# For the C39 Only
#
# narrow bar option
# (only for c39 code)
#
define("BCD_C39_NARROW_BAR", 1);
#
# wide bar option
# (only for c39 code)
#
define("BCD_C39_WIDE_BAR", 2);
# For Code 128
#
# set type 1 bar
# (only for c128 code)
#
define("BCD_C128_BAR_1", 1);
#
# set type 2 bar
# (only for c128 code)
#
define("BCD_C128_BAR_2", 2);
#
# set type 3 bar
# (only for c128 code)
#
define("BCD_C128_BAR_3", 3);
#
# set type 4 bar
# (only for c128 code)
#
define("BCD_C128_BAR_4", 4);
#
# Barcode Render Class for PHP using the GD graphics library.
# @author Karim Mribti, Nicola Asuni
# @name BarcodeObject
# @package com.tecnick.tcpdf
# @@version 0.0.8a 2001-04-01 (original code)
# @since 2001-03-25
# @license http://www.gnu.org/copyleft/lesser.html LGPL
#
class BarcodeObject {
#
# @var Image width in pixels.
# @access protected
#
protected $mWidth;
#
# @var Image height in pixels.
# @access protected
#
protected $mHeight;
#
# @var Numeric code for Barcode style.
# @access protected
#
protected $mStyle;
#
# @var Background color.
# @access protected
#
protected $mBgcolor;
#
# @var Brush color.
# @access protected
#
protected $mBrush;
#
# @var Image object.
# @access protected
#
protected $mImg;
#
# @var Numeric code for character font.
# @access protected
#
protected $mFont;
#
# @var Error message.
# @access protected
#
protected $mError;
#
# @var Character Set.
# @access protected
#
protected $mCharSet;
#
# @var Allowed symbols.
# @access protected
#
protected $mChars;
#
# Class Constructor.
# @param int $Width Image width in pixels.
# @param int $Height Image height in pixels.
# @param int $Style Barcode style.
#
def __construct($Width=BCD_DEFAULT_WIDTH, $Height=BCD_DEFAULT_HEIGHT, $Style=BCD_DEFAULT_STYLE)
@mWidth = $Width;
@mHeight = $Height;
@mStyle = $Style;
@mFont = BCD_DEFAULT_FONT;
@mImg = ImageCreate(@mWidth, @mHeight);
$dbColor = @mStyle & BCS_REVERSE_COLOR ? BCD_DEFAULT_FOREGROUND_COLOR : BCD_DEFAULT_BACKGROUND_COLOR;
$dfColor = @mStyle & BCS_REVERSE_COLOR ? BCD_DEFAULT_BACKGROUND_COLOR : BCD_DEFAULT_FOREGROUND_COLOR;
@mBgcolor = ImageColorAllocate(@mImg, ($dbColor & 0xFF0000) >> 16,
($dbColor & 0x00FF00) >> 8, $dbColor & 0x0000FF);
@mBrush = ImageColorAllocate(@mImg, ($dfColor & 0xFF0000) >> 16,
($dfColor & 0x00FF00) >> 8, $dfColor & 0x0000FF);
if (!(@mStyle & BCS_TRANSPARENT))
ImageFill(@mImg, @mWidth, @mHeight, @mBgcolor);
end
end
#
# Class Destructor.
# Destroy image object.
#
def __destructor()
@DestroyObject();
end
#
# Returns the image object.
# @return object image.
# @author Nicola Asuni
# @since 1.5.2
#
def getImage()
return @mImg;
end
#
# Abstract method used to draw the barcode image.
# @param int $xres Horizontal resolution.
#
def DrawObject($xres) {
# there is not implementation neded, is simply the asbsract function.#
return false;
end
#
# Draws the barcode border.
# @access protected
#
protected function DrawBorder()
ImageRectangle(@mImg, 0, 0, @mWidth-1, @mHeight-1, @mBrush);
end
#
# Draws the alphanumeric code.
# @param int $Font Font type.
# @param int $xPos Horiziontal position.
# @param int $yPos Vertical position.
# @param int $Char Alphanumeric code to write.
# @access protected
#
protected function DrawChar($Font, $xPos, $yPos, $Char)
ImageString(@mImg,$Font,$xPos,$yPos,$Char,@mBrush);
end
#
# Draws a character string.
# @param int $Font Font type.
# @param int $xPos Horiziontal position.
# @param int $yPos Vertical position.
# @param int $Char string to write.
# @access protected
#
protected function DrawText($Font, $xPos, $yPos, $Char)
ImageString(@mImg,$Font,$xPos,$yPos,$Char,@mBrush);
end
#
# Draws a single barcode bar.
# @param int $xPos Horiziontal position.
# @param int $yPos Vertical position.
# @param int $xSize Horizontal size.
# @param int $xSize Vertical size.
# @return bool trur in case of success, false otherwise.
# @access protected
#
protected function DrawSingleBar($xPos, $yPos, $xSize, $ySize)
if ($xPos>=0 && $xPos<=@mWidth && ($xPos+$xSize)<=@mWidth &&
$yPos>=0 && $yPos<=@mHeight && ($yPos+$ySize)<=@mHeight)
for ($i=0;$i<$xSize;$i++)
ImageLine(@mImg, $xPos+$i, $yPos, $xPos+$i, $yPos+$ySize, @mBrush);
end
return true;
end
return false;
end
#
# Returns the current error message.
# @return string error message.
#
def GetError()
return @mError;
end
#
# Returns the font height.
# @param int $font font type.
# @return int font height.
#
def GetFontHeight($font)
return ImageFontHeight($font);
end
#
# Returns the font width.
# @param int $font font type.
# @return int font width.
#
def GetFontWidth($font)
return ImageFontWidth($font);
end
#
# Set font type.
# @param int $font font type.
#
def SetFont($font)
@mFont = $font;
end
#
# Returns barcode style.
# @return int barcode style.
#
def GetStyle()
return @mStyle;
end
#
# Set barcode style.
# @param int $Style barcode style.
#
def SetStyle ($Style)
@mStyle = $Style;
end
#
# Flush the barcode image.
#
def FlushObject()
if ((@mStyle & BCS_BORDER))
@DrawBorder();
end
if (@mStyle & BCS_IMAGE_PNG)
Header("Content-Type: image/png");
ImagePng(@mImg);
elsif (@mStyle & BCS_IMAGE_JPEG)
Header("Content-Type: image/jpeg");
ImageJpeg(@mImg);
end
end
#
# Destroy the barcode image.
#
def DestroyObject()
ImageDestroy(@mImg);
end
}
#============================================================+
# END OF FILE
#============================================================+
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
#============================================================+
# File name : c39object.rb
# Begin : 2002-07-31
# Last Update : 2004-12-29
# Author : Karim Mribti [barcode@mribti.com]
# : Nicola Asuni [info@tecnick.com]
# Version : 0.0.8a 2001-04-01 (original code)
# License : GNU LGPL (Lesser General Public License) 2.1
# http://www.gnu.org/copyleft/lesser.txt
# Source Code : http://www.mribti.com/barcode/
#
# Description : Code 39 Barcode Render Class for PHP using
# the GD graphics library.
# Code 39 is an alphanumeric bar code that can
# encode decimal number, case alphabet and some
# special symbols.
#
# NOTE:
# This version contains changes by Nicola Asuni:
# - porting to Ruby
# - code style and formatting
# - automatic php documentation in PhpDocumentor Style
# (www.phpdoc.org)
# - minor bug fixing
#============================================================+
#
# Code 39 Barcode Render Class.<br>
# Code 39 is an alphanumeric bar code that can encode decimal number, case alphabet and some special symbols.
# @author Karim Mribti, Nicola Asuni
# @name BarcodeObject
# @package com.tecnick.tcpdf
# @@version 0.0.8a 2001-04-01 (original code)
# @since 2001-03-25
# @license http://www.gnu.org/copyleft/lesser.html LGPL
#
#
# Code 39 Barcode Render Class.<br>
# Code 39 is an alphanumeric bar code that can encode decimal number, case alphabet and some special symbols.
# @author Karim Mribti, Nicola Asuni
# @name BarcodeObject
# @package com.tecnick.tcpdf
# @@version 0.0.8a 2001-04-01 (original code)
# @since 2001-03-25
# @license http://www.gnu.org/copyleft/lesser.html LGPL
#
class C39Object extends BarcodeObject {
#
# Class Constructor.
# @param int $Width Image width in pixels.
# @param int $Height Image height in pixels.
# @param int $Style Barcode style.
# @param int $Value value to print on barcode.
#
def __construct($Width, $Height, $Style, $Value)
parent::__construct($Width, $Height, $Style);
@mValue = $Value;
@mChars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-.#$/+%";
@mCharSet = array (
# 0 # "000110100",
# 1 # "100100001",
# 2 # "001100001",
# 3 # "101100000",