copy
<?php
require('fpdi.php ' );
copy
class PDF_Japanese extends fpdi
{
( 2009/07/09 現在、fpdf_tpl.php の変更 )
copy
<?php
require('fpdf.php ' );
copy
function AddSJISFont($font='MS-Mincho',$family='SJIS' )
{
//Add SJIS font with proportional Latin
$name=$font ;
$cw=$GLOBALS['SJIS_widths' ];
$CMap='90msp-RKSJ-H' ;
$registry=array('ordering'=>'Japan1','supplement' =>2);
$this->AddCIDFonts($family,$name,$cw,$CMap,$registry);
}
↓変更後のサンプル
copy
$SJIS_widths=array(' '=>278,'!'=>299,' "'=>353,'#'=>614,'$'=>614,'%'=>721,'&'=>735,'\'' =>216,
'('=>323,')'=>323,'*'=>449,'+'=>529,','=>219,'-'=>306,'.'=>219,'/'=>453,'0'=>614,'1' =>614,
'2'=>614,'3'=>614,'4'=>614,'5'=>614,'6'=>614,'7'=>614,'8'=>614,'9'=>614,':'=>219,';' =>219,
'<'=>529,'='=>529,'>'=>529,'?'=>486,'@'=>744,'A'=>646,'B'=>604,'C'=>617,'D'=>681,'E' =>567,
'F'=>537,'G'=>647,'H'=>738,'I'=>320,'J'=>433,'K'=>637,'L'=>520,'M'=>904,'N'=>710,'O' =>716,
'P'=>605,'Q'=>520,'R'=>623,'S'=>520,'T'=>601,'U'=>690,'V'=>668,'W'=>990,'X'=>681,'Y' =>634,
'Z'=>578,'['=>316,'\\'=>614,']'=>316,'^'=>529,'_'=>500,'`'=>387,'a'=>509,'b'=>566,'c' =>478,
'd'=>565,'e'=>503,'f'=>337,'g'=>549,'h'=>580,'i'=>540,'j'=>266,'k'=>544,'l'=>540,'m' =>854,
'n'=>579,'o'=>550,'p'=>578,'q'=>566,'r'=>410,'s'=>444,'t'=>540,'u'=>575,'v'=>512,'w' =>760,
'x'=>503,'y'=>529,'z'=>453,'{'=>326,'|'=>380,'}'=>326,'~' =>387);
SQL と lightbox が綺麗に表示されるように変更しています。
実際の印字サンプルの実行
model.php
copy
<?php
require('japanese.php' );
class PDF_lightbox extends PDF_japanese
{
public $bx = 0;
public $by = 0;
# **********************************************************
# 新規ページ
# **********************************************************
function newUserPage($Title,$Option="" ) {
// 新しいページを追加
// P : ポートレイト( 縦 )
// 背景色 セット
$this->AddPage('P' );
$this->SetFillColor( 255, 255, 255 );
// 号
$this->SetFont( 'SJIS', '' , 12 );
$this->LocText( 150, -20, '第 号' );
// タイトル印字
$this->SetFont( 'SJIS', 'B' , 20 );
$this->LocText( 65, 0, $Title );
// 個人情報
$x = 40;
$y = 23;
// 氏名
$this->SetFont( 'SJIS', '' , 16 );
$this->LocText( 40, 23, "山田 太郎" );
$x = 40;
$y = 60;
$this->SetFont( 'SJIS-2', 'B' , 18 );
$Text = '上記の者は、間違い無く' ;
$this->LocText( $x, $y, $Text );
$this->SetFont( 'SJIS-2', 'I' , 18 );
$Text = '銀プログラマである事を' ;
$this->LocText( $x, $y+20, $Text );
$this->SetFont( 'SJIS-2', 'B' , 18 );
$Text = '証明致します。' ;
$this->LocText( $x, $y+40, $Text );
$dt = explode( "/" , date("m/d/Y" ) );
// 平成
$this->SetFont( 'SJIS', 'B' , 13 );
$dt[2] = ($dt[2]+0) - 1988;
$this->LocText( $x+7, $y+60, "平成" );
$this->LocText( $x+20, $y+60, sprintf( "%d年" , $dt[2]+0 ), 'I' , 12 );
$this->LocText( $x+37, $y+60, sprintf( "%d月" , $dt[0]+0 ) );
$this->LocText( $x+50, $y+60, sprintf( "%d日" , $dt[1]+0 ) );
$this->SetFont( 'SJIS', 'B' , 13 );
$this->LocText( $x+40, $y+95, "架空法人 システム家成育社" );
$this->LocText( $x+40, $y+105, "SQLの窓学院" );
$this->LocText( $x+68, $y+115, "校 長" );
$this->LocText( $x+94, $y+115, "lightbox" );
}
# **********************************************************
# 座標設定印字
# **********************************************************
function LocText( $x, $y, $str, $style='NONE' , $size=14 ) {
if ( $style != 'NONE' ) {
$this->SetFont('SJIS' ,$style,$size);
}
$this->Text( $this->bx + $x, $this->by + $y, $str );
}
# **********************************************************
# 印字基点座標設定
# **********************************************************
function SetBase( $x=0, $y=0 ) {
$this->bx = $x;
$this->by = $y;
}
}
?>
control.php
copy
<?
# **********************************************************
# ライブラリ類の参照
# **********************************************************
$sep = PATH_SEPARATOR;
set_include_path( ".{$sep}fpdf16" );
# **********************************************************
# SJIS への変換環境( このファイルは SHIFT_JIS )
# **********************************************************
mb_language( "ja" );
mb_internal_encoding("UTF-8" );
# **********************************************************
# PDF を使用する為のユーザ環境
# **********************************************************
require_once( "model.php" );
# **********************************************************
# PDF アクセス用のインスタンス作成
# ( PDF_lightbox は、model.php 定義 )
# **********************************************************
$pdf = new PDF_lightbox();
// 基点の定義
$pdf->SetBase( 0, 60 );
# **********************************************************
# 日本語環境
# ( デフォルトの MS-Mincho )
# **********************************************************
$pdf->AddSJISFont( );
$pdf->AddSJISFont("MS-Gothic" , "SJIS-2" );
# **********************************************************
# 印刷処理
# **********************************************************
$pdf->newUserPage( '銀 色 の 証 明 書' );
# **********************************************************
# PDF を ブラウザに出力
# **********************************************************
$pdf->Output();
?>
固定部分をフォームとして出力し、FPDI の機能を使って非固定部分のみ出力する
copy
$pdf->Output( "form.pdf" , "F" );
作成された PDF
実行
copy
<?php
require('japanese.php' );
class PDF_lightbox extends PDF_japanese
{
public $bx = 0;
public $by = 0;
# **********************************************************
# 新規ページ
# **********************************************************
function newUserPage($Title,$Option="" ) {
// **********************************************************
// PDF を読み込んでページ数を得る
// **********************************************************
$pagecount = $this->setSourceFile("form.pdf" );
// ページ番号より ID を取得する
$tplidx = $this->ImportPage($pagecount);
// 新しいページを追加
// P : ポートレイト( 縦 )
// 背景色 セット
$this->AddPage('P' );
// フォームオーバレイとして適用する
$this->useTemplate($tplidx);
$this->SetFillColor( 255, 255, 255 );
// 個人情報
$x = 40;
$y = 23;
// 氏名
$this->SetFont( 'SJIS', '' , 16 );
$this->LocText( 40, 23, "山田 太郎" );
$x = 40;
$y = 60;
$dt = explode( "/" , date("m/d/Y" ) );
$this->LocText( $x+20, $y+60, sprintf( "%d年" , $dt[2]+0 ), 'I' , 12 );
$this->LocText( $x+37, $y+60, sprintf( "%d月" , $dt[0]+0 ) );
$this->LocText( $x+50, $y+60, sprintf( "%d日" , $dt[1]+0 ) );
}
# **********************************************************
# 座標設定印字
# **********************************************************
function LocText( $x, $y, $str, $style='NONE' , $size=14 ) {
if ( $style != 'NONE' ) {
$this->SetFont('SJIS' ,$style,$size);
}
$this->Text( $this->bx + $x, $this->by + $y, $str );
}
# **********************************************************
# 印字基点座標設定
# **********************************************************
function SetBase( $x=0, $y=0 ) {
$this->bx = $x;
$this->by = $y;
}
}
?>
copy
Set AddPath=C:\Program Files\Microsoft Visual Studio 8\Common7\IDE
Set PATH=%AddPath%;%PATH%
Set CL8="C:\Program Files\Microsoft Visual Studio 8\VC\bin\cl.exe"
Set LINK8="C:\Program Files\Microsoft Visual Studio 8\VC\bin\link.exe"
Set INC81="C:\Program Files\Microsoft Visual Studio 8\VC\include"
Set INC82="C:\Program Files\Microsoft Platform SDK\Include"
Set INC83="C:\Program Files\Microsoft Platform SDK\Include\atl"
Set LIB81="C:\Program Files\Microsoft Visual Studio 8\VC\lib"
Set LIB82="C:\Program Files\Microsoft Platform SDK\Lib"
Set LIBS1=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib
Set LIBS2=shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib LIBCMT.lib
%CL8% -DWINDOWS -c bdf.c /I%INC81% /I%INC82% /I%INC83%
%CL8% -DWINDOWS -c ttf2pt1.c /I%INC81% /I%INC82% /I%INC83%
%CL8% -DWINDOWS -c pt1.c /I%INC81% /I%INC82% /I%INC83%
%CL8% -DWINDOWS -c ttf.c /I%INC81% /I%INC82% /I%INC83%
%CL8% -DWINDOWS -c t1asm.c /I%INC81% /I%INC82% /I%INC83%
%CL8% -DWINDOWS -c bitmap.c /I%INC81% /I%INC82% /I%INC83%
%LINK8% /LIBPATH:%LIB81% /LIBPATH:%LIB82% ttf2pt1.obj pt1.obj t1asm.obj ttf.obj bdf.obj bitmap.obj %LIBS1% %LIBS2%
copy
ttf2pt1 -a C:\WINNT\Fonts\impact.ttf impact
copy
<?
require('makefont.php' );
MakeFont('C:\\WINNT\\Fonts\\impact.ttf','impact.afm','cp1252' );
?>
OK