zoukankan      html  css  js  c++  java
  • PHP操作tcpdf插件生成PDF

    //本文非原创,我只是总结一下,以便使用

    //官网有很多案例,很具有参考性,特别适合初学者了解

    //网址:https://tcpdf.org/

    1. TCPDF布局时常用的方法

    TCPDF::SetAutoPageBreak($auto,$margin = 0 )

    设置底部边距 自动换页

    $auto (boolean) 自动换页的开关

    $margin (float) 下边距,作为自动换页的标准

    TCPDF::SetMargins($left,$top,$right=-1,$keepmargins=false )

    $left (float) 左边距.

    $top (float) 上边距.

    $right (float) 右边距 默认和左边距一样.

    $keepmargins (boolean) if true overwrites the default page margins

    TCPDF::AddPage($orientation='',$format='',$keepmargins=false,$tocpage=false )

    增加一个页面。

    orientation:orientation属性用来设置文档打印格式是''Portrait”还是''Landscape”。Landscape为横式打印,Portrait为纵向打印。

    format:设置此页面的打印格式。

    keepmargins:true,以当前的边幅代替默认边幅来重写页面边幅。

    tocpage:true,所添加的页面将被用来显示内容表。

    TCPDF::SetFillColorArray($color ,$ret=false )

    设置表格的填充颜色

    color:一个表示颜色的数组 比如设置黑色 array(0, 0, 0)

    TCPDF::SetFont($family,$style='',$size=null,$fontfile='',$subset='default',$out=true )

    设置字体、字号等参数

    Family:设置字体类型,如helvetica (Helvetica)黑体,times (Times-Roman)罗马字体。

    Style:设置字体风格,如B粗体,I斜体,underline下划线等。

    Size:设置字体大小。

    TCPDF:: SetLineStyle($style,$ret=false )

    设置线条样式、颜色等

    style:array('width' => 0.2, 'cap' => 'butt', 'join' => 'miter', 'dash' => '0', 'color' => array(0, 0, 0))

    Width:设置线条粗细。

    Cap:设置线条的两端形状。

    Join:设置线条连接的形状。

    Dash:设置虚线模式。

    Color:设置线条颜色,一般设置为黑色,如:array(0, 0, 0)

    TCPDF::SetTextColor($col1=0,$col2=-1,$col3=-1,$col4=-1,$ret=false,$name='' )

    设置文字颜色

    col1 红色值 范围0-255

    col2 绿色值 范围0-255

    col3 蓝色值 范围0-255

    TCPDF::MultiCell($w,$h,$txt,$border=0,$align='J',$fill=false,$ln=1,$x='',$y='',$reseth=true,$stretch=0,$ishtml=false,$autopadding=true,$maxh=0,$valign='T',$fitcell=false )

    设置多行单元格。注意跟Cell的参数位置有些差别,Cell是用来输出单行文本的,MultiCell就能用来输出多行文本。

    W:设置多行单元格的宽。

    H: 设置多行单元格的单行的高。

    Text:文本。

    Border:边框。

    Align:文本位置。

    Fill:填充。

    Ln:0,单元格后的内容插到表格右边或左边,1,单元格的下一行,2,在单元格下面。

    X:设置多行单元格的行坐标。

    Y:设置多行单元格的纵坐标。

    Reseth:true,重新设置最后一行的高度。

    Stretch:调整文本宽度适应单元格的宽度。

    Ishtml:true,可以输出html文本,有时很有用的。

    Autopadding:true,自动调整文本与单元格之间的距离。

    Maxh:设置单元格最大的高度。

    Valign:设置文本在纵坐标中的位置,T,偏上,M,居中,B,偏下。

    fitcell:自动调整文本字体大小来适应单元格大小。

    TCPDF::Image($file,$x='',$y='',$w=0,$h=0,$type='',$link='',$align='',$resize=false,$dpi=300,$palign='',$ismask=false,$imgmask=false,$border=0,$fitbox=false,$hidden=false,$fitonpage=false,$alt=false,$altimgs=array() )

    插入图片

    File:图片路径。

    X:左上角或右上角的横坐标。

    Y:左上角或右上角的纵坐标。

    W:设置图片的宽度,为空或为0,则自动计算。

    H:设置图片的高度,为空或为0,则自动计算。

    Type:图片的格式,支持JPGE,PNG,BMP,GIF等,如果没有值,则从文件的扩展名中自动找到文件的格式。

    Link:图片链接。

    Align:图片位置。

    Resize:true,调整图片的大小来适应宽跟高;false,不调整图片大小;2,强制调整。

    Dpi:以多少点每英寸来调整图片大小。

    Palign:图片位置,L,偏左,C,居中,R,偏右

    Imgmask:true,返回图像对象。

    Border:边框。

    Fitbox:调整适合大小。

    Hidden:true,隐藏图片。

    Fitonpage:如果为true,图像调整为不超过页面尺寸。

    TCPDF::getX()

    getX获得当前的横坐标。

    TCPDF::getY()

    getY获得当前的纵坐标。

    TCPDF::deletePage($page)

    删除整页pdf

    $page:需要删除的页码

    TCPDF::getLastH()

    获得最后一列的高度

    TCPDF::getPage()

    获得当前页页码

    TCPDF::SetX($x,$rtloff=false )

    $x:横坐标值

    TCPDF::SetY($y,$resetx=true,$rtloff=false )

    $y:纵坐标值

    这两个方法是设置输入光标的位置

    TCPDF::Ln($h='',$cell=false )

    设置空行 pdf中起到间隔上下内容的作用

    $h:设置高度

    1. $pdf->Cell(0, 0, 'TEST CELL STRETCH: no stretch', 1, 1, 'C', 0, '', 0);

    //原型:public function Cell($w, $h=0, $txt='', $border=0, $ln=0, $align='',$fill=false,$link='',$stretch=0,$ignore_min_height=false, $calign='T', $valign='M')第一个参数设定长度,为0时不设定;第二个参数设定高,为0时不设定;第三个参数为单元格内的content;第四个参数设定是否有边框,值为0或1,为0时无边框,为1时有边框;第五个参数暂时理解为是否有下一行;第六个参数设定单元格内容的对齐方式,值为R(靠右)、C(居中)或L(靠左);第七个参数理解为是否填充背景色,值为0或非0;第八个参数string设定链接,参数内容为文件路径或Internet地址;第九个参数设定表内内容的字符间距。 


    2. $pdf->setCellPaddings(1, 1, 1, 1);

    //设置表内内容距离边框的距离。分别左、上、右、下。 3. $pdf->setCellMargins(1, 1, 1, 1);//可以理解为设置单元格之间的距离,分别为左、上、右、下。 

    4. $pdf->SetFillColor(255, 255, 127);//设置单元格背景填充颜色。内容为rgb三颜色的值。 

    5. $pdf->MultiCell(55, 60, '[FIT CELL] '.$txt." ", 1, 'J', 1, 1, 125, 145, true, 0, false, true, 60, 'M', true);

    //原型:public function MultiCell($w, $h, $txt, $border=0, $align='J', $fill=false, $ln=1, $x='',$y='',$reseth=true,$stretch=0,$ishtml=false,$autopadding=true, $maxh=0, $valign='T', $fitcell=false),第一个参数设定长度,为0时不设定;第二个参数设定高,为0时不设定;第三个参数设定文本对齐方式,值为[LEFT](左对齐)、[RIGHT](右对齐)、[CENTER](居中)、[JUSTIFY](两端对齐)、[DEFAULT](散列对齐);第三个参数为单元格内的content;第四个参数设定是否有边框,值为0或1,为0时无边框,为1时有边框;第五个参数设定单元格内容的对齐方式,值为R(靠右)、C(居中)、L(靠左)、J(两端对齐),若为空则为默认的右对齐;第六个参数理解为是否填充背景色,值为0或非0;第七个参数理解为下一个单元格的相对位置,有3个取值,分别为0(同一行),1(下一行),2(对角线);第八个参数设定页面左边距;第九个参数设定页面上边距;第九个参数暂时理解不了,默认值为true即$retseth=true;第十个参数理解为设定字符间距;第十一个参数$ishtml=false(默认)/true; 第十二的参数$autopadding=true(默认)/false;第十二个参数设定文本的高度,一般设定为单元格的高度;第十三的参数设置文本的垂直位置,分别为T(top)、M(middle)、B(bottom),第十四个参数$fitcell可以理解为是根据单元格大小调整文本的大小使得文本全部显示在单元格内。 


    6. $pdf->Ln(4);//间隔4mm 

    7. $pdf->writeHTML($html, true, false, true, false, '');

    // 原型为writeHTML($html, $ln=true, $fill=false, $reseth=false, $cell=false, $align='')第一个参数为html格式的字符串;第三个参数设置是否填充背景色,值为false(不填充)或true(填充); 
    8. $pdf->writeHTMLCell(80, '', '', $y, $left_column, 1, 0, 1, true, 'J', true);
    //原型:writeHTMLCell($w, $h, $x, $y, $html='', $border=0, $ln=0, $fill=false, $reseth=true, $align='', $autopadding=true),参数可对照MultiCell(),分别为宽度,高度,x坐标,y坐标,内容,是否右边框,与下一个单元格的相对为位置,是否填充背景色,是否重置高度,文本对齐方式,是否自动

    9.$y= $pdf->GetY();

    获得变量的y坐标,同理GetX()获得x坐标 

    10.$pdf->Write(5, $utf8text, '', 0, '', false, 0, false, false, 0);

    //原型:

    public function Write($h, $txt, $link='', $fill=false, $align='', $ln=false, $stretch=0, $firstline=false, $firstblock=false, $maxh=0, $wadj=0, $margin=''),

    第一个参数为高度,可简单理解为设置文本间距;

    第二个为写入的内容;

    第三个参数为设置链接,为空时无链接;

    第四个参数为是否填充背景色;

    第五个参数为文本对齐方;

    第六个参数为暂时没看到作用;

    第七个参数设置字符间距;

    第八个参数理解为是否只显示第一行;

    第九个参数可理解为是否只显示第一块;

    第十个参数设置最大文本块高度;

    第十一个参数暂时不解;

    第十二参数为单元格边距

     11.$pdf->setJPEGQuality(75);

    //设置图片质量,当值大于100或小于1时,自动更正为75(默认)。

     

    12. $pdf->Rect($x, $y, $w, $h, 'F', array(), array(128,255,255));

    //原型:

    public function Rect($x, $y, $w, $h, $style='', $border_style=array(), $fill_color=array())

    ,画一个方形,参数依次为:x坐标、y坐标、宽度、高度、演示、边框样式和填充背景色,类似的函数还有:

    public function Circle($x0, $y0, $r, $angstr=0, $angend=360, $style='', $line_style=array(), $fill_color=array(), $nc=2) 

     

    13. $pdf->Image('../images/image_demo.jpg', $x, $y, $w, $h, 'JPG', '', '', false, 300, '', false, false, 0, $fitbox, false, false); 

    //原型:

     

    public function Image($file, $x='', $y='', $w=0, $h=0, $type='', $link='', $align='', $resize=false, $dpi=300, $palign='', $ismask=false, $imgmask=false, $border=0, $fitbox=false, $hidden=false, $fitonpage=false, $alt=false, $altimgs=array()),

    第一个参数是图片的来源,

    第二个到第六个参数分别设置图片的x坐标,y坐标,宽度,高度和格式;第七个参数设置链接,

    第八个参数设置图片的相对位置(同一坐标的2张图片),值分别为T(并排)、M(居中对角(第二个图形从第一个图形的半高处开始))、B(对角)、N(重叠)或不设置(重叠);

     

     14.$pdf->Image('@'.$imgdata);

    //'@'字符被用来表明后后面跟着的是图像数据流,而不是一个图像文件的名称

     

    15.$this->resetColumns();

    $this->setEqualColumns(3, 57);

     $this->selectColumn();
    //这三个函数设置等距离分栏,第一个函数重置;
    第二个函数原型为
    public function setEqualColumns($numcols=0, $width=0, $y='') 

    ,三个参数分别设置分栏数,每栏宽度和y坐标;第三个参数启用分栏;另外还有一个函数

    public function setColumnsArray($columns)

     16.$pdf->Text(5, 4, 'Line examples');

    //写入文本,三个参数为别为x坐标,y坐标,内容。

     

    17.

    $style = array('width'=> 0.5, 'cap' => 'butt', 'join' => 'miter', 'dash' => '10,20,5,10', 'phase' => 10, 'color' => array(255, 0, 0));

    $pdf->Line(5, 10, 80, 30, $style);

    //原型:

    public function Line($x1, $y1, $x2, $y2, $style=array()),

    前四个参数分别设置直线的两点;

    $style设置样式,

    第一个参数设置直线宽度,

     

    中文输出:

    在使用tcpdf时,中文输出时会出现乱码,后来通过网上查询和试验发现只有几个字体支持中文输出。下面是支持中文输出的几个字体,他的tcpdf版本是5_9_172 

    Tcpdf中可用于中文输出的字体:

     完美显示汉字: 

    1.cid0cs  

    2.droidsansfallback 

    3. stsongstdlight 

    语句:

    $pdf->SetFont('cid0cs ','',5); 

    只能部分显示汉字:

     1.hysmyeongjostdmedium 

    2.kozgopromedium 

    3.kozminproregul 

    4.msungstdlight 

     另外在pdf

    文档标题输出时,发现也不能识别中文,后来通过阅读代码发现,tcpdf.php中的Output($name=’doc.pdf’,$dest=’I’)函数中对$name即标题进行了正则替换,去掉了非字母、数字、下划线、点(.)、‘-’的内容,只要将其该正则加上正文正则即可输出中文,其中匹配的是gb2312中文字符,其语句为:

    $name = preg_replace('/[^'.chr(0xa1).'-'.chr(0xff).'A-Za-z0-9_.-]/','', $name);

    //GB2312汉字字母数字下划线正则表达式,这样的tcpdf不在是原内容了,可以根据自己的具体情况决定要不要修改。

    TCPDF说明文档

    一、首先调用TCPDF文件

    require_once('tcpdf.php');

    二、实例化TCPDF类 页面方向(P =肖像,L =景观)、测量(mm)、页面格式

     $pdf = new TCPDF('P', 'mm', 'A4', true, 'UTF-8', false); 

    三、设置文档信息

    设置文档信息----文件创作者

    复制代码
    $pdf->SetCreator('Helloweba');
    
    $pdf->SetAuthor('yueguangguang');
    
    $pdf->SetTitle('Welcome to helloweba.com!');
    
    $pdf->SetSubject('TCPDF Tutorial');
    
    $pdf->SetKeywords('TCPDF, PDF, PHP');
    
     
    复制代码

    四、设置默认标题数据

        

      $pdf->SetHeaderData(PDF_HEADER_LOGO,PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 038', PDF_HEADER_STRING);

    五、设置页眉和页脚信息

    $pdf->SetHeaderData('./logo.jpg', 30, 'Helloweba.com', '致力于WEB前端技术在中国的应用', array(0,64,255), array(0,64,128));
    
    $pdf->setFooterData(array(0,64,0), array(0,64,128));
    1. 设置页眉和页脚字体
    $pdf->setHeaderFont(Array('stsongstdlight', '', '10'));
    
    $pdf->setFooterFont(Array('helvetica', '', '8'));
    1. 设置默认等宽字体
    $pdf->SetDefaultMonospacedFont('courier');

    八、设置默认等宽字体

    $pdf->SetDefaultMonospacedFont('courier');

    九、设置间距

    $pdf->SetMargins(15, 27, 15);
    
    $pdf->SetHeaderMargin(5);
    
    $pdf->SetFooterMargin(10); 

    十、设置分页

    $pdf->SetAutoPageBreak(TRUE, 25);

    十一、设置自动换页

    $pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);

    十二、设置图像比例因子

    $pdf->setImageScale(1.25);

    十三、设置默认字体构造子集模式

    $pdf->setFontSubsetting(true);

    十四、设置字体

    $pdf->SetFont('stsongstdlight', '', 12);

    十五、添加一个页面

    $pdf->AddPage();

     

    十六、该方法从当前位置打印文本

          (行高,文本变量,通过AddLink()返回的URL或标识符,背景画,允许中心或对齐文本,如果正确设置光标底部的线,否则设置游标的行,字体延伸模式,如果真的只打印第一行并返回剩余的字符串,如果真正的字符串是一行的开始,最大高度,补白)

         $pdf->Write(0,$str1,'', 0, 'L', true, 0, false, false, 0);

     

    十七、安全密码设置

    $user_pass用户密码、$owner_pass 所有者密码、$mode加密强度0 = RC4 40位;1 = RC4 128位;2 = AES 128位;3 = AES 256位。、 $pubkeys数组包含公钥证书(“c”)的接受者和权限(“p”)$pdffile['password']

    $pdf->SetProtection($permissions = array('print', 'modify', 'copy', 'annot-forms', 'fill-forms', 'extract', 'assemble', 'print-high'), $user_pass = '123456', $owner_pass = null, $mode = 0, $pubkeys = null );

     

    十八、输出PDF

     默认是I:在浏览器中打开,D:下载,F:在服务器生成pdf ,S:只返回pdf的字符串,个人感觉无实在意义

    $pdf->Output('t.pdf', 'I');

     

    扩展--输入文字:

    单行文本
    Cell($w, $h=0, $txt='', $border=0, $ln=0, $align='', $fill=0, $link='', $stretch=0)
    Cell(宽, 高, 内容, 边框, 是否换行, 文字对齐, 文字底色,连接, 变宽)

    多行文本
    MultiCell($w, $h, $txt, $border=0, $align='J', $fill=0, $ln=1, $x='', $y='', $reseth=true, $stretch=0, $ishtml=false, $autopadding=true, $maxh=0)
    MultiCell(宽, 高, 内容, 边框,文字对齐, 文字底色, 是否换行, x坐标, y坐标, 变高, 变宽, 是否支持html, 自动填充, 最大高度)

    html文字

    setHtmlLinksStyle($color=array(0,0,255), $fontstyle='U');
    setHtmlLinksStyle(颜色默认蓝色, U有下划线);
    addHtmlLink($url, $name, $fill=0, $firstline=false, $color='', $style=-1);
    addHtmlLink(超链接地址, 显示文字, 是否有底色, $firstline=false, $color='', $style=-1);

    换行

    Ln($h='', $cell=false);
    Ln(行数, 是否cell);
    例如:
    $pdf->SetProtection(array('print','modify','copy','annot-forms'), '854230');

    图片背景

    Image($file, $x, $y, $w, $h, $type, $link, $align, $resize, $dpi, $palign, $ismask, $imgmask, $border);

    注意:把图片放语句放在前面,并且使用绝对坐标定位,即可做背景。

  • 相关阅读:
    Yahoo团队经验:网站性能优化的34条黄金法则
    SaltStack中状态间关系unless、onlyif、require、require_in、watch、watch_in
    kubectl 常用命令一
    Linux系统的限制
    DNS服务器搭建与配置
    Python对文件的操作
    SaltStack schedule功能
    saltstack的salt-api介绍
    SaltStack事件驱动 – event reactor
    SaltSack 中Job管理
  • 原文地址:https://www.cnblogs.com/lovecatcher/p/9116465.html
Copyright © 2011-2022 走看看