tcpdf開發文檔(中文翻譯版)


 2017年5月3日15:06:15 

這個是英文翻譯版,我看過作者的文檔其實不太友善或者不方便閱讀,不如wiki方便

后面補充一些,結構性文檔翻譯

這是一部官方網站文檔,剩余大部分都是開發的時候和網絡總結來的

項目官網:https://tcpdf.org/

github: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

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:

$pdf->SetFont(‘times’, ‘BI’, 20, “, ‘false’);

Performances(性能)

  • 安裝和配置PHP操作碼cacher,如XCache;
  • 編輯php.ini文件並增加腳本可能消耗的最大內存量(memory_limit);
  • 編輯php.ini文件並增加每個腳本的最大執行時間(max_execution_time);
  • 編輯config / tcpdf_config.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字符)。 輸出所需的多個單元格,一個低於另一個。<br />
*文本可以對齊,居中或對齊。 單元格塊可以框架並繪制背景
 */
//設置一個text文本塊
$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'];
            $contract = M("contract")->where(array("identify" => "$identify"))->find();
            $file = M("file")->where(array("file_id" => $contract['contract_sign_pic_file_id']))->find();
            $sign_pic_url = app_standard_path_new($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保存
$contract_data = $pdf->Output($file_name, 'S');

file_put_contents($tmp_name, $contract_data);//所以寫入你想寫入的地方的文件

 



 

新增實例,吧圖片章浮動到文字上面demo 

2018年1月17日11:34:27

 

例子的官方地址  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 = <<<EOD
<h1>Welcome to <a href="http://www.tcpdf.org" style="text-decoration:none;background-color:#CC0000;color:black;">&nbsp;<span style="color:black;">TC</span><span style="color:white;">PDF</span>&nbsp;</a>!</h1>
<i>This is the first example of TCPDF library.</i>
<p>This text is printed using the <i>writeHTMLCell()</i> method but you can also use: <i>Multicell(), writeHTML(), Write(), Cell() and Text()</i>.</p>
<p>Please check the source code documentation and other examples for further information.</p>
<p style="color:#CC0000;">TO IMPROVE AND EXPAND TCPDF I NEED YOUR SUPPORT, PLEASE <a href="http://sourceforge.net/donate/index.php?group_id=128076">MAKE A DONATION!</a></p>
EOD;

/*
 * 
  此方法允許以換行符打印文本。
  它們可以是自動的(一旦文本到達單元格的右邊界)或顯式(通過\ n字符)。 輸出所需的許多單元,一個低於另一個。
    文本可以對齊,居中或對齊。 單元格塊可以框架並繪制背景。
 */

// Print text using writeHTMLCell() 
$pdf->writeHTMLCell(0, 0, '', '', $html, 0, 1, 0, true, '', true); //使用writeHTMLCell打印文本
// ---------------------------------------------------------
// Close and output PDF document
// This method has several options, check the source code documentation for more information.
$pdf->Output('example_001.pdf', 'I'); //I輸出在瀏覽器上

//============================================================+
// END OF FILE
//============================================================+

 

Example 002 : without Header and Footer  取消頁眉和頁腳

 

Example 003 : custom Header and Footer  自定義頁眉和頁腳

Example 004 : text Stretching with Cell()

Example 005 : Multicell()

Example 006 : WriteHTML()

Example 007 : independent columns with WriteHTMLCell()

Example 008 : external UTF-8 Unicode text file

Example 009 : Image()

Example 010 : text on multiple columns

Example 011 : table with primitive methods

Example 012 : graphic methods

Example 013 : graphic transformations

Example 014 : forms and javascript

Example 015 : index with Bookmarks()

Example 016 : document encryption

Example 017 : independent columns with MultiCell()

Example 018 : Persian and Arabic language on RTL document

Example 019 : alternative config file

Example 020 : complex alignment with Multicell()

Example 021 : writeHTML() text flow

Example 022 : CMYK colors

Example 023 : page groups

Example 024 : object visibility with setVisibility() and layers with startLayer()

Example 025 : object transparency with SetAlpha()

Example 026 : text clipping

Example 027 : 1D barcodes

Example 028 : multiple page formats

Example 029 : Set PDF viewer display preferences with setViewerPreferences()

Example 030 : colour gradients

Example 031 : pie chart graphic

Example 032 : EPS/AI vectorial image with ImageEPS()

Example 033 : mixed font types (TrueType Unicode, core, CID-0)

Example 034 : clipping masks

Example 035 : border styles with SetLineStyle()

Example 036 : PDF text annotations

Example 037 : spot colors

Example 038 : unembedded CID-0 CJK font

Example 039 : HTML text justification

Example 040 : booklet mode (double-sided pages)

Example 041 : file attachment

Example 042 : image with transparency (alpha channel)

Example 043 : disk caching

Example 044 : move, copy and delete pages

Example 045 : table of contents

Example 046 : text hyphenation

Example 047 : transactions and UNDO

Example 048 : HTML tables with header and rowspan

Example 049 : call TCPDF methods in HTML

Example 050 : 2D barcodes (QR-Code, Datamatrix ECC200 and PDF417)

Example 051 : image as a page background

Example 052 : digital signature certification

Example 053 : javascript functions

Example 054 : XHTML form

Example 055 : core fonts dump

Example 056 : crop marks and registration marks

Example 057 : vertical alignment and metrics on Cell()

Example 058 : SVG vectorial image with ImageSVG()

Example 059 : table of contents with HTML templates

Example 060 : advanced page settings

Example 061 : XHTML + CSS

Example 062 : XObject templates

Example 063 : text stretching and spacing (tracking/kerning)

Example 064 : no-write page regions

Example 065 : PDF/A-1b (ISO 19005-1:2005) document


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM