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

Google 自訂搜尋

Goole 廣告

隨機相片
PIMG_00211.jpg

授權條款

使用者登入
使用者名稱:

密碼:


忘了密碼?

現在就註冊!

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

發表者 討論內容
冷日
(冷日)
Webmaster
  • 註冊日: 2008/2/19
  • 來自:
  • 發表數: 15771
[轉貼]免費好用的 PDF Library 大搜集

[PHP] 免費好用的 PDF Library 大搜集

雖然 PHP 有附 PDFlib,不過使用起來實在有點複雜。

20060415_01.png
(PHP 說明文件中的範例)


FPDF
雖然現在已經停止更新了,但 FPDF 可謂是元老級的 PDF 程式庫,短短的幾行程式就可以產生出 PDF 檔案。最可怕的是現今的 PHP PDF 程式庫大多是由 FPDF 衍生出來的。(可謂程式界的 桃生純太)

20060415_02.png
(FDPF 的 範例)

授權方式: 任你處置
官方網址: http://www.fpdf.org/

UFPDF
由於 FPDF 不支援 UTF-8 ,所以有善心人士做了一個 UFPDF 出來。


授權方式: GPL
官方網址: http://www.acko.net/blog/ufpdf

FPDI (Apache Software License 2.0)
可以把 PDF 檔案匯入當作 FPDF 的樣板使用。而且 FPDI 還另外提供了FPDI_Protection 來保護 FPDF/FPDI 的 PDF 檔案。

授權方式: Apache License 2.0
官方網址: http://fpdi.setasign.de

TCPDF
也是由 FPDF 改寫而來,除了支援 UTF-8 之外,最特別的地方就是整合了 Generic Barcode Render Class,可以直接在 PDF 上加上條碼。(目前只支援 PHP5)

授權方式: LGPL
官方網址: http://tcpdf.sourceforge.net/

================= HTML 轉 PDF =================

HTML 2 (F)PDF
嫌一個個貼文字跟圖型到 PDF 太累? HTML 2 (F)PDF 一次幫你把 HTML 轉成 PDF,夠輕鬆了吧。

授權方式: LGPL
官方網址: http://html2fpdf.sourceforge.net/


HTML To PDF Conversion
另一個將 HTML 轉為 PDF 的程式,只是看起來不支援 UTF-8。

授權方式: PHP
官方網址: http://www.rustyparts.com/pdf.php

dompdf
支援 UTF-8 的 HTML 轉 PDF 程式,但是必須安裝 PDFLib 的正式授權版才能支援UTF-8 ,且需在 PHP 5 環境下執行。

授權方式: LGPL
官方網址: http://www.digitaljunkies.ca/dompdf

html2ps and html2pdf
也是可以把 HTML 轉成 PDF 的程式,不過是看起來是透過 GhostScript 來轉換的,有興趣的人可以去看看。

授權方式: FREE for commercial and non-commercial use
官方網址: http://www.tufat.com/script.php?id_num=19

補充一個:

PDFB
http://chir.ag/tech/download/pdfb/
也是用來產生 Barcode 的 PDF Library ,支援 Code 3 of 9, Code 128, Interleaved 2 of 5, and UPC-A 。


原文出處:
Neo 's Blog » [PHP] 免費好用的 PDF Library 大搜集
冷日
(冷日)
Webmaster
  • 註冊日: 2008/2/19
  • 來自:
  • 發表數: 15771
[分享]PHP 之 PDF Library UTF-8 中文解決方案
我已經採用 UFPDF 產出 utf8 的PDF 文件.
可以參考這個網頁
http://www.fpdf.org/phorum/read.php?f=1&i=5142&t=5142 (後半段)

有三個必要套件
1.fpdf:http://www.fpdf.org
2.chinese:http://www.fpdf.org/download/chinese.zip
3.chinese-unicode:https://www.eejj.net/fpdf/chinese-unicode.zip

關於 unicode 部分, 請參照 chinese-unicode 中的 readme 來設定即可!



TCPDF 可以產生不用內嵌字型檔案的 pdf 檔案了,下面是 Joomla 社群的討論:
http://www.joomla.org.tw/phpbb3/viewtopic.php?f=39&t=3040

玩了一下,發現 tcpdf 4.3.006 中已經內附了一個正體中文的字體描述,所以只要下面程式碼就能夠順利產生中文 pdf (utf-8):
$pdf->SetFont("msungstdlight", "", 18);
$pdf->Cell(0, 0, "游錫堃", 1, 1, 'C');

目前在 Linux 環境下產生與閱讀都沒問題,不過只能夠透過 Adobe Acrobat Reader 開啟......
冷日
(冷日)
Webmaster
  • 註冊日: 2008/2/19
  • 來自:
  • 發表數: 15771
[轉貼] PHP 生成 PDF 完美支持中文,解決 TCPDF 亂碼
PHP生成PDF完美支持中文,解決TCPDF亂碼
發佈者: logken 分類: php

PHP生成PDF格式文件以TCPDF為基礎,TCPDF是一個用於快速生成PDF文件的PHP5函數包。TCPDF基於FPDF進行擴展和改進。支持UTF-8,Unicode,HTML和 XHTML。在基於PHP開發的Web應用中,使用它來輸出PDF文件是絕佳的選擇。但畢竟這款開源軟件是外國人開發的,對中文的支持也不是那麼盡如人 意,因此我們需要對它作進一步的強化。
首先要到TCPDF官網下載TCPDF最新版。訪問http://www.tcpdf.org ,單擊導航條上的」Download」鏈接,即可下載到最新版本的TCPDF壓縮包。因為裡面包含了許多的TCPDF範例和字體文件,因此下載的文件比較大,大概有10M左右。下載完後解壓它,會得到一個名為tcpdf的目錄,此目錄的結構大概是這樣的:

將此目錄移動到WEB網站的根目錄下(假設您使用的是Apache,並且使用80端口,如有不同請根據實際情況修改),打開瀏覽器,訪問 http://localhost/tcpdf/ 應該就可以看到此目錄下的文件和文件夾列表。由於TCPDF已經自帶了一些範例,因此為了節省時間,我們可以直接對範例進行修改再使用。打開tcpdf目 錄下的examples目錄,下面有50多個範例文件,其中example_038.php就是用來測試東亞字體的(比如簡體/繁體中文、日文等等),打開此文件,找到$pdf->SetFont 這一行,修改為:
$pdf->SetFont(『stsongstdlight』, 」, 20);


這一行代碼的作用是設置PDF正文所用的字體及字號。其中」stsongstdlight」表示」STSongStdLight」字體,這是Adobe Reader的默認簡體中文字體,TCPDF中已經內置這個字體的配置文件,我們只需直接調用即可。接下來,
$pdf->Write(0,』敏捷的棕毛狐狸躍過那只懶狗『, 」, 0, 『L』, true, 0, false, false, 0);
$pdf->Write(0,』The quick brown fox jumps over the lazy dog.』, 」, 0, 『L』, true, 0, false, false, 0);
$pdf->Write(0,』1234567890′, 」, 0, 『L』, true, 0, false, false, 0);

保存,然後訪問 http://localhost/tcpdf/examples/example_038.php 就可以生成一份PDF文檔了:

使用默認中文字體生成的PDF文件

這種方式生成的PDF文件的優點是:文件體積小,生成快速。但也有缺點是,沒有嵌入中文字體,只限於安裝了Adobe Reader之後才能正常顯示。那萬一用戶使用的是FoxIt Reader或者是Linux操作系統呢?顯示效果就不一樣了。因此,為了保證生成的PDF文件在任何環境下都有同樣的顯示效果,嵌入字體是必需的。
Windows下有很多中文字體,但是我們要用在TCPDF中的中文字體有下面幾個要求:

· 支持Unicode,因為TCPDF支持的是Unicode;
· 體積越小越好;
· 最好是也支持繁體中文;

這樣看來,微軟雅黑以及方正的一些字體都符合要求。但是他們都是商業字體,而且個頭都不小,以微軟雅黑為例,msyh.ttf 文件就超過10M,如果使用它,生成的PDF文件體積也會很大。
綜合考慮,我覺得」Droid Sans Fallback」字體符合要求:

· 首先它是免費字體;
· 其次它也是Unicode編碼,支持簡體繁體中文以及日文韓文等等;
· 然後它的體積很小,不超過5M。

然而TCPDF不支持TTF字體文件,因此我們先將它轉換成TCPDF支持的格式,然後再使用。在TCPDF目錄下有個fonts子目錄,這個子目錄下又有個utils,這裡面帶有一個字體轉換工具ttf2ufm.exe。下面是轉換的步驟:
在網上很容易找到Droid Sans Fallback字體的下載鏈接,因此在這裡就沒有必要多做描述了。我們把下載到的 DroidSansFallback.ttf 複製到 TCPDF\fonts\utils 下面,然後打開Windows的命令行,切換到此路徑下,輸入如下命令:
D:\www\tcpdf\fonts\utils>ttf2ufm -a -F DroidSansFallback.ttf

等待一段時間,等到命令行窗口顯示
「Finished – font files created」

之後,可以發現此目錄下生成了DroidSansFallback.afm,DroidSansFallback.t1a 和 DroidSansFallback.ufm 這三個文件。
在命令行中輸入
「C:\Program Files\WAMP\PHP5\php.exe」 -q makefont.php DroidSansFallback.ttf DroidSansFallback.ufm

說明:這裡的」C:\Program Files\WAMP\PHP5\php.exe」為php.exe文件所在的路徑,請根據實際情況輸入。回車運行之後,稍等片刻,命令行窗口中會提示
Font definition file generated

至此大功告成。將生成的droidsansfallback.php、droidsansfallback.z以及droidsansfallback.ctg.z這三個文件複製到 TCPDF\fonts 下面即可。

生成不成功也沒問題,另一個方法是到Joomla中文官網http://www.joomlagate.com下載Joomla中文程序找到\language\pdf_fonts目錄下複製droidsansfallback.php、droidsansfallback.z以及droidsansfallback.ctg.z這三個文件也是可以的
打開example_038.php文件,將
$pdf->SetFont(『stsongstdlight』, 」, 20);

修改為
$pdf->SetFont(『droidsansfallback』, 」, 20);

這樣就能夠調用我們剛才生成的字體,再訪問 http://localhost/tcpdf/examples/example_038.php 就可以看到重新生成的PDF文檔。

嵌入DroidSansFallback字體後的PDF文檔

附註:SetHeaderData裡中文的解決方法為:
tcpdf\config\tcpdf_config.php
define (『PDF_FONT_NAME_MAIN』, 『helvetica』);

改為:
define (『PDF_FONT_NAME_MAIN』, 『stsongstdlight』);
define (『PDF_FONT_NAME_DATA』, 『helvetica』);
改為: define (『PDF_FONT_NAME_DATA』, 『stsongstdlight』);
[code]

就可以把example_038.php文件中的
[code]
$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.』 038′, PDF_HEADER_STRING);

改為:
$pdf->SetHeaderData(PDF_HEADER_LOGO,PDF_HEADER_LOGO_WIDTH,』中文頭部』, 『作者和版權』);

假如你的網站源碼為GBK格式 輸出的PDF內容為亂碼的話 就需要做個簡單的轉換了,把需要打出的中文文字做
iconv(「gb2312//TRANSLIT」,』utf-8′,$str);
$pdf->Write(0,iconv(「gb2312//TRANSLIT」,』utf-8′,』解決GBK網站輸出中文亂碼問題『), 」, 0, 『L』, true, 0, false, false, 0);



原文出處: PHP生成PDF完美支持中文,解决TCPDF乱码
冷日
(冷日)
Webmaster
  • 註冊日: 2008/2/19
  • 來自:
  • 發表數: 15771
[轉貼]使用 PHP 開源類別 ( TCPDF ) 製作 UTF-8 的 PDF 報表

使用PHP開源類別(TCPDF)製作 UTF-8 的PDF報表


最近有PHP專案需要製作報表,決定了輸出使用PDF格式後,便開始尋找解決方案。目前網路上找到的大多是FPDF或是其衍生出來的專案,因為有點急,就直接拿FPDF來做,沒想到是惡夢的開始XD,使用FPDF製作英文內容的FPDF,是沒什麼問題,但如果是中文內容,便問題重重。

試了很多目前現存在網路上號稱支援中文的FPDF,試驗結果不是失敗就是只支援BIG5 (chinese.php檔),偏偏客戶的中文資料有罕見字,像是媖、煊、堃、珉、彣、伃、峯、晧等字,若用BIG5就會出不來。

試了好幾個小時後宣告放棄FPDF,尋找它表現比較好的子孫,於是找到TCPDF

TCPDF因為是FPDF的子孫,所以語法幾乎不太需要轉換,而且支援UTF-8,真的是感動哪。不過它最感心的不只是支援UTF-8,它還支援WriteHTML這個超級相見恨晚的函式,故名思義就是只要餵它HTML語法,它就可以忠實轉成PDF內容。

到TCPDF官網下載TCPDF後,解開後可發現裡頭的examples目錄就有很多範例了。做報表最基本的就是頁首、頁尾的設定了,可參考第1~3個範例;另外,第6個範例就是WriteHTML。

基本上它的使用方式很簡單,只要include TCPDF,自建一個class,然後去extend TCPDF類別,接著new出實體,就可以開始Play了:



include_once ('lib/tcpdf/tcpdf.php');
require_once('lib/tcpdf/config/lang/eng.php');
class PDF_report1 extends TCPDF
{
//Page header
function Header()
{
// 自訂頁首內容
}
function Footer()
{
// 自訂頁尾內容
}
}
$pdf = new PDF_report1('P','mm','A4', true, 'UTF-8', false);

如上,New出來的$pdf,就可以藉著執行一脫拉庫的方法,一步一步的建立PDF格式的內容,最後再output,這個php檔就會輸出成pdf格式了。

至於輸出UTF-8的中文字,只要使用此語法就OK了:



$pdf->SetFont('msungstdlight','',16);

其他詳細用法,直接copy範例修改會比較快。

參考:
TCPDF官網-範例


原文出處:使用PHP開源類別(TCPDF)製作 UTF-8 的PDF報表 @ mr.mu
冷日
(冷日)
Webmaster
  • 註冊日: 2008/2/19
  • 來自:
  • 發表數: 15771
[轉貼]undefined function bcadd()
undefined function bcadd()
2011-10-03 08:00:34 PDT

I`m new and I`m finding an help for this problem,
when I try to use the TCPDF example 27 I receive this error
Fatal error: Call to undefined function bcadd() in /var/www/html/tcpdf/barcodes.php on line 2063
what I`ve missed ?

thanks Paolo

nicolaasuni
2011-10-03 08:38:19 PDT

The IMB barcode (Intelligent Mail Barcode - Onecode - USPS-B-3200) requires the BC Math PHP extension (http://www.php.net/manual/en/book.bc.php) to perform some long calculations.
If want to use this kind of barcode (or see the complete example 27), then you have to install this extension.
Otherwise, edit the example 27 and comment the example of IMB barcode.


原文出處:SourceForge.net: TCPDF - PHP class for PDF: undefined function bcadd()
冷日
(冷日)
Webmaster
  • 註冊日: 2008/2/19
  • 來自:
  • 發表數: 15771
[轉貼]PHP: BC Installing/Configuring

需求

Since PHP 4.0.4, libbcmath is bundled with PHP. You don't need any external libraries for this extension.



安裝

本類函數僅在 PHP 編譯時配置了 --enable-bcmath 時可用。在 PHP 3 中,本類函數僅在 PHP 編譯時 沒有配置 --disable-bcmath 時可用。

PHP 的 Windows 版本已內建對此擴展的支持。不需要載入額外的擴展來使用這些函數。



運行時配置

這些函數的行為受 php.ini 中的設置影響。


BC 數學庫配置選項
名字默認可修改範圍更新日誌
bcmath.scale "0" PHP_INI_ALL 
有關 PHP_INI_* 樣式的更多詳情與定義,見 Where a configuration setting may be set

這是配置指令的簡短說明。

bcmath.scale integer

所有 bcmath 函數中十進制數字的數目。參見 bcscale()



資源類型

此擴展沒有定義資源類型。




原文出處:PHP: Installing/Configuring - Manual
冷日
(冷日)
Webmaster
  • 註冊日: 2008/2/19
  • 來自:
  • 發表數: 15771
[轉貼]使用 PHP(FPDI)產生 UNICODE 中文 PDF

[程式] 使用PHP產生UNICODE中文PDF

從晚上九點弄到一點,趕緊把筆記寫起來


應該會很亂,來源處也要慢慢補


==========================


前言:


因為工作關係需要能用PHP產生PDF作報名表單


爬很多文章看人介紹PDF套件後,選擇了FPDI這套工具


因為FPDI可以匯入已經產生好的PDF檔,在覆蓋一層文字加工


很適合做成表單類的輸出(不然整個表格慢慢一行一行刻會掛點 囧)


 


簡介FPDI


FPDI是繼承於FPDF,FPDF可以說是PHP作PDF的大祖宗,一堆套件都是基於FPDF而發展的


而FPDI可以用樣版匯入的功能是繼承自FPDF_TPL,應該也是FPDF的繼承者吧~


繼承連結(箭頭左方繼承自右方):FPDI.php => FPDF_TPL.php => FPDF.php


 


FPDF http://www.fpdf.org/



FPDI http://www.setasign.de/products/pdf-php-solutions/fpdi/


 


殘酷的事實,UNICODE的逆襲


從<網站製作學習誌>看到這篇 利用 FPDI 製作 PDF 檔案


當中是利用FPDI,再利用圖片輸出UTF8的解決方案


問題來了,原來FDPI不支援UTF8 = =


 


沙漠中的綠洲? 還是海市蜃樓


於是又再繞一大圈,UFPDF、TCPDF....一堆解決方案,就是沒有可以用樣板匯入的功能


但過程中找到FPDF為了解決中文字體的問題,而有chinese.php的改良版


這支chinese.php也是繼承至FPDF發展的,可以輸出中文的PDF


但是還是不支援UNICODE


 



於是又有強者發表了chinese-unicode.php的程式,繼承至chinese.php (很繞口吧)


繼承連結(箭頭左方繼承自右方):chinese-unicode.php => chinese.php => FPDP.php


但是,還是只能一行一行刻= =,已經兩小時了一點進展都沒(嘆)


 


<<chinese(-unicode).php>> http://www.wretch.cc/blog/evanchen/12079184


 


一語點醒夢中人


試了許多組的關鍵字去GOOGLE看有沒有其他可用的解決方法,發現有人原本用ZEND PDF產生也遇到中文的問題


改用FPDI與chinese-unicode.php結合!! 好像又露出一線生機


但是!


要修改chinese-unicode.php,我看不懂原始碼啦= =


又開始CODING地獄


 



<<有人的BLOG>> http://wlx.westgis.ac.cn/556/


 


兩套標準,怎麼結合?


FPDI的繼承路線:FPDI.php => FPDF_TPL.php => FPDF.php


Chinese-Uni:   chinese-unicode.php => chinese.php => FPDP.php


 


這讓我傷透腦筋阿~所以又開始亂拼,居然被我拼出來要改的地方還真多



  1. 修改FPDI.php 從繼承FPDF_TPL改為PDF_Unicode (在chinese-unicode.php)

  2. 修改chinese.php 把 require('fpdf.php') 注解掉  (我已經先引入還是會有問題,乾脆注掉)

  3. 修改chinese.php 內 PDF_Chinese 類別從繼承FPDF改為繼承FPDF_TPL


這時候,已經可以由 樣板產生的 中文 UNICODE PDF ,灑花~~~~~~~


隊只懂物件導向皮毛的我是一件非常不可能的事情XDD



 


新細明體真不搭,標楷體怎麼辦?


GOOGLE: chinese-unicode 標楷體


BINGO! 有兩篇可以看


原來只要修改chinese-unicode.php內的程式碼即可


" function AddUniCNShwFont ($family='Uni', $name='DFKai-SB')  // name for Kai font is DFKai-SB "


其實只要修改粗體的地方(原本是 PMingLiU),改為DFKai-SB即可


 


<<標楷體>> http://www.wretch.cc/blog/evanchen/12079184


 


ADOBE太肥 我要用FOXIT!


另外的小修正,這樣改可以在ADOBE READER正常顯示標楷體


但是FOXIT不行= =



於是有人提出解決方法


將DFKai-SB改為DFKaiShu-SB-Estd-BF


在FOXIT 2.2沒用,更新為3就可以了


(插曲:我在改用其他方案的時候,因為要製作字型描述檔 就把標楷體移過去,所以我一直試都無法變成標楷體,還以為是被唬爛,沒想到是我自己把標楷體弄不見= =,難怪會無法顯示)


<<FOXIT也是標楷體>> http://www.yces.chc.edu.tw/LifeType/blog/1


 


UTF測試正常


其實我也不知道要測甚麼字,就丟了"許公蓋烱測試堃",都可以正常顯示(使用FOXIT 3)


2009-11-22_014941.jpg


 


程式碼



幾乎都是從網站製作學習誌A來的,我只是多REQUIRE一堆東西


如果不想這麼複雜,可能要自己把相關檔案集合,我是都分資料夾比較不會亂



<?php
error_reporting (E_ALL);
define('FPDF_FONTPATH','font/');
require_once ('fpdi/FPDf.php');
require_once ('FPDI/FPDf_tpl.php');
require_once ('chinese-unicode/chinese-unicode.php');
require_once ('fpdi/FPDI.php');

// 建立 FPDI 物件
$pdf = new FPDI();

// 載入現在 PDF 檔案
$page_count = $pdf->setSourceFile("123.pdf");

// 匯入現在 PDF 檔案的第一頁
$tpl = $pdf->importPage(1);

// 在新的 PDF 上新增一頁
$pdf->addPage();

// 在新增的頁面上使用匯入的第一頁
$pdf->useTemplate($tpl);

$pdf->AddUniCNShwFont('uni');
$pdf->SetFont('uni','',20);

//$pdf->SetFont('Arial');
$pdf->SetTextColor(255,0,0);
$pdf->SetXY(25, 25);
$pdf->Write(0, "許公蓋烱測試堃");

// 輸出成本地端 PDF 檔案
$pdf->output("final.pdf", "D");

// 結束 FPDI 剖析器
$pdf->closeParsers();
?>


 



目錄結構


/=>


chinese-unicode/ => chinese.php, chinese-unicode.php ...etc


fpdi/ => fpdi.php, fpdf.php...etc


index.php


123.pdf (Template File)


 


報告完畢,剩下就是喬位子了 Orz...


2011/07/19:關於喬位子,可參考 這篇 補充說明


 


=== 網友David補充 ===


如使用時會出現類似以下錯誤碼


Deprecated: Assigning the return value of new by reference is deprecated in /var/www/html/work/phppdf/fpdi/fpdi.php on line 88


應為使用PHP 5.3.X 版本,導致new class function的時候出問題。(本文是在PHP 5.2.10測試)



此時請修改 fpdi.php 內的 '=& new' 改為 '= new'即可


感謝David!




101.01.17 Update:


這幾天把PHP版本更新為5.3也發生這個問題,補充一下:


要把 =& new 改為 = new 有下列檔案:fpdi.php, fpdi.pdf_parser.php, pdf_parser.php


 


===還有這個錯誤訊息=========================


Message: Function set_magic_quotes_runtime() is deprecated


Filename: chinese-unicode/chinese.php


=======================================


請搜尋 set_magic_quotes_runtime(  取代為 ini_set("magic_quotes_runtime",




原文出處:AsperBlog!: [程式] 使用PHP產生UNICODE中文PDF
冷日
(冷日)
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 檔案 - 網站製作學習誌
冷日
(冷日)
Webmaster
  • 註冊日: 2008/2/19
  • 來自:
  • 發表數: 15771
[轉貼]php 採用 fpdf 生成中文 pdf
php採用fpdf生成中文pdf
發表於 2012 年 8 月 29 日 由 月小升

fpdf官方網站大陸無法打開。
特意下載了一份,放入我的網盤。需要的朋友去下載

1.小測試
發生一個錯誤
Deprecated: Function set_magic_quotes_runtime() is deprecated in /Users/mc2/WEB/php/test/pdf/fpdf.php on line 1126


set_magic_quotes_runtime 原因是導致這個提示的原因是在PHP5.3後此特性(set_magic_quotes_runtime())已經關閉。
而且在PHP6中已經完全移除此特性。
你可以註釋或者刪除掉出錯的行,或者是在set_magic_quotes_runtime()前面加@符號。

害怕錯誤,將這些函數前面都加@符號。

打開fpdf.php這個類庫文件,查找set_magic_quotes_runtime 前面都加上@就好了。

2 入門例子
define('FPDF_FONTPATH','font/');
require('fpdf.php');

$pdf=new FPDF();
$pdf->Open();
$pdf->AddPage();
$pdf->SetFont('Arial','B',16);
$pdf->Cell(40,10,'Hello World!');
$pdf->Output();

這個辦法在瀏覽器直接顯示一個PDF。如果想直接生成文件那麼最後一行修改為
$pdf->Output(『test.pdf』);

即可生成文件。

3 中文處理
採用那個chinese包來處理中文
require('chinese/chinese.php');

$pdf=new PDF_Chinese();

$pdf->AddGBFont('simhei','黑體');
$pdf->Open();

$pdf->AddPage();

$pdf->SetFont('simsun','',20);
$pdf->Cell(40,10,'Hello World!我們是中文哦');
$pdf->Output();

4 圖片處理
$pdf->Image(『sight.jpg』,20,20,0,0); 各種說法說這個可以生成圖片。月小升經過處理,發現加了圖片的PDF是文件變大了。不過圖片看不見。不知道什麼原理

翻開源碼,image函數里有set_magic_quotes_runtime 不知道是不是這個玩意兒造成的。

翻遍各種資料,說TCPDF比較流行。下一步研究一下TCPDF.

目前結論FPDF處理不帶圖片的還行。

中文函數參考

AcceptPageBreak – 接受或不接受自動分頁
AddFont – 加入一個新的字型
AddLink – 建立一個內部連結
AddPage – 加入新的一頁
AliasNbPages – 為每一頁定義一個別名
Cell – 顯示一個儲存格
Close – 使 FDP 文件終止
Error – 嚴重錯誤
Footer – 頁尾
FPDF – PDF 核心建設程式
GetStringWidth – 計算字串的寬度
GetX – 取得現時(X)橫座標的位置
GetY – 取得現時縱座標(Y)的位置
Header – 頁首
Image – 輸出一個圖像
Line – 劃出一條線
Link – 放入一個連結
Ln – 行中斷,換行
MultiCell – 顯示出文字並且則行行中止
Open – 建立一個文件
Output – 儲存或送出文件
PageNo – 取得目前的頁數
Rect – 產生一個矩形
SetAuthor – 設定文件的著作者
SetAutoPageBreak – 設定為自動分頁模式
SetCompression – 啟動(on)或關閉(off)壓縮。
SetCreator – 設定文件的創作者名稱
SetDisplayMode – 設定顯示模式
SetDrawColor – 設定繪畫顏色
SetFillColor – 設定繪畫顏色
SetFont – 設定字型
SetFontSize – 設定字型大小
SetKeywords – 在文件中,把關鍵字聯在一起。
SetLeftMargin – 設定左邊邊界
SetLineWidth – 設定線的寬度
SetLink – 設定內部連結的目的地
SetMargins – 設定頁邊的空白距離
SetRightMargin – 設定右邊的空白距離
SetSubject – 設定文件的主題
SetTextColor – 設定文字的顏色
SetTitle – 設定文件標題
SetTopMargin – 設定頂部空白距離
SetX – 設定目前 x 的位置
SetXY – 設定目前 x 和 y 的位置
SetY – 設定目前 y 的位置
Text – 顯示一個字串
Write – 顯示流暢的文字

在線參考 http://twpug.net/docs/fpdf152/


原文出處:php采用fpdf生成中文pdf | 月小升博客
冷日
(冷日)
Webmaster
  • 註冊日: 2008/2/19
  • 來自:
  • 發表數: 15771
[轉貼]用 PHP 處理中文 PDF
用PHP處理中文PDF
Posted on 2008-12-20 by wlx

因項目需要,現在想在服務器端動態生成PDF文件,已一個PDF為模板,然後把所需的數據動態填入。
本來在使用zend framework,因此很直接的就使用zend_pdf類來進行測試,代碼實現如下:
$pdf = Zend_Pdf::load($this->view->config->offline->template);
$pdf->pages = array_reverse($pdf->pages);
$style = new Zend_Pdf_Style();
$font = Zend_Pdf_Font::fontWithPath($this->view->config->offline->font, ( Zend_Pdf_Font::EMBED_DONT_SUBSET));
$pdf->pages[0]->setFont($font, 10);
$pdf->pages[0]->saveGS();
//datalist
$pdf->pages[0]->drawText(str_replace(";","\n",$datalist), 100, 570,"UTF-8");
//project
$pdf->pages[0]->drawText($formData['project'], 100, 430,"UTF-8");
$pdf->pages[0]->drawText($formData['realname'], 100, 78,"UTF-8");
$pdf->pages[0]->drawText($formData['realname'], 130, 590,"UTF-8");
$pdf->pages[0]->drawText($formData['unit'], 95, 58,"UTF-8");
$pdf->pages[0]->drawText($formData['address'], 285, 58,"UTF-8");
$pdf->pages[0]->drawText($formData['postcode'], 470, 58,"UTF-8");
$pdf->pages[0]->drawText($formData['email'], 95, 40,"UTF-8");
$pdf->pages[0]->drawText($formData['phone'], 295, 40,"UTF-8");
$t=getdate();
$pdf->pages[0]->drawText($t['year'], 465, 40,"UTF-8");
$pdf->pages[0]->drawText($t['mon'], 500, 40,"UTF-8");
$pdf->pages[0]->drawText($t['mday'], 525, 40,"UTF-8");
$pdf->pages[0]->restoreGS();
$fn=$formData['realname'].date('YmdHis').".pdf";
$pdf->save($this->view->config->offline->savepath."/".$fn);

這樣,的確能完成要求,但是令人惱火的是,其把中文字體內嵌到PDF文件中去,因此導致PDF文件過大,而且導致PHP所需內存也增大(64M)。
因此,就開始嘗試別的辦法,開始鎖定fpdf,PHP能完美支持,而且也能支持中文(所要單獨下載chinese.php和chinese-unicode.php)。
但是,FPDF不支持打開已有的PDF文件作為模板,因此還需要使用fpdi進行模板的支持,還要修改fpdi,使其父類為PDF-UNICODE。

然後就可以這樣使用:
$pagecount = $this->setSourceFile($this->template);
$tplidx = $this->importPage(1, '/MediaBox');
$this->addPage();
$this->useTemplate($tplidx);
$this->AddUniGBhwFont('ugb','AdobeSongStd-Light-Acro');

$this->SetFont('ugb','',$this->fontsize);
$this->setXY(45,65);
$this->Write($this->fontsize,$this->data['realname']);

其中,字形由默認的AdobeSongStd-Light改成AdobeSongStd-Light-Acro,是為了防止英文字體變寬和變窄,格式才會整齊,英文字不會擠在一起。(參考: http://bbs.erp100.com/thread-18424-1-1.html)

原文出處:用PHP处理中文PDF | LiangXu Wang
前一個主題 | 下一個主題 | 頁首 | | |



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