|
|
<?php
require('fpdi.php');
| |
|
|
class PDF_Japanese extends fpdi
{
| |
|
( 2009/07/09 現在、fpdf_tpl.php の変更 )
|
<?php
require('fpdf.php');
| |
|
|
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);
}
| |
|
|
|
↓変更後のサンプル
|
$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
|
<?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
|
<?
# **********************************************************
# ライブラリ類の参照
# **********************************************************
$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 の機能を使って非固定部分のみ出力する |
|
|
$pdf->Output( "form.pdf", "F" );
| |
|
作成された PDF
実行
|
<?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;
}
}
?>
| |
|
|
|
|
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%
| |
|
|
ttf2pt1 -a C:\WINNT\Fonts\impact.ttf impact
| |
|
|
<?
require('makefont.php');
MakeFont('C:\\WINNT\\Fonts\\impact.ttf','impact.afm','cp1252');
?>
OK
| |
|
|
|