免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 19284 | 回复: 5
打印 上一主题 下一主题

PHP下的HTML转PDF以及日文的处理(中文同理) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-12-21 15:19 |只看该作者 |倒序浏览
PHP下的HTML转PDF以及日文的处理(中文同理)

$Id$
整理:张杰
http://newbdez33.blogspot.com/

最近在做一个XML动态生成表单的功能,是一个半工作流系统的一部分,客户对表单提出了一个需求就是要最终将表单生成PDF打印,需要用PHP生成表单PDF.生成PDF没问题,用FPDF很方便,而且支持中文、日文(在官方网站下载一个包即可)。
但由于要生成的表单内容太复杂,而且是各种各样的元素,不好处理,所以就想到了直接由表单HTML向PDF转换,这类的工具也很多,比如dompdf、html2fpdf等等,都很好用,就是都不支持中文和日文。。找了半天资料,终于在一个日文网站上发现了了与html2fpdf相关的内容。我不会日文,但这篇文章竟然能看懂,我太有才了,哈哈,所以就不多说费话了。

准备工作:

HTML2PDF
http://sourceforge.net/projects/html2fpdf

FPDF_japanese
http://www.fpdf.org/download/japanese.zip

html2fpdf解压缩。japanese.zip解压缩,解出来的两个文件放html2fpdf目录下。

对html2fpdf.php进行修改:
==============================

找到第62行,进行如下修改:


  1.     require_once(RELATIVE_PATH.'fpdf.php');
复制代码

    ↓

  1.     require_once('japanese.php');
复制代码


找到第65行,进行如下修改:

  1.     class HTML2FPDF extends FPDF
复制代码

    ↓

  1.     class HTML2FPDF extends PDF_Japanese
复制代码


157行:

  1.     $this->SetFont('Arial','',11); // Changeable?(not yet...)

  2.     $this->lineheight = 5; // Related to FontSizePt == 11
复制代码

    ↓

  1.     $this->SetFont('Arial','',11); // Changeable?(not yet...)

  2.     $this->SetMargins(25,15,20); // 追加

  3.     $this->SetTextColor(0,0,139); // 追加

  4.     $this->lineheight = 5; // Related to FontSizePt == 11
复制代码


352行附近:

  1.     foreach($a as $i => $e)

  2.     {

  3.     if($i%2==0)
复制代码

    ↓

  1.     foreach($a as $i => $e)

  2.     {

  3.     $this->SetFont('SJIS','',11); // 追加

  4.     $this->SetTextColor(0,0,139); // 追加

  5.     $e = mb_convert_encoding($e,'SHIFT-JIS','UTF-8'); // 追加

  6.     if($i%2==0)
复制代码


369行:

  1.     $e = str_replace(chr(160),chr(32),$e); //unify ascii code of spaces (in order to recognize all of them correctly)
复制代码

    ↓

  1.     // $e = str_replace(chr(160),chr(32),$e); //unify ascii code of spaces (in order to recognize all of them correctly)
复制代码


从159行之后的所有的(注意是所有的,全部替换):

  1.     $this->SetFont('Arial');
复制代码

    变成↓

  1.     $this->SetFont('SJIS');
复制代码


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

给个范例:

  1. <?php
  2. define('FPDF_FONTPATH','font/');
  3. require_once('html2fpdf/html2fpdf.php');
  4. ob_start();
  5. ?>
  6. <HTML>

  7. <HEAD><TITLE>テスト</TITLE></HEAD>
  8. <BODY>

  9.     ここにコンテンツ

  10. </BODY>
  11. </HTML>

  12. <?php
  13. $html=ob_get_contents();
  14. ob_end_clean();

  15. // PDFの書式設定
  16. $pdf = new HTML2FPDF("l","mm","A4");
  17. $pdf->Open();

  18. $pdf->SetCompression(false);
  19. $pdf->SetDisplayMode("real");
  20. $pdf->UseCSS();
  21. $pdf->UsePRE();
  22. $pdf->setBasePath( "http://192.168.0.2/pdf/example01.php" );
  23. $pdf->AddSJISFont();
  24. $pdf->AddPage();

  25. //ファイル情報
  26. $pdf->SetAuthor("Kazuhiko HiroseKazuhiko HiroseKazuhiko HiroseKazuhiko HiroseKazuhiko HiroseKazuhiko HiroseKazuhiko HiroseKazuhiko Hirose");
  27. $pdf->Bookmark( "BookmarkBookmarkBookmarkBookmarkBookmarkBookmarkBookmarkBookmarkBookmarkBookmarkBookmark" );
  28. $pdf->SetTitle("SetTitleSetTitleSetTitleSetTitleSetTitleSetTitleSetTitleSetTitleSetTitleSetTitleSetTitleSetTitle");
  29. $pdf->SetCreator( "SetCreatorSetCreatorSetCreatorSetCreatorSetCreatorSetCreatorSetCreatorSetCreatorSetCreatorSetCreator" );

  30. // 本文
  31. $pdf->SetMargins( 10, 10 );
  32. $pdf->DisplayPreferences('HideWindowUI');
  33. //$pdf->SetFont( HideWindowUI,"",8);
  34. $pdf->WriteHTML($html);

  35. // 出力
  36. $pdf->Output('doc.pdf','I');
  37. ?>
复制代码


解决了没?请我吃饭吧,呵呵。

原文链接: http://d.hatena.ne.jp/hir_kaz/20061103/1163139987(HTML2PDF で日本語を使う為の設定)

[ 本帖最后由 z33 于 2009-6-13 18:16 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2007-12-21 15:39 |只看该作者
收着。。说不定以后有用。。

论坛徽章:
0
3 [报告]
发表于 2007-12-21 15:57 |只看该作者
不和日本人挂钩

论坛徽章:
0
4 [报告]
发表于 2007-12-29 21:27 |只看该作者
我曾经用fpdf做过报表,

后来发现有时后报表不出,出现超时错误,其实数据好小,不清楚是什么问题?

最后将所有的报表都去掉,换上pdflib,一切都OK.

现在一直都用pdflib,如果是做报表我觉得还是PDFLIB好!

[ 本帖最后由 xieweihua 于 2007-12-29 21:30 编辑 ]

论坛徽章:
0
5 [报告]
发表于 2008-07-13 19:38 |只看该作者
真的很有才

论坛徽章:
3
未羊
日期:2013-11-18 15:17:06酉鸡
日期:2013-12-06 17:07:16天蝎座
日期:2014-06-11 12:37:07
6 [报告]
发表于 2013-08-28 20:03 |只看该作者
现在还能用不?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP