tcpdf ╰+哭是因爲堅強的太久メ 2022-04-10 06:59 108阅读 0赞 [https://www.cnblogs.com/zx-admin/p/6801978.html][https_www.cnblogs.com_zx-admin_p_6801978.html] tcpdf开发文档(中文翻译版) 2017年5月3日15:06:15 这个是英文翻译版,我看过作者的文档其实不太友善或者不方便阅读,不如wiki方便 后面补充一些,结构性文档翻译 这是一部官方网站文档,剩余大部分都是开发的时候和网络总结来的 项目官网:[https://tcpdf.org/][https_tcpdf.org] github:[https://github.com/tecnickcom/TCPDF][https_github.com_tecnickcom_TCPDF] 都没比较完整的api文档,所以最后的demo需要总去总结,好吧 (发现所有例子全部翻译消耗时间过于长,只把其中不同的部分分离出来,也方便读者使用) 2018年1月24日09:27:20 发现一个比较大的问题,不算bug,但是是一个比较蛋疼的 问题,当你需要直接将word或者excel的东西,直接获取出来,贴到编辑器,在拿出来,替换内容标签做pdf的时候, tcpdf需要的是必须闭合的标签,要可以100%转换成xml,不然就报错 Undefined index: startcolumn in tcpdf.php (line 19456) 2018年1月29日17:43:18 因为新需要,合同页面变得很复杂,需要支持后端编辑合同模板,又得兼容合同编辑之后,在生成合同 解决办法,找前端直接使用table布局或则div+css,直接把页面写出来在存起来,不然就会报错,虽然麻烦一点,而且也不是那么灵活,但是如果在不随意改变合同模板样式的架构的情况下,还是可以使用的 笔者现在已经尝试了dompdf 但是目前看来这个的中文支持不好,css也好像支持不好, 如果你需要弄复杂页面的合同,请参看 :[http://www.cnblogs.com/zx-admin/p/8352003.html][http_www.cnblogs.com_zx-admin_p_8352003.html] mpdf目前对table布局和div+css布局支持唯一个支持的比较好的插件 新增composer 使用tcpdf composer require tecnickcom/tcpdf //引入tcpdf use TCPDF; 我使用laravel是5.4,但是服务上php是5.6但是laravel 这个组件 doctrine/inflector 1.2.x-dev requires php ^7.0 需要的是7,又不好直接服务器上php7,thinkphp最新版的话就直接上7,5.6版本不会出现类似的问题,好吧,我还是觉得tp好使 如果把laravl的计划任务模块,移植到tp上就爽了,有时间在弄这个 Fonts设置字体 注意:以下信息仅对旧的TCPDF库有效。 新的tc-lib-pdf库使用能够即时转换字体的新的tc-lib-pdf-字体库。 TCPDF支持TrueTypeUnicode(UTF-8 Unicode),OpenTypeUnicode,TrueType,OpenType,Type1,CID-0和Core(标准)字体。 有两种使用新字体的方法:将其嵌入PDF(有或没有子集)。 当未嵌入字体时,将在系统中进行搜索。 优点是PDF文件较轻; 另一方面,如果不可用,则使用替换字体。 因此,最好确保在客户端系统上安装所需的字体。 如果该文件要被大量观众查看,建议嵌入。 TCPDF支持字体子集,以减少大型unicode字体文件的文档大小。 如果您将整个字体嵌入到PDF中,则另一端的人即使没有您的字体也可以进行更改。 如果您对字体进行子集,则PDF的文件大小会更小,但是接收PDF的人需要具有相同的字体才能更改PDF。 有关启用/禁用字体子集的选项,请参见SetFont()和AddFont()方法的源代码文档。 可以不嵌入的字体只是标准的核心字体和CID-0字体。 PDF Core(标准)字体是: courier : Courier courierB : Courier Bold courierBI : Courier Bold Italic courierI : Courier Italic helvetica : Helvetica helveticaB : Helvetica Bold helveticaBI : Helvetica Bold Italic helveticaI : Helvetica Italic symbol : Symbol times : Times New Roman timesB : Times New Roman Bold timesBI : Times New Roman Bold Italic timesI : Times New Roman Italic zapfdingbats : Zapf Dingbats 转换TCPDF的字体 使用addTTFfont()方法,您可以直接从TrueType,OpenType或Type1字体创建一个TCPDF字体。 注意:'fonts’文件夹必须由webserver可写。 实例: $fontname = $pdf->addTTFfont(‘/path-to-font/DejaVuSans.ttf’, ‘TrueTypeUnicode’, “, 32); 检查addTTFfont()的源代码文档以获取更多信息。 设置字体 在配置文件(config / tcpdf\_config.php)上将K\_PATH\_FONTS常量设置为TCPDF字体路径。 在TCPDF类构造函数的第四个参数上,如果使用Unicode字体(true)或旧字体(false),则必须指定。 要在脚本中设置字体,只需调用SetFont()方法即可。 在打印文本或生成的文档无效之前,必须至少调用此方法一次。 该方法可以在创建第一个页面之前调用,字体从页面到页面保留: SetFont(string family\[,string style\[,string size\]\]) family : 字体属性 它可以是字体名称或标准系列之一(不区分大小写): Courier (fixed-width) Helvetica or Arial (synonymous; sans serif) Times (serif) Symbol (symbolic) ZapfDingbats (symbolic) 也可以传递一个空字符串。 在这种情况下,现有的家庭被保留。 style : 字体样式。 可能的值是(不区分大小写): empty string: regular B: bold I: italic U: underline 或任何组合。 默认值为常规值。 size:字体大小分。 默认值为当前大小。 如果文档开头没有指定大小,则取值为12。 fontfile : 字体定义文件。 默认情况下,名称是从家庭和样式构建的,小写没有空格。 subset :如果true只嵌入字体的一个子集(仅存储与所使用字符相关的信息); 如果假嵌入完整字体; 如果’default’使用setFontSubsetting()设置的默认值。 此选项仅对TrueTypeUnicode字体有效。 如果要启用用户更改文档,请将此参数设置为false。 如果您对字体进行分类,那么接收PDF的人将需要使用相同的字体才能更改PDF。 PDF的文件大小也会较小,因为您仅嵌入字体的一部分。 Example: p d f − > S e t F o n t ( ‘ t i m e s ’ , ‘ B I ’ , 20 , “ , ‘ f a l s e ’ ) ; P e r f o r m a n c e s ( 性 能 ) 安 装 和 配 置 P H P 操 作 码 c a c h e r , 如 X C a c h e ; 编 辑 p h p . i n i 文 件 并 增 加 脚 本 可 能 消 耗 的 最 大 内 存 量 ( m e m o r y l i m i t ) ; 编 辑 p h p . i n i 文 件 并 增 加 每 个 脚 本 的 最 大 执 行 时 间 ( m a x e x e c u t i o n t i m e ) ; 编 辑 c o n f i g / t c p d f c o n f i g . p h p 文 件 : 手 动 设 置 pdf->SetFont(‘times’, ‘BI’, 20, “, ‘false’); Performances(性能) 安装和配置PHP操作码cacher,如XCache; 编辑php.ini文件并增加脚本可能消耗的最大内存量(memory\_limit); 编辑php.ini文件并增加每个脚本的最大执行时间(max\_execution\_time); 编辑config / tcpdf\_config.php文件:手动设置 pdf−>SetFont(‘times’,‘BI’,20,“,‘false’);Performances(性能)安装和配置PHP操作码cacher,如XCache;编辑php.ini文件并增加脚本可能消耗的最大内存量(memorylimit);编辑php.ini文件并增加每个脚本的最大执行时间(maxexecutiontime);编辑config/tcpdfconfig.php文件:手动设置 \_SERVER \[‘DOCUMENT\_ROOT’\],K\_PATH\_MAIN和K\_PATH\_URL常量,并删除自动计算部分; 如果您不使用泰语,请编辑config / tcpdf\_config.php文件并将K\_THAI\_TOPCHARS常量设置为false; 如果您不需要扩展字符,请编辑config / tcpdf\_config.php文件,并将默认字体设置为核心字体; 如果不需要UTF-8 Unicode,则将TCPID构造函数上的unicode参数设置为false,将 encoding参数设置为“ISO-8859-1”或其他字符映射。 默认情况下,TCPDF允许字体子集减少嵌入式Unicode TTF字体的大小,这个过程非常慢,需要大量内存,可以使用setFontSubsetting(false)方法关闭; 尽可能使用核心字体而不是嵌入字体; 如果不严格要求,避免使用HTML语法(writeHTML和writeHTMLCell方法) 拆分较小的大块HTML块; 如果不严格要求,避免使用翻译; 更改后重新启动网络服务器。 api使用分析实例 //去掉默认的页头页脚。比如那个横线 $pdf->setPrintHeader(false); $pdf->setPrintFooter(false); //设置一个单元格,可以按比例缩放单元格大小 $pdf->Cell(0, 0, ‘TEST CELL STRETCH: no stretch’, 1, 1, ‘C’, 0, ‘’, 0); 复制代码 //设置一个单元格,可以按比例缩放单元格大小 $pdf->Cell(0, 0, ‘TEST CELL STRETCH: no stretch’, 1, 1, ‘C’, 0, ‘’, 0); // 设置背景填充色 $pdf->SetFillColor(220, 255, 220); /\* \*此方法允许以换行符打印文本。 \*它们可以是自动的(一旦文本到达单元格的右边界)或显式(通过\\ n字符)。 输出所需的多个单元格,一个低于另一个。 \*文本可以对齐,居中或对齐。 单元格块可以框架并绘制背景 \*/ //设置一个text文本块 p d f − > M u l t i C e l l ( 55 , 5 , ′ \[ L E F T \] ′ . pdf->MultiCell(55, 5, &\#x27;\[LEFT\] &\#x27;. pdf−>MultiCell(55,5,′\[LEFT\]′.txt, 1, ‘L’, 1, 0, ‘’, ‘’, true); 复制代码 个人demo实例 注意pdf不是完全支持html标签,所以如果你的写入pdf的是html内容请使用txt或者qq对话框,过滤掉多数的html, 不然写入pdf就会异常,但是是openXML就不会有这个问题,写入word就没任何问题 复制代码 $pdf = new TCPDF(PDF\_PAGE\_ORIENTATION, PDF\_UNIT, PDF\_PAGE\_FORMAT, true, ‘UTF-8’, false); $pdf->setPrintHeader(false); //页面头部横线取消 $pdf->setPrintFooter(false); //页面底部更显取消 $pdf->SetAutoPageBreak(TRUE, PDF\_MARGIN\_BOTTOM);//自动分页 $pdf->SetMargins(PDF\_MARGIN\_LEFT, PDF\_MARGIN\_TOP, PDF\_MARGIN\_RIGHT);//设置页面margin $pdf->SetFont(‘stsongstdlight’, ‘’, 12);//设置字体,注意在循环里面一定要把new都一起放在循环里面,不然会报错,没有设置字体,因为这个需要上下文来读取配置 $pdf->AddPage();//增加一个页面 $pdf->setCellPaddings(0, 0, 0, 0);//设置一个单元格的padding //追加用户亲笔签名到文件底部 $identify = $v\[‘identify’\]; c o n t r a c t = M ( " c o n t r a c t " ) − > w h e r e ( a r r a y ( " i d e n t i f y " = > " contract = M("contract")->where(array("identify" => " contract=M("contract")−>where(array("identify"=>"identify"))->find(); $file = M(“file”)->where(array(“file\_id” => $contract\[‘contract\_sign\_pic\_file\_id’\]))->find(); s i g n p i c u r l = a p p s t a n d a r d p a t h n e w ( sign\_pic\_url = app\_standard\_path\_new( signpicurl=appstandardpathnew(file\[‘file\_path’\]); //tcpdf支持远程图片,所以不用麻烦 $pdf->writeHTML($contract_content, $ln = true, $fill = false, $reseth = false, $cell = false, $align = '1');//这个如果里面有远程图片,不能直接获取,需要在代码本地才行,把 $pdf->writeHTML('<b>用户签名</b><br>', $ln = true, $fill = false, $reseth = false, $cell = false, $align = '1'); $pdf->Image($sign_pic_url, '', '', '40%', '40%', '', '', 'T', false, 300, '', false, false, 1, false, false, false); //这个可以获得远程图片地址,但是注意它一定是可以在公网可以访问或者授权的 //如果怕图片太大也是可以安比例缩小,放大的 // i 输出到浏览器,D下来php://output S保存 contractdata=pdf->Output($file\_name, ‘S’); file\_put\_contents(tmpname,contract\_data);//所以写入你想写入的地方的文件 复制代码 新增实例,吧图片章浮动到文字上面demo 2018年1月17日11:34:27 例子的官方地址 [https://tcpdf.org/examples/][https_tcpdf.org_examples] Example 001 : first example with default Header and Footer 第一个例子设置默认页眉和页脚的 复制代码 <?php // Include the main TCPDF library (search for installation path). require\_once('./tcpdf/tcpdf.php'); // create new PDF document $pdf = new TCPDF(PDF\_PAGE\_ORIENTATION, PDF\_UNIT, PDF\_PAGE\_FORMAT, true, 'UTF-8', false); // set document information $pdf->SetCreator(PDF\_CREATOR); //设置创建者 $pdf->SetAuthor('Nicola Asuni'); //设置作者 $pdf->SetTitle('TCPDF Example 001'); //设置文件的title $pdf->SetSubject('TCPDF Tutorial'); //设置主题 $pdf->SetKeywords('TCPDF, PDF, example, test, guide'); //设置关键词 // set default header data $pdf->SetHeaderData(PDF\_HEADER\_LOGO, PDF\_HEADER\_LOGO\_WIDTH, PDF\_HEADER\_TITLE . ' 001', PDF\_HEADER\_STRING, array(0, 64, 255), array(0, 64, 128)); //设置头部,比如header\_logo,header\_title,header\_string及其属性 $pdf->setFooterData(array(0, 64, 0), array(0, 64, 128)); // set header and footer fonts $pdf->setHeaderFont(Array(PDF\_FONT\_NAME\_MAIN, '', PDF\_FONT\_SIZE\_MAIN)); //设置页头字体 $pdf->setFooterFont(Array(PDF\_FONT\_NAME\_DATA, '', PDF\_FONT\_SIZE\_DATA)); //设置页尾字体 // set default monospaced font $pdf->SetDefaultMonospacedFont(PDF\_FONT\_MONOSPACED); //设置默认等宽字体 // set margins $pdf->SetMargins(PDF\_MARGIN\_LEFT, PDF\_MARGIN\_TOP, PDF\_MARGIN\_RIGHT); //设置margins 参考css的margins $pdf->SetHeaderMargin(PDF\_MARGIN\_HEADER); //设置页头margins $pdf->SetFooterMargin(PDF\_MARGIN\_FOOTER); //设置页脚margins // set auto page breaks $pdf->SetAutoPageBreak(TRUE, PDF\_MARGIN\_BOTTOM); //设置自动分页 // set image scale factor $pdf->setImageScale(PDF\_IMAGE\_SCALE\_RATIO); //设置调整图像自适应比例 // set some language-dependent strings (optional) 设置一些与语言相关的字符串 if (@file\_exists(dirname(\_\_FILE\_\_) . '/lang/eng.php')) \{ require\_once(dirname(\_\_FILE\_\_) . '/lang/eng.php'); $pdf->setLanguageArray($l); \} // --------------------------------------------------------- // set default font subsetting mode $pdf->setFontSubsetting(true); //设置默认字体子集模式 // Set font // dejavusans is a UTF-8 Unicode font, if you only need to // print standard ASCII chars, you can use core fonts like // helvetica or times to reduce file size. $pdf->SetFont('dejavusans', '', 14, '', true); //设置字体 // Add a page // This method has several options, check the source code documentation for more information. $pdf->AddPage(); //增加一个页面 // set text shadow effect 设置文字阴影效果 $pdf->setTextShadow(array('enabled' => true, 'depth\_w' => 0.2, 'depth\_h' => 0.2, 'color' => array(196, 196, 196), 'opacity' => 1, 'blend\_mode' => 'Normal')); // Set some content to print $html = << [https_www.cnblogs.com_zx-admin_p_6801978.html]: https://www.cnblogs.com/zx-admin/p/6801978.html [https_tcpdf.org]: https://tcpdf.org/ [https_github.com_tecnickcom_TCPDF]: https://github.com/tecnickcom/TCPDF [http_www.cnblogs.com_zx-admin_p_8352003.html]: http://www.cnblogs.com/zx-admin/p/8352003.html [https_tcpdf.org_examples]: https://tcpdf.org/examples/
相关 解决PHP使用TCPDF生成pdf文件时无法保存中文文件名的方法 PHP使用TCPDF生成PDF文件时,如果文件名含有中文会被直接过滤掉,解决方法:修改tcpdf.php。 1. 找到output函数,注释以下代码(在7560行左右): 深碍√TFBOYSˉ_/ 2022年11月27日 08:52/ 0 赞/ 136 阅读
相关 tcpdf [https://www.cnblogs.com/zx-admin/p/6801978.html][https_www.cnblogs.com_zx-admin_p_68019 ╰+哭是因爲堅強的太久メ/ 2022年04月10日 06:59/ 0 赞/ 109 阅读
相关 laravel TCPDF PDF生成 / private 私有方法 生成带二维码的PDF @string $public_code 用于生成二维码 阳光穿透心脏的1/2处/ 2022年04月01日 20:47/ 0 赞/ 405 阅读
还没有评论,来说两句吧...