如何使用TCPDF撰寫和生成PDF文件

這篇文章主要介紹“如何使用TCPDF撰寫和生成PDF文件”,在日常操作中,相信很多人在如何使用TCPDF撰寫和生成PDF文件問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”如何使用TCPDF撰寫和生成PDF文件”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!

站在用戶的角度思考問題,與客戶深入溝通,找到蒲縣網(wǎng)站設(shè)計(jì)與蒲縣網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個性化、用戶體驗(yàn)好的作品,建站類型包括:做網(wǎng)站、網(wǎng)站設(shè)計(jì)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、域名注冊、虛擬主機(jī)、企業(yè)郵箱。業(yè)務(wù)覆蓋蒲縣地區(qū)。

一、需求

某一個合同需要在線生成,其中一部分內(nèi)容是固定的,而另一部分內(nèi)容是需要添加和編輯的。

編輯的部分是表單內(nèi)容的填寫,內(nèi)容涵蓋了:table input 兩個主要的html元素

現(xiàn)在需要在頁面編輯完合同之后,生成一份PDF文件保存在本地,同時下載一份文件。

二、選擇TCPDF

TCPDF 地址: https://tcpdf.org/

1. 選擇的原因

不需要安裝其他任何的依賴,這個是我最喜歡用它的原因。

2. 安裝

使用 composer 安裝即可,在 packagist 的地址是 :https://packagist.org/packages/tecnickcom/tcpdf

作者 tecnickcom 各種和 tcpdf 相關(guān)的包都有:https://packagist.org/packages/tecnickcom/

composer require tecnickcom/tcpdf

3. 使用方式

因?yàn)槭窃趆tml上操作,然后生成pdf,所以使用的方式是 writeHtml()

tcpdf 官網(wǎng)很多例子,可以直接用,比如 writeHtml() 就有專門的例子說明:

  • https://tcpdf.org/examples/example_006/

4. 示例代碼

下面的代碼中需要注意的地方:

  • 我去掉了一部分的內(nèi)容,如果你需要,則可以參照官方網(wǎng)站的例子增加

    • 比如我去掉了 頁眉 頁腳, 并且 頁面距 都是 10

  • 最終使用的寫入方式是 $pdf->writeHtml() ,參數(shù)使用推薦的參數(shù)即可

// 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('pdf作者');
$pdf->SetTitle('PDF標(biāo)題');

$pdf->setPrintHeader(false);
$pdf->setPrintFooter(false);

// set default monospaced font
$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED);

// set margins
$pdf->SetMargins(10, 10, 10);
$pdf->SetHeaderMargin(PDF_MARGIN_HEADER);
$pdf->SetFooterMargin(PDF_MARGIN_FOOTER);

// set auto page breaks
$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);

// set image scale factor
$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO);

// Add a page
// This method has several options, check the source code documentation for more information.
$pdf->AddPage();

// 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('msyh', '', 11, '', true);

// set text shadow effect
$pdf->setTextShadow(array('enabled'=>false));
// Set some content to print
$html ='
<style>
input{
border:0;
border-bottom: 1px solid #cccccc;
padding:5px;
}
</style>
<div >
<h2>測試生成PDF</h2>
<input type="text" name="name" value="" size="20" maxlength="30"  />
<table cellspacing="0" border="1px"> 
  <tbody>
    <tr>
        <td>AAAA</td>
        <td>BBBB</td>
        <td>CCCC</td>
    </tr> 
</tbody>
</table>
</div> 
';
// Print text using writeHTMLCell()
// $pdf->writeHTMLCell(0, 0, '', '', $html, 0, 1, 0, true, '', true);
// output the HTML content
$pdf->writeHTML($html, true, false, true, false, '');
// reset pointer to the last page
$pdf->lastPage();
// ---------------------------------------------------------
// Close and output PDF document
// This method has several options, check the source code documentation for more information.
$pdf->Output('example_001.pdf', 'D');
//============================================================+
// END OF FILE
//============================================================+

5. 生成結(jié)果

三、不可避免的問題

1、 XHTML

需要注意的是,在使用 writeHtml() 的時候,支持的是 XHTML 而非 HTML ,當(dāng)然 HTML5 更不支持

因此在構(gòu)建前端頁面的html代碼的時候,請使用 xhtml,否則一些內(nèi)容會失效。

比如:

1) input 表單必須進(jìn)行閉合

XHTML要求所有單標(biāo)簽必須進(jìn)行自閉和,而 tcpdf 自然無法識別

像上面 如果 input 按照 html5 標(biāo)準(zhǔn)寫是無法認(rèn)出來的。

2) 樣式如果比較少,建議寫在 tag 中的內(nèi)聯(lián)樣式 ><style> 標(biāo)簽內(nèi)。

雖然 TCPDF支持 <style> 這樣寫法,但是如 margin-top 這樣的寫在 <style> 標(biāo)簽中不生效,但是寫在內(nèi)聯(lián)樣式竟然生效!

2、 生成PDF文件的方式

最后的  $pdf->Output('example_001.pdf', 'D'); 有兩個參數(shù):

  • 第一個參數(shù)是文件名

  • 第二個參數(shù)是導(dǎo)出方式

1. 常用的導(dǎo)出方式分別是:
  • I : 直接在線預(yù)覽二進(jìn)制pdf文件(注意在一些PHP框架中,是無法直接顯示,會顯示亂碼)

  • D :直接下載到客戶端電腦并自動在瀏覽器預(yù)覽

  • FD : 在服務(wù)器上存一份,并下載到當(dāng)前客戶端然后會在瀏覽器預(yù)覽

  • F: 存儲在服務(wù)器中,不在客戶端下載

2. 如果選擇 F 或者 FD 可能會遇到 fopen 啥啥啥的錯誤

解決方案是,如果 選擇在服務(wù)器保存( F 或 FD ),第一個參數(shù)的文件名是需要一個 絕對路徑 的,比如:

$pdf->Output('/data/pdf/example_001.pdf','FD');

然后就能夠解決問題。

四、中文亂碼

中文肯定是亂碼,這個想也不用多想。

最簡單的解決方案:

1. 下載tcpdf支持的的中文字體

我在 CSDN 找到的是微軟雅黑的,親測可用,下載地址:

  • http://download.csdn.net/detail/wenyang800/9561869

2. 將文件進(jìn)行替換

  • 壓縮包中包含msyh.php,msyh.z,msyh.ctg.z三個文件,直接放入tcpdf的fonts目錄下,

  • 使用setfont("msyh","",11)設(shè)置生成pdf字體大小即可

我上面的代碼中已經(jīng)設(shè)置了微軟雅黑字體,然后中文就沒問題。

到此,關(guān)于“如何使用TCPDF撰寫和生成PDF文件”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!

新聞標(biāo)題:如何使用TCPDF撰寫和生成PDF文件
文章源于:http://muchs.cn/article28/ihescp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供小程序開發(fā)、用戶體驗(yàn)、微信小程序、靜態(tài)網(wǎng)站、品牌網(wǎng)站制作、動態(tài)網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站網(wǎng)頁設(shè)計(jì)