使用TCPDF插件生成pdf以及pdf的中文处理

做了这么多年项目,以前只是在别人的项目中了解过php生成pdf文件,知道并不难,但是涉及到了pdf开发库,首先介绍pdf库。

多种多样的pdf开发库


1.WKHTMLTOPDF

wkhtmltopdf是一个很好的解决方案,基本上可以原样输出html页面中的内容,包括:图片/代码高亮部分css/页头/页尾等。有php和命令行方式,大概思路如下:
1) 先获取所有的远程html,然后生成wkhtmltopdf的shell脚本
2) 在php中执行此shell脚本文件批量生成pdf(当然是采用定时任务)
3) 前端页面中检查当前页面是否存在此pdf,如果存在则显示下载链接

<?php
$domain = "http://wiki.eoe.cn";
$htmlUrl = $domain . "/show/html/slug/$slug";
$_binpath = '/usr/local/bin/';
$_binname = 'wkhtmltopdf';
$savePath = "/User/Xia/eoecn/pdf/";
if (!is_dir($savePath)) {//需要自己编写mkdirs函数@mkdirs($savePath);
}
//由于生成中文目录会乱码,这里过滤掉
if (preg_match("/[x7f-xff]/", $slug)) {$filename = "wiki-slug-$id";
}else {$filename = $slug;
}
$saveFile = $savePath . $filename . '.pdf';
//判断是否已经存在
if (file_exists($saveFile)) {die($saveFile);
}
$header = $domain . "/pdf/header";
$command = $_binpath . $_binname. ' -T 15mm --header-spacing 5 --header-html ' . $header. ' --footer-right "[page]/[toPage]"  ' . $htmlUrl . ' '. $saveFile;
if ($exec) {exec($command, $output, $var);
}
?>
代码托管在:https://code.google.com/p/wkhtmltopdf/

在linux和mac os等其它平台安装文档:http://www.tecmint.com/install-wkhtmltopdf-html-page-to-pdf-converter-in-rhel-centos-fedora/

要想完好支持html中的url和其它,参考:http://www.cnblogs.com/timelyxyz/archive/2012/12/24/2831523.html

说明文档: http://madalgo.au.dk/~jakobt/wkhtmltoxdoc/wkhtmltopdf-0.9.9-doc.html

wkhtmltopdf安装包

php使用方法: http://mikehaertl.github.com/phpwkhtmltopdf/

例子:
<?php
require_once('WkHtmlToPdf.php');$pdf = new WkHtmlToPdf;// Add a HTML file, a HTML string or a page from a URL
$pdf->addPage('/home/eoe/page.html');
$pdf->addPage('<html>....</html>');
$pdf->addPage('http://google.com');// Add a cover (same sources as above are possible)
$pdf->addCover('mycover.pdf');// Add a Table of contents
$pdf->addToc();// Save the PDF
$pdf->saveAs('/tmp/new.pdf');// ... or send to client for inline display
$pdf->send();// ... or send to client as file download
$pdf->send('test.pdf');

2.FPDF

FPDF是一个纯粹的通过PHP类来生成PDF文档的方法,需要生成的内容直接在PHP代码中来指定,生成文字,图片,线条等等,都有自己的方法。不足的是utf8和中文支持很差,分别需要调用chinese-unicode.php和chinese.php等扩展文件,附上一个简单的例子:

<?php
require('chinese-unicode.php'); $pdf=new PDF_Unicode(); $pdf->Open(); 
$pdf->AddPage(); $pdf->AddUniCNShwFont('uni'); 
$pdf->SetFont('uni','',20); $pdf->Write(10, "eoe移动开发者社区");
$pdf->Ln();
$pdf->MultiCell (120, 10, "开发者社区");
$pdf->Cell (240, 10, "本文是用utf8编码格式");
$pdf->Ln();$pdf->Output();?>

3.TCPDF

TCPDF是一个用于快速生成PDF文件的PHP5函数包。TCPDF基于FPDF进行扩展和改进。支持UTF-8,Unicode,HTML和 XHTML。但是文件很多很大,配置起来比较复杂。相对而言对复杂的css渲染效果不好,而且不能支持html中太多的css文件,用php转换效率很慢。
不过官方的文档很多,例子也很多,也能够生成很漂亮的pdf文件。官方网址为:http://www.tcpdf.org/

本人使用的就是这个工具包,所以着重给大家介绍一下,个人认为TCPDF还是很好用的,足以满足大多数pdf应用,官方提供了丰富的文档以及例子,各种特性都提供了详细的例子,上手极快。

以下为TCPDF目录结构:



本人使用的是CI框架,在将这个库集成进来的时候,对这个包做了一些改动。

1.所有的基础配置信息都在tcpdf根目录“examples/include/tcpdf_config_alt.php”中,我们为了简化配置,也使用了它原生的配置文件,以简化在开发过程中的配置,将该文件的内容拷贝至CI框架application/conf/pdf_config.php中,找到“K_PATH_IMAGES”配置项,将其值修改为你项目中图片所在的位置,到时候在省城pdf时,所用到的图片资源,将从这里查找。

“PDF_HEADER_LOGO”用于配置pdf中header中logo图片,如需要的话设置成你自己的

还有其他一些常用的配置,如配置Top margin、Bottom margin、Left margin、Default main font name

中文问题

使用tcpdf时中文问题是比较常见,在新版的tcpdf中,已经支持中文了,在fonts目录下有个cid0cs.php和stsonstdlight.php文件,只要直接使用即可

$pdf->SetFont('cid0cs', '', 10);
$pdf->SetFont('stsongstdlight','', 10);

但是经过本人的实践,使用这两种字体,的确是支持中文,但是英文的显示并不是太好,这种方式生成的PDF文件的优点是:文件体积小,生成快速。但也有缺点是,没有嵌入中文字体,只限于安装了Adobe Reader之后才能正常显示。那万一用户使用的是FoxIt Reader或者是Linux操作系统呢?显示效果就不一样了。因此,为了保证生成的PDF文件在任何环境下都有同样的显示效果,嵌入字体是必需的。
Windows下有很多中文字体,但是我们要用在TCPDF中的中文字体有下面几个要求:
· 支持Unicode,因为TCPDF支持的是Unicode;
· 体积越小越好;
· 最好是也支持繁体中文;
将下载后的DroidSansFallback.ttf字体文件复制到tcpdf目录下的fonts目录,并保证web服务器对该目录有读写的权限,否则在生成tcpdf字体是会出错。
DroidSansFallback.ttf下载地址

在你的代码中添加如下代码:

$fontname = $this->tcpdf->addTTFfont('dist/font/Droid_Sans_Fallback.ttf', 'TrueTypeUnicode', '', 32);
$this->tcpdf->SetFont($fontname, '', 10);  

这句代码将你下载的ttf字体自动转化为tcpdf使用的字体,将在font目录下增加这几个文件“droid_sans_fallback.ctg.z,droid_sans_fallback.php,droid_sans_fallback.z”,生成之后,以后就可以直接使用这种字体了。

以下为完整的代码:

//加载配置文件以及pdf类require_once(APPPATH . 'config/pdf_config.php');$this->load->library('tcpdf/tcpdf');// set document information$this->tcpdf->SetCreator(PDF_CREATOR);$this->tcpdf->SetAuthor('aaron');$this->tcpdf->SetTitle($cur_order['title']);$this->tcpdf->SetSubject('lvpad');$this->tcpdf->SetKeywords('lvpad, china tour, guide');// set default header data$this->tcpdf->SetHeaderData('logo.png', PDF_HEADER_LOGO_WIDTH, 'lvpad order', '');// set header and footer fonts$this->tcpdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN));$this->tcpdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA));// set default monospaced font$this->tcpdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED);// set margins$this->tcpdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT);$this->tcpdf->SetHeaderMargin(PDF_MARGIN_HEADER);$this->tcpdf->SetFooterMargin(PDF_MARGIN_FOOTER);// set auto page breaks$this->tcpdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);// set image scale factor$this->tcpdf->setImageScale(PDF_IMAGE_SCALE_RATIO);//set some language-dependent strings (optional)$l['a_meta_charset'] = 'UTF-8';$l['a_meta_dir'] = 'ltr';$l['a_meta_language'] = 'cn';// TRANSLATIONS --------------------------------------$l['w_page'] = 'page';$this->tcpdf->setLanguageArray($l);// 设置字体,如果要支持中文 则选择支持中文的字体$fontname = $this->tcpdf->addTTFfont('dist/font/Droid_Sans_Fallback.ttf', 'TrueTypeUnicode', '', 32);  $this->tcpdf->SetFont($fontname, '', 10);// add a page$this->tcpdf->AddPage();$this->tcpdf->setJPEGQuality(75);// Image example with resizing$this->tcpdf->Image('images/pdf.jpg', 10, 20, 190, 60, 'JPG', 'http://lvpad.com', '', false, 150, '', false, false, 1, false, false, false);// output the HTML content$this->tcpdf->writeHTML($html_content, true, false, true, false, '');// reset pointer to the last page$this->tcpdf->lastPage();//Close and output PDF document$this->tcpdf->Output($cur_order['title'] . '.pdf', 'I');	

生成的pdf就是这样的:



以上中文问题已经解决,当然,你还可以寻找其他的字体,然后进行尝试。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/52519.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

pdf文件如何进行翻译?pdf文件翻译方法分享。

pdf文件如何进行翻译&#xff1f;在日常的工作和学习当中&#xff0c;很多小伙伴都需要接受到pdf文件&#xff0c;需要我们对pdf文件进行翻译或者处理&#xff0c;那么众所周知dpf文件因为不可编辑性&#xff0c;从而变的特别特别的安全&#xff0c;深受大家的喜爱&#xff0c;…

推荐几种可以直接翻译PDF英文文献的方法

大家在阅读英文文献的时候&#xff0c;可能会经常碰到这样的情况&#xff1a;由于作者使用了各种从句&#xff0c;明明只是一句话&#xff0c;却写成很长的一段&#xff0c;即使其中没有生词&#xff0c;看了几遍也弄不懂它的意思。如果句子里再夹杂了几个看不懂的英文单词&…

英文PDF怎么翻译成中文?两分钟让你学会翻译PDF

现在大部分的文件资料都是以PDF的格式保存的&#xff0c;这是因为PDF格式可以跨设备打开的时候&#xff0c;不会影响到内容的排版格式。在撰写论文的时候&#xff0c;我们常需要查阅各种文献资料&#xff0c;尤其是会参考英文文献。小伙伴们平时遇到不懂的词句&#xff0c;是怎…

pdf翻译器哪个好?这几个pdf翻译软件能支持一键翻译

有没有从事外贸行业的小伙伴经常收到国外客人发送的外文文档呢&#xff1f;通常这些文档除了是外文语言外&#xff0c;还是pdf格式的。外文不熟的朋友&#xff0c;肯定是对文档一窍不通吧。如果我们用一些pdf翻译器来翻译文档的话&#xff0c;我们就不用费心去研究该文档的意思…

推荐几个好用的pdf翻译工具

开始用的是网易有道词典&#xff0c;排版和准确度都不错&#xff0c;效果如下&#xff0c;只是收费 后来在网上找了一下&#xff0c;大部分工具&#xff0c;要不收费要不排版不行&#xff0c;或者只是划词翻译&#xff0c;也没有ocr识别 最后找了两个网站 https://fanyi.atm…

PDF如何翻译成中文?三种方法教你怎样翻译PDF上的文字

小伙伴们在学习或工作中遇到外国文章时是不是会先翻译成中文再阅读呢&#xff1f;如果文章是word或者txt格式&#xff0c;我们可以直接复制文字进行翻译。但是有些文章为了看起来美观可能会生成PDF格式&#xff0c;我们想翻译的话&#xff0c;就需要先把格式转换成word等方便编…

PDF怎么翻译成中文?这些方法值得收藏

小伙伴们平时接触英文PDF文件的机会多吗&#xff1f;虽然可能平时接触的少&#xff0c;可是一旦接触就会很痛苦&#xff0c;因为有的PDF文件里面会充斥着大量深奥的词汇。对于这些深奥的词汇&#xff0c;小伙伴们都是采取什么方法呢&#xff1f;是逐个逐个拿去翻译吗&#xff1…

福昕pdf阅读器的划词翻译功能如何添加(图文并茂)

一、打开福昕阅读器 二、可在上方工具栏&#xff0c;点击“帮助”&#xff0c;关于福昕阅读器领鲜版查看安装的版本信息&#xff0c;如图1-1&#xff0c;图1-2 图1-1 图1-2 三、找到上方工具栏的图标按键&#xff0c;名为“自定义快速访问工具栏”&#xff0c;如图1-3&#…

怎么把PDF翻译成中文?教你便捷翻译方法

怎么把PDF文件的内容给翻译成中文呢&#xff1f;对于PDF文件&#xff0c;大家在日常中经常会使用到&#xff0c;在办公中收到一份英文的PDF文件&#xff0c;或者是我们在网站上下载资料&#xff0c;发现是看不懂的英文&#xff0c;这时候我们怎么将文件内容给翻译成中文呢&…

我进入银行科技部半年,已经丧失跳槽的能力了!

大家好&#xff0c;我是小猿 学弟分享 我是一个杭州双非的本科生&#xff0c;2022届毕业之后进了某银行的科技部工作&#xff0c;年包 20w。 当时想着在银行也算是一份安稳的工作&#xff0c;因此选择了给钱最多的一个&#xff0c;想着自己走上了金融 科技的赛道。 在去之前也…

社交媒体用户行为研究,图神经网络 社交网络

产品经理如何做用户行为分析&#xff1f; 在这个每个互联网人都在谈论数据&#xff0c;每个产品经理都在谈论数据分析的时代&#xff0c;用户行为分析的重要性也越来越凸显出来&#xff0c;那么产品经理如何做用户行为分析呢&#xff1f;接下来将为大家进行分享。 一、为什么…

从伊朗虚假新闻活动案例来看国外造谣及传谣模式

曾经我发过下面这篇文章 里面提到了伊朗如何进行假新闻构造然后进行传播 而实际上&#xff0c;假新闻的传播模式&#xff0c;在国外一成一套流水线&#xff0c;与国内的微博&#xff0c;微信公众号&#xff0c;朋友圈&#xff0c;匿名论坛等方式截然不同。 下面通过一起伊朗针对…

一周信创舆情观察(7.12~7.18)

[福利&#xff1a;\[ 网络安全重磅福利&#xff1a;入门&进阶全套282G学习资源包免费分享 &#xff01;\]](https://mp.weixin.qq.com/s/BWb9OzaB-gVGVpkm161PMw ) 一、一周舆情要点 7月12日&#xff0c;工信部官网发布《网络安全产业高质量发展三年行动计划&#xff08;20…

怎么在新闻媒体上发稿?如何联系权威媒体发稿?

新闻体软文&#xff0c;是指通过新闻报道或新闻评论分析的形式把广告自然的穿插在文章中的软文&#xff0c;即软文与新闻的结合体&#xff0c;将软文与新闻恰到好处的合并在一起。 新闻体软文在形式上的隐蔽性和表达上的悬念性、完整性与可看性&#xff0c;抓住了消费者的心理…

Emotet分析报告

分析样本出处 链接&#xff1a;https://www.malware-traffic-analysis.net/2022/04/20/index.html 样本表现 Emotet&#xff0c;是一种计算机恶意软件程序&#xff0c;最初是作为一种银行木马病毒开发的。其目的是访问外部设备并监视敏感的私有数据。Emotet 会骗过基本的防病…

微信们正在成为“被模仿者”!中国互联网现状及趋势报告

整理 | 郭芮 责编 | 伍杏玲 出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09; “中国已经走上了世界舞台&#xff0c;他们已经成功完成了从模仿者到开拓者角色的转换&#xff0c;且拥有众多具有创新性和竞争力的全球科技公司。”近日在香港 RISE 会议上&#xff0c;…

清华开源图文对话大模型!表情包解读有一手,奇怪的benchmark增加了

丰色 萧箫 发自 凹非寺 量子位 | 公众号 QbitAI 什么&#xff0c;最懂表情包的中文开源大模型出现了&#xff1f;&#xff1f;&#xff01; 就在最近&#xff0c;来自清华的一个叫VisualGLM-6B的大模型在网上传开了来&#xff0c;起因是网友们发现&#xff0c;它连表情包似乎…

元宇宙即将到来

元宇宙是人们娱乐生活及工作的&#xff0c;虚拟时空。核心是数字创造&#xff0c;数字资产&#xff0c;数字交易&#xff0c;数字货币和数字消费&#xff0c;尤其是在用户体验方面&#xff0c;达到了真假难辨&#xff0c;虚实混同的境界。 元宇宙虚拟物品生产到消费的宏观产业…

聊聊这个本不存在的 “元宇宙”

最近看元宇宙的信息已经都传得很魔幻了&#xff0c;就差走向神学、哲学了。一些小伙伴也来问我到底什么是元宇宙。在这个领域待了很多年的圈内人&#xff0c;反而其实没人会聊这个词&#xff0c;也是感慨资本炒作的强大。很多人估计连 VR/AR 都不见得分得清&#xff0c;又被拉入…

让我们一起来看什么是元宇宙

概要 可以把它想象成互联网&#xff0c;或者至少以 3D 形式呈现。扎克伯格将其描述为一个“虚拟环境”&#xff0c;您可以进入其中&#xff0c;而不仅仅是在屏幕上观看。 “元宇宙”这个词是捕捉科技行业想象力的最新流行语&#xff0c;以至于最著名的互联网平台之一正在重塑品…