茫茫網海中的冷日
         
茫茫網海中的冷日
發生過的事,不可能遺忘,只是想不起來而已!
 恭喜您是本站第 1729345 位訪客!  登入  | 註冊
主選單

Google 自訂搜尋

Goole 廣告

隨機相片
HoneyMoon_Day3_00054.jpg

授權條款

使用者登入
使用者名稱:

密碼:


忘了密碼?

現在就註冊!

PHP特區 : [轉貼]免費好用的 PDF Library 大搜集

發表者 討論內容
冷日
(冷日)
Webmaster
  • 註冊日: 2008/2/19
  • 來自:
  • 發表數: 15771
[轉貼]利用 FPDI 製作 PDF 檔案

利用 FPDI 製作 PDF 檔案

昨天研究如何在既有的 PDF 檔案上放入中文字,雖然找到支援中文的 FPDF ,但是有些 Unicode 字集我實在試不出如何顯示 (如:堃) 。

我的同事建議我用圖形來解決看看,以下就是我的實驗過程 (我用的是 Windows 平台) 。

我用的相關技術如下:


名稱說明下載網址
FPDFPHP 上用來產生 PDF 的第三方套件 http://www.fpdf.org/
FPDI用來載入一個已存在的 PDF 檔案,以供 FPDF 使用 http://fpdi.setasign.de/
香港參考宋體 (DFSongSd.ttf) 包含許多 Windows 內建中文字體所沒有的中文字 http://glyph.iso10646hk.net/index.jsp
GD 2 PHP 產生圖形用的延伸套件PHP Win32 內建
iconv轉換文字編碼PHP Win32 內建

首先,我利用 FPDI 來載入一個已存在的 PDF :




1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

<?php
error_reporting (E_ALL);
require_once ('FPDI/FPDI.php');
// 建立 FPDI 物件
$pdf = new FPDI();
// 載入現在 PDF 檔案
$page_count = $pdf->setSourceFile("test.pdf");
// 匯入現在 PDF 檔案的第一頁
$tpl = $pdf->importPage(1);
// 在新的 PDF 上新增一頁
$pdf->addPage();
// 在新增的頁面上使用匯入的第一頁
$pdf->useTemplate($tpl);
// 輸出成本地端 PDF 檔案
$pdf->output("final.pdf", "F");
// 結束 FPDI 剖析器
$pdf->closeParsers();
?>

FPDI 是繼承自 FPDF 這個類別,所以它本身就算是一個加強型的 FPDF 。上面的程式會把現有 PDF 的第一頁輸出成新的 PDF 檔案。

接著我把表單傳送過來的文字,放到一個現有的圖形檔上。這裡有兩種實作方式:如果 HTML 頁面編碼是 Big5 ,那麼我會先把表單傳送過來的文字用 iconv 轉成 UTF-8 編碼;如果 HTML 頁面編碼已經是 UTF-8 ,那麼就不必再用 iconv 轉換。我採用的是第一種方式:




1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35

<?php
$text = isset($_POST['text']) ? trim($_POST['text']) : NULL;
$is_created = FALSE;
if ($text)
{
// 產生圖片
$img = imagecreatefrompng('test.png');
// 設定黑色畫筆
$black = imagecolorallocate($img, 0, 0, 0);
// 轉換文字編碼
$utf_text = iconv('big5', 'utf-8', $text);
// 繪製文字
imagettftext($img, 30, 0, 10, 40, $black, "DFSongSd.ttf", $utf_text);
// 儲存圖片
imagepng($img, 'final.png');
imagedestroy($img);
$is_created = TRUE;
}
?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=big5" />
<title>測試</title>
</head>
<body>
<form name="form1" id="form1" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
<input type="text" name="text" id="text" value="<?php echo $text; ?>" />
<input type="submit" name="Submit" value="送出" />
<a href="./">重新製作</a>
</form>
<?php if ($is_created) { ?>
<img src="final.png" alt="<?php echo $text; ?>" />
<?php } ?>
</body>
</html>

如此一來在輸入文字並按下送出鈕後,就會在現有圖片上加上指定的文字。當然文字的位置要加以計算,我是先用最簡單的方式來完成。

最後就是要將製作好的圖片加到 PDF 上了, FPDF 提供了 image 函式來讓我們可以在 PDF 上放置圖形。實作方式如下:




1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

// 產生圖片
$img = imagecreatefrompng('test.png');
$black = imagecolorallocate($img, 0, 0, 0);
$utf_text = iconv('big5', 'utf-8', $text);
imagettftext($img, 30, 0, 10, 40, $black, "DFSongSd.ttf", $utf_text);
imagepng($img, 'final.png');
imagedestroy($img);
// 載入現在 PDF 的第一頁
$pdf = new FPDI();
$page_count = $pdf->setSourceFile("test.pdf");
$tpl = $pdf->importPage(1);
$pdf->addPage();
$pdf->useTemplate($tpl);
// 放置圖形
$pdf->image("final.png", 75, 85, 50);
// 輸出成本地端 PDF 檔
$pdf->output("final.pdf", "F");
$pdf->closeParsers();

要注意的是,貼上去的圖形可以大一點,這樣縮小並貼到 PDF 時會有比較好的列印效果。而圖形的放置位置和大小,也要經過計算再貼上去。


原文出處:利用 FPDI 製作 PDF 檔案 - 網站製作學習誌
前一個主題 | 下一個主題 | | | |

討論串




Powered by XOOPS 2.0 © 2001-2008 The XOOPS Project|