fpdf chinese-unicode.php,Tommy 碎碎念

post by tommy @ 20 十月, 2007 12:49

以前, 在 FPDF 的中文支援中, 並不支援 UTF-8 編碼, 所以每次要產生 pdf 檔案時, 都要用 iconv 轉成 BIG5 或 GB 來使用. 如果同一段文字有簡體也有繁體時, 這個轉換就會有問題 (不過還好我們之前的案子, 還沒碰到這個問題, 系統把兩種編碼分開來用, 並沒有衝突的情形發生). 後來, 有人改了一個 unicode 版本的 FPDF, 雖然有支援 UTF-8 了, 但是... 作法是把字型檔也整個編入 pdf 檔案中, 結果.... 是可以使用沒錯, 但是... 原本幾 KB 的 pdf 檔案, 變成幾 MB, 根本沒有實用性.今天, 閒閒在網路上逛, 不小心看到有人弄出了一個 unicode 的中文支援, 趕快把 chinese-unicode.zip (放了一份在我這兒) 抓下來使用, 果然可以正確的產生簡繁共存的 UTF-8 編碼的 PDF 檔案, 檔案也是小小的一個. 雖然其他的語言的 UTF-8 的字不能用, 不過... 至少中文是沒有問題的.

dfebfe889f6041edc977c3bb0ead7b6b.png

1e9c525b03fc883a5ab6cacabb57857b.gif

5ba72b247f90b7d477c7d9b87e95e688.gif

2828bc43c0d922ba7924539b98d2d7f9.gif

f729e24e73785d11f0a8b222972c16d6.gif

9af77d5ce995a4bdd97df8aad44e2787.gif

[1]

Re:FPDF UTF-8 簡繁中文支援 [回覆]

那英文跟數字ok 嗎?

作者

micmic3

|25/010/2007, 13:47

9af77d5ce995a4bdd97df8aad44e2787.gif

[2]

Re:FPDF UTF-8 簡繁中文支援 [回覆]

英文與數字是正常的.

作者

tommy

|25/010/2007, 13:50

9af77d5ce995a4bdd97df8aad44e2787.gif

[3]

Re:FPDF UTF-8 簡繁中文支援 [回覆]

可以請教一下如何使用chinese-unicode.zip嗎?

是不是將原本的

require('chinese.php');

改成

require('chinese-unicode.php')

就可以正常的顯示繁簡字???(假如位置是正確的話)

有包含繁簡的測試檔可以給我嗎???

作者

夜櫻

|30/006/2008, 13:55

9af77d5ce995a4bdd97df8aad44e2787.gif

[4]

Re:FPDF UTF-8 簡繁中文支援 [回覆]

你有下載那個 zip 檔案? 裡頭有個 test-unicode.php 就是範例啊.

作者

tommy

|30/006/2008, 14:08

9af77d5ce995a4bdd97df8aad44e2787.gif

[5]

Re:FPDF UTF-8 簡繁中文支援 [回覆]

請問,為啥我run test的檔案,結果會出現這個訊息??

我的是PHP5的版本啊!

Call to undefined function: mb_internal_encoding()

作者

jc

|11/011/2008, 17:44

9af77d5ce995a4bdd97df8aad44e2787.gif

[6]

Re:FPDF UTF-8 簡繁中文支援 [回覆]

你的 php 沒有 mbstring 模組, 裝上就應該可以用了.

作者

tommy

|11/011/2008, 17:46

9af77d5ce995a4bdd97df8aad44e2787.gif

[7]

Re:FPDF UTF-8 簡繁中文支援 [回覆]

還有這個訊息...

Call to undefined function mb_convert_encoding()

我的本機好像只能使用iconv這個功能,而mb_convert的功能都不能用,

請問各位大大為啥??

作者

jc

|11/011/2008, 17:47

9af77d5ce995a4bdd97df8aad44e2787.gif

[8]

Re:FPDF UTF-8 簡繁中文支援 [回覆]

使用没有错误,但是当输入的是非英语和中文,请问怎样处理才不会在pdf中乱码?

比如西班牙语中的: ñ á é ú 之类的.

有劳各位大侠!

作者

Wit

|11/012/2008, 17:32

9af77d5ce995a4bdd97df8aad44e2787.gif

[9]

Re:FPDF UTF-8 簡繁中文支援 [回覆]

說真的, 我也不知道這種同時存在多國文字的 pdf 檔要怎麼處理.

我沒仔細去研究過, 不過以前看相關 pdf generator 的程式, 好像對每一種語系的字型都是另外去指定. 所以這類的內容, 也許要自行去判斷該字是屬於那一個語系, 再去指定字型. 這樣處理會很複雜.

或許要等 Adobe 出一個萬用的字型檔, 把所有的字都納入後才能簡單處理吧.

作者

tommy

|09/001/2009, 11:21

9af77d5ce995a4bdd97df8aad44e2787.gif

[10]

Re:FPDF UTF-8 簡繁中文支援 [回覆]

當我用了這個"chinese-unicode.php"後,冇錯,是能gen中文的pdf,但原本的英文字字距變得很大,font style 也變了,跟本不能使用.請問大大有解決方法嗎? 最起碼可變繳字距.

作者

Hardy

|19/001/2009, 14:15

9af77d5ce995a4bdd97df8aad44e2787.gif

[11]

Re:FPDF UTF-8 簡繁中文支援 [回覆]

請教一下, 有人在使用 chinese-unicode時, 使用 aliasnbpages()及{nb}來產生總頁數時, 可否正常? 我發現好多人都有這個問題(印的都是 1/{nb} ,不是總頁數), 同樣的程式使用FPDF class很正常但使用PDF_Unicode時卻怎麼都不行, 但在chinese-unicode.php及chinese.php都沒動到 aliasnbpages.

這是怎麼回事?

作者

Kevintay

|13/003/2009, 23:31

9af77d5ce995a4bdd97df8aad44e2787.gif

[12]

Re:FPDF UTF-8 簡繁中文支援 [回覆]

哈哈 我也碰到 11 樓問題了

我去 fpdf 把 aliasnbpage 的變數改了又改還是沒用

它就是直接把字印出來(轉成字串?)

等待有人可以解決這個問題= = ....

作者

dsps

|23/004/2009, 19:36

9af77d5ce995a4bdd97df8aad44e2787.gif

[13]

Re:FPDF UTF-8 簡繁中文支援 [回覆]

因為在 UniCell() 裡頭就把字串的內容轉換了, 所以最後面處理 {nb} 時, 已經不是字串了.

作者

tommy

|24/004/2009, 15:41

9af77d5ce995a4bdd97df8aad44e2787.gif

[14]

Re:FPDF UTF-8 簡繁中文支援 [回覆]

那請問該怎麼改

是在 fuction 裡加個例外嗎

寫 ... if 字串 ="{nb}" 就跳出 @@?

不知道該怎麼寫 ...

作者

dsps

|24/004/2009, 16:09

9af77d5ce995a4bdd97df8aad44e2787.gif

[15]

Re:FPDF UTF-8 簡繁中文支援 [回覆]

我利用外加 function 的方式來處理這個問題. 可以參考 http://blog.teatime.com.tw/1/post/324 的內容.

作者

tommy

|24/004/2009, 16:48

9af77d5ce995a4bdd97df8aad44e2787.gif

[16]

Re:FPDF UTF-8 簡繁中文支援 [回覆]

間距的問題, 我記得有人說過用簡體的字型就比較正常.

參考一下, 不過我沒試過.

http://twpug.net/modules/newbb/viewtopic.php?forum=14&post_id=11346&topic_id=3026

作者

tommy

|24/004/2009, 17:10

9af77d5ce995a4bdd97df8aad44e2787.gif

[17]

Re:FPDF UTF-8 簡繁中文支援 [回覆]

原來 tommy 大已經寫了解決的內容 沒爬到

感謝

不過我試的結果是可以用

不過如果是當文件只有一頁時,就還是印出 {nb}

如果是多頁(譬如三頁好了)

一二頁沒問題 最後一頁就印不出來還是變{nb}

我再研究看看 再次感謝

作者

dsps

|29/004/2009, 18:00

9af77d5ce995a4bdd97df8aad44e2787.gif

[18]

Re:FPDF UTF-8 簡繁中文支援 [回覆]

補上文件開頭

require('../fpdf/chinese-unicode.php');

class PDF extends PDF_Unicode

{

//Page header

//Page footer

function Footer()

{

//Position at 1.5 cm from bottom

$this->SetY(-15);

//Arial italic 8

$this->SetFont('Arial','I',8);

//Page number

$this->Cell(0,10,'Page '.$this->PageNo().' / Page {nb}',0,0,'C');

}

}

$pdf=new PDF();

$pdf->FPDF($orientation = 'P');

$pdf->Open();

$pdf->AliasNbPages();

$pdf->AddUniCNShwFont('uni');

$pdf->SetFont('uni','',14);

印印印印印印印印印印印印印印印印印印印印印印印印印印印印印印印印印印印印印印印印印印印印印印印印印印印印印印印印

$pdf->Uni_putpages();

$pdf->Output();

作者

dsps

|29/004/2009, 18:05

9af77d5ce995a4bdd97df8aad44e2787.gif

[19]

Re:FPDF UTF-8 簡繁中文支援 [回覆]

你可以自己加一些 log 在 Uni_putpages() 裡頭, 把每一頁產生的碼在 str_replace() 前後有什麼差別. 也許是因為那行太長, 在處理時會被自動換行, 造成該字串被拆在不同行處理, 所以就沒有處理到.

作者

tommy

|30/004/2009, 13:29

9af77d5ce995a4bdd97df8aad44e2787.gif

[20]

Re:FPDF UTF-8 簡繁中文支援 [回覆]

我已經把fpdf.php, chinese-unicode.php copy 好,

並調用了上文的

require('../fpdf/chinese-unicode.php');

class PDF extends PDF_Unicode

結果卻出現錯誤:

Fatal error: Class 'PDF_Unicode' not found in C:\Program Files\EasyPHP 3.0\www\chinese-unicode\mysql_report.php on line 8.

究竟該如何解決?各位大俠!

作者

Danny

|28/008/2009, 16:15

9af77d5ce995a4bdd97df8aad44e2787.gif

[21]

Re:FPDF UTF-8 簡繁中文支援 [回覆]

我試過成功但如果同時出繁體及簡體... 就會出現亂碼... 怎麼辦??

作者

Vincent Cheung

|16/012/2009, 18:29

9af77d5ce995a4bdd97df8aad44e2787.gif

[22]

Re:FPDF UTF-8 簡繁中文支援 [回覆]

20F的大大

那是因為unicode那隻用的是

作者

J

|21/004/2010, 16:55

9af77d5ce995a4bdd97df8aad44e2787.gif

[23]

Re:FPDF UTF-8 簡繁中文支援 [回覆]

大大,

剛剛試了一下, 以下是心得

原本PDF_Unicode(Constructor) 是不能設定紙張大小的, 建議改為以下

function PDF_Unicode ($ori='P', $unit='mm', $size, $charset = 'UTF-8')

{

$this->FPDF ($ori, $unit, $size);

$this->charset = strtoupper(str_replace ('-', '', $charset));

$this->isUnicode = in_array ($this->charset, array ('UTF8', 'UTF16', 'UCS2'));

}

作者

機神.波拉利思

|13/005/2010, 04:47

9af77d5ce995a4bdd97df8aad44e2787.gif

[24]

Re:FPDF UTF-8 簡繁中文支援 [回覆]

最後一頁沒有替換的原因是 Call Uni_putpages() 時,最後一頁尚未有 Footer。最後一頁呼叫 Footer 是在 Close() 的時候,所以你怎麼換也換不到。

我的方法是把 fpdf.php 中 Close() 呼叫 Footer() 的地方去掉,

然後寫一個自己的函數自己呼叫 Footer ,然後再如同前面的人的作法。

function Myout()

{

$this->InFooter=true;

$this->Footer();

$this->InFooter=false;

$this->Uni_putpages();

$this->Output();

$this;

}

作者

被騎上班的老鼠

|03/008/2010, 17:47

9af77d5ce995a4bdd97df8aad44e2787.gif

[25]

Re:FPDF UTF-8 簡繁中文支援 [回覆]

写的不错,如果能涉及PDF文档如何添加标题和作者等信息就更好了。

作者

tata

|10/008/2011, 14:04

9af77d5ce995a4bdd97df8aad44e2787.gif

[26]

Re:FPDF UTF-8 簡繁中文支援 [回覆]

不用寫呼叫, 只需在fpdf.php的 Close() 內加入$this->Uni_putpages();即可

function Close()

{

//Terminate document

if($this->state==3)

return;

if($this->page==0)

$this->AddPage();

//Page footer

$this->InFooter=true;

$this->Footer();

$this->InFooter=false;

//Total Pages

$this->Uni_putpages();

//Close page

$this->_endpage();

//Close document

$this->_enddoc();

}

作者

Vincent

|16/009/2015, 22:00

9af77d5ce995a4bdd97df8aad44e2787.gif

[27]

Re:FPDF UTF-8 簡繁中文支援 [回覆]

為什麼我會一直跑出'PDF_Unicode' not found的問題,誰能救救我

作者

需求助的苦逼人士

|15/004/2016, 21:49

9af77d5ce995a4bdd97df8aad44e2787.gif

[28]

Re:FPDF UTF-8 簡繁中文支援 [回覆]

通常 PDF_Unicode not found 是表示你的程式沒有正確的 include 到 chinese-unicode.php 這個檔案. (改用 require 試看看, 如果沒載入會有錯誤)

作者

tommy

|19/004/2016, 15:22

9af77d5ce995a4bdd97df8aad44e2787.gif

[29]

Re:FPDF UTF-8 簡繁中文支援 [回覆]

我用requrie還是一樣顯示PDF_Unicode not found耶,請問還怎麼解決?

作者

ian

|14/010/2016, 14:30

9af77d5ce995a4bdd97df8aad44e2787.gif

[30]

Re:FPDF UTF-8 簡繁中文支援 [回覆]

解決: 顯示PDF_Unicode not found

看看是否為chinese-unicode.php

開頭

"php"沒輸入的問題

作者

Annie

|11/009/2019, 14:15

迴響

暱稱:

標題:

個人網頁:

電子郵件:

迴響

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值