mpdf中文開發使用文檔附demo實例

官網URL:http://www.mpdf1.com/mpdf/index.phpphp

github:https://github.com/mpdf/mpdfcss

官方開發手冊,英文的:http://www.mpdfonline.com/repos/mpdfmanual.pdfhtml

網頁版 https://mpdf.github.io/前端

蛋疼,不想翻譯600多頁,只翻譯了部分經常使用的部分nginx

 

以前一直使用tcpdf,對於不是很複雜的合同生成還行,可是語法複雜的頁面,對table的支持一塌糊塗,div+css支持頗有限,並且必須是100%能夠轉換的閉合xml才行,不行直接報錯,laravel

而後花了1天左右嘗試市面上基本全部的php關於pdf的插件,基本全軍覆沒,要麼生成pdf過大,要麼某個html屬性支持很差,要麼年久失修,多年未維護,很是蛋疼,最後在github找到mpdfgit

一看文件包52M,我擦,這麼大,下載完成後發現字體佔了70-80M,沒想的是mpdf生成的pdf只有100多KB,大大下降我磁盤的消耗。並且生成速度還不錯,中文兼容,圖片兼容也還不錯github

 

 

要求web

mPDF 7.0 requires PHP ^5.6 || ~7.0.0 || ~7.1.0 || ~7.2.0. PHP mbstring和gd擴展必須加載。json

對於某些高級功能,可能須要其餘擴展,例如用於壓縮輸出的zlib和用於生成條形碼的bcmath或用於字符集轉換和SVG處理的xml等嵌入式資源。

mPDF在使用單線程服務器(如php-s)獲取外部HTTP資源時遇到一些問題。推薦使用適當的服務器,如nginx(php-fpm)或Apache。

Support us

Consider supporting development of mPDF with a donation of any value. Donation button can be found on the main page of the documentation.

安裝

官方安裝方法是經過composer and its packagist package mpdf/mpdf.

$ composer require mpdf/mpdf


使用

庫的最簡單的用法(從版本7.0開始)以下:

<?php

require_once __DIR__ . '/vendor/autoload.php';

$mpdf = new \Mpdf\Mpdf();
$mpdf->WriteHTML('<h1>Hello world!</h1>');
$mpdf->Output();

 


這將輸出PDF做爲應用程序/ PDF內容類型的PDF內聯類型。

設置和配置

全部配置指令均可以經過構造函數的$ config參數來設置。

建議經過tempDir配置變量設置本身的臨時目錄。對於使用mPDF(一般爲cli,webserver,fpm)的用戶,該目錄必須具備寫權限(建議使用775模式)。

<?php

$mpdf = new \Mpdf\Mpdf(['tempDir' => __DIR__ . '/tmp']);

 

默認狀況下,臨時目錄將位於vendor目錄中,而且將具備來自post_install做曲家腳本的正確權限。

有關自定義臨時目錄的更多信息,請參閱手冊中「安裝和設置」一節中有關「臨時文件的文件夾」的說明。

 

laravel的另外一種安裝方法

在composer.json加上

"autoload": {
        "classmap": [
            "database",
            "app/Libarary/mpdf"//加上
        ],
        "psr-4": {
            "App\\": "app/"
        },
        "files": [
            "app/Tools.php",
            "app/WeiXin.php"
        ]
    },

 

吧mpdf放在目錄 app/Libarary/下,個人版本是php5.6,so

在網站根目錄運行

composer dumpautoload  

 

 

實例demo

注意:mpdf對複雜的table佈局,基本能夠徹底兼容,簡單的div+css也能夠,可是建議table

use mPDF; //引入

$mpdf = new mPDF('utf-8', 'A4', 16, '', 10, 10, 15, 1);
$mpdf->SetDisplayMode('fullpage');
$mpdf->autoScriptToLang = true; $mpdf->autoLangToFont = true; //$stylesheet = file_get_contents('mpdfstyletables.css'); //$mpdf->WriteHTML($stylesheet,1); // The parameter 1 tells that this is css/style only and no body/html/text $file = 'images/seal/150.png'; // $mpdf->WriteHTML($contract_content, 2); $mpdf->WriteHTML($html, 2); $mpdf->Image($file, 140, 200); //追加蓋章圖片,貌似能夠獲取遠程的,非必要請使用服務器本地的,之前tcpdf就是沒法獲取遠程的,mpdf未測試遠程圖片 $mpdf->Output('mpdf.pdf', 'I'); //D是下載

 下面有pdf實際效果,文件在100-200K,比較小,有蓋章圖片會大一點,請注意網頁定義的像素和pdf顯示效果有差別,建議生成以後打印看實際效果

須要注意的是,這個頁面是找前端先把頁面直接table佈局先寫出來,在慢慢調整出來,在ueditor上效果基本同樣,能夠隨時修改文件,可是不能自由編輯,由於是table佈局,若是不當心把佈局刪除了,就會變形

雖然不是特別自由,可是能夠知足業務人員,自由修改文字,變動合同

 

html源代碼

 

  1 <table style="border-collapse: collapse; width: 900px; height: 56px; font-family: 宋體; font-size: 18px; position: relative;">
  2     <tbody>
  3         <tr style="height:75px;text-align:center" class="firstRow">
  4             <td style="font-weight: bold;font-size:40px;text-align:center" colspan="8">
  5                 購 銷 合 同
  6             </td>
  7         </tr>
  8         <tr style="height:75px;">
  9             <td colspan="8">
 10                 &nbsp;
 11             </td>
 12         </tr>
 13         <tr style="height:32px;text-align:left">
 14             <td style="font-weight: normal;" colspan="4">
 15                 買方:{buyer_company_name}
 16             </td>
 17             <td style="font-weight: normal;"></td>
 18             <td style="font-weight: normal; text-align: right; word-break: break-all;">
 19                 合同編號:
 20             </td>
 21             <td style="font-weight: normal;" colspan="2">
 22                 {order_key}
 23             </td>
 24         </tr>
 25         <tr style="height:32px">
 26             <td style="font-weight: normal;"></td>
 27             <td style="font-weight: normal;"></td>
 28             <td style="font-weight: normal;"></td>
 29             <td style="font-weight: normal;"></td>
 30             <td style="font-weight: normal;"></td>
 31             <td style="font-weight: normal;text-align:right">
 32                 簽定地點:
 33             </td>
 34             <td style="font-weight: normal;"></td>
 35             <td style="font-weight: normal;"></td>
 36         </tr>
 37         <tr style="height:32px">
 38             <td style="font-weight: normal;" colspan="4">
 39                 賣方:{supply_company_name}
 40             </td>
 41             <td style="font-weight: normal;"></td>
 42             <td style="font-weight: normal; text-align: right; word-break: break-all;">
 43                 簽定時間:
 44             </td>
 45             <td style="font-weight: normal; word-break: break-all;" colspan="2">
 46                 {current_time}
 47             </td>
 48         </tr>
 49         <tr style="height:32px">
 50             <td style="font-weight: normal;"></td>
 51             <td style="font-weight: normal;"></td>
 52             <td style="font-weight: normal;"></td>
 53             <td style="font-weight: normal;"></td>
 54             <td style="font-weight: normal;"></td>
 55             <td style="font-weight: normal;"></td>
 56             <td style="font-weight: normal;"></td>
 57             <td style="font-weight: normal;"></td>
 58         </tr>
 59         <tr style="height:75px;">
 60             <td colspan="8">
 61                 &nbsp;
 62             </td>
 63         </tr>
 64         <tr style="height:32px;text-align:left">
 65             <td style="    font-weight: normal;" colspan="8">
 66                 第1、訂單號碼、產品規格型號、數量、單價、金額;
 67             </td>
 68         </tr>
 69         <tr style="height:32px;text-align:center;font-size:14px">
 70             <td style="border: 1px solid #ccc;font-weight: normal; width: 13%;text-align:center;font-size:14px;">
 71                 貨物名稱
 72             </td>
 73             <td style="border: 1px solid #ccc;font-weight: normal; width: 16%;text-align:center;font-size:14px;">
 74                 品牌
 75             </td>
 76             <td style="border: 1px solid #ccc;font-weight: normal; width: 10%;text-align:center;font-size:14px;">
 77                 型號規格
 78             </td>
 79             <td style="border: 1px solid #ccc;font-weight: normal; width: 2%;text-align:center;font-size:14px;">
 80                 單位
 81             </td>
 82             <td style="border: 1px solid #ccc;font-weight: normal;width: 9%;text-align:center;font-size:14px;">
 83                 數量
 84             </td>
 85             <td style="border: 1px solid #ccc;font-weight: normal;width: 13%;text-align:center;font-size:14px;">
 86                 含稅單價(元)
 87             </td>
 88             <td style="border: 1px solid #ccc;font-weight: normal;width: 12%;text-align:center;font-size:14px;">
 89                 金額(元)
 90             </td>
 91             <td style="border: 1px solid #ccc;font-weight: normal;width: 25%;text-align:center;font-size:14px;">
 92                 備註
 93             </td>
 94         </tr>
 95         <tr style="height:32px;text-align:center;font-size:14px;text-align:center">
 96             <td style="border: 1px solid #ccc;font-weight: normal;text-align:center;font-size:14px;">
 97                 {product_name}
 98             </td>
 99             <td style="border: 1px solid #ccc;font-weight: normal;text-align:center;font-size:14px;">
100                 {product_brand}
101             </td>
102             <td style="border: 1px solid #ccc;font-weight: normal;text-align:center;font-size:14px;">
103                 {product_type}
104             </td>
105             <td style="border: 1px solid #ccc;font-weight: normal;text-align:center;font-size:14px;">
106 107             </td>
108             <td style="border: 1px solid #ccc;font-weight: normal;text-align:center;font-size:14px;">
109                 {product_number}
110             </td>
111             <td style="border: 1px solid #ccc;font-weight: normal;text-align:center;font-size:14px;">
112                 {order_amount}
113             </td>
114             <td style="border: 1px solid #ccc;font-weight: normal;text-align:center;font-size:14px;">
115                 {order_amount}
116             </td>
117             <td style="border: 1px solid #ccc;font-weight: normal;text-align:center;font-size:14px;">
118                 {buyer_remark}
119             </td>
120         </tr>
121         <tr style="height:32px;text-align:left;font-size:14px">
122             <td style="border: 1px solid #ccc;font-weight: normal;font-size:14px;" colspan="5">
123                 合計人民幣金額(大寫):{order_amount_capital}
124             </td>
125             <td style="border: 1px solid #ccc;font-weight: normal;font-size:14px;" colspan="3">
126                 RMB {order_amount}
127             </td>
128         </tr>
129         <tr style="height:75px;">
130             <td colspan="8">
131                 &nbsp;
132             </td>
133         </tr>
134         <tr style="text-align:left">
135             <td style="   font-weight: normal;" colspan="8">
136                 <p style="margin:3px">
137                     <span style="font-family:宋體">第2、交(提)貨時間及地點、付款方式: &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<br/> &nbsp;交(提)貨 方式:買方到賣方指定倉庫自提,出庫費用及貨權移交後的倉儲費用由買方負責。 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<br/> &nbsp;交(提)貨時間和付款方式: 買方將所有貨款於簽定合同日16:30以前匯入供方指定帳戶,賣方收到貨款後,買方可到賣方指定倉庫提貨。 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span>
138                 </p>
139             </td>
140         </tr>
141         <tr style="text-align:left">
142             <td style="font-weight: normal;" colspan="8">
143                 <p style="margin:3px">
144                     <span style="font-family: 宋體">第三條、 質量、包裝標準:按《中華人民共和國國家標準》的規範GB/T 470-2008或按生產廠家提供的質量保證書爲準。</span>
145                 </p>
146             </td>
147         </tr>
148         <tr style="text-align:left">
149             <td style="  font-weight: normal;" colspan="8">
150                 <p style="margin:3px">
151                     <span style="font-family: 宋體">第四條、合理損耗標準及計算方法:容許合理磅差±2‰,超出合理磅差範圍部分由買賣雙方協商解決,交貨尾差±5%,賣方提供相對應的生產廠出廠磅碼單,按磅碼單抄碼重量結算。 </span>
152                 </p>
153             </td>
154         </tr>
155         <tr style="text-align:left">
156             <td style="  font-weight: normal;" colspan="8">
157                 <p style="margin:3px">
158                     <span style="font-family: 宋體">第五條、檢驗標準、方法、地點及期限:按國家標準驗收。若有異議,買方須在收貨七天內提出,同時買方應保存異議貨品留待賣方或第三方鑑定處理。 </span>
159                 </p>
160             </td>
161         </tr>
162         <tr style="text-align:left">
163             <td style="   font-weight: normal;" colspan="8">
164                 <p style="margin:3px">
165                     <span style="font-family: 宋體">第六條、結算方式及期限:款到發貨,買方應於提貨前以電匯/匯票等方式支付所有貨款;賣方開具17%增值稅發票。</span>
166                 </p>
167             </td>
168         </tr>
169         <tr style="text-align:left">
170             <td style="  font-weight: normal;" colspan="8">
171                 <p style="margin:3px">
172                     <span style="font-family: 宋體">第七條、違約責任:本合同受《中華人民共和國合同法》保護。買賣雙方若有一方沒法履行合同(不可抗力除外),由此形成的經濟損失由違約方承擔。遇不可抗力因素,不能履行本合同時,應及時通知對方,雙方協商解決。</span>
173                 </p>
174             </td>
175         </tr>
176         <tr style="text-align:left">
177             <td style=" font-weight: normal;" colspan="8">
178                 <p style="margin:3px">
179                     <span style="font-family: 宋體">第八條、合同爭議的解決方式:本合同在履行過程當中發生的爭議,由雙方當事人協商解決;協商不成任何一方都可向合同簽定所在地有管轄權的人民法院提起訴訟。</span>
180                 </p>
181             </td>
182         </tr>
183         <tr style="text-align:left">
184             <td style=" font-weight: normal;" colspan="8">
185                 <p style="margin:3px">
186                     <span style="font-family: 宋體">第九條、其餘約定事項:本合同以傳真方式簽定,經雙方蓋章後生效,傳真件與原件具備同等法律效力;與本合同有關的貨權轉移憑據及其傳真件同具法律效力;有效期:自買賣雙方簽定合同之日起,至貨款、發票結清之日爲止。</span>
187                 </p>
188             </td>
189         </tr>
190         <tr style="height:75px;">
191             <td colspan="8">
192                 &nbsp;
193             </td>
194         </tr>
195         <tr style="text-align:left">
196             <td style=" border: 1px solid #ccc; text-align:center;  font-weight: normal;" colspan="5">
197                 <p style="text-align:center">
198                     <span style="font-family:宋體">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
199                 </p>
200             </td>
201             <td style=" border: 1px solid #ccc; text-align:center;  font-weight: normal;" colspan="3">
202                 <p style="text-align:center">
203                     <span style="font-family:宋體">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
204                 </p>
205             </td>
206         </tr>
207         <tr style="text-align:left">
208             <td style=" border: 1px solid #ccc;   font-weight: normal;" colspan="5">
209                 <p style="margin:3px">
210                     <span style="font-family:宋體">單位名稱(章): </span>{buyer_company_name}
211                 </p>
212             </td>
213             <td style="  border: 1px solid #ccc;  font-weight: normal;" colspan="3">
214                 <p style="margin:3px">
215                     <span style="font-family:宋體">單位名稱(章): </span>{supply_company_name}
216                 </p>
217             </td>
218         </tr>
219         <tr style="text-align:left">
220             <td style=" border: 1px solid #ccc;   font-weight: normal;" colspan="5">
221                 <p style="margin:3px">
222                     <span style="font-family:宋體">單位地址:</span>{buyer_company_address}
223                 </p>
224             </td>
225             <td style=" border: 1px solid #ccc;   font-weight: normal;" colspan="3">
226                 <p style="margin:3px">
227                     <span style="font-family:宋體">單位地址:</span>{buyer_company_address}
228                 </p>
229             </td>
230         </tr>
231         <tr style="text-align:left">
232             <td style=" border: 1px solid #ccc;   font-weight: normal;" colspan="5">
233                 <p style="margin:3px">
234                     <span style="font-family:宋體">法定表明人:</span>{buyer_representative}
235                 </p>
236             </td>
237             <td style="  border: 1px solid #ccc;  font-weight: normal;" colspan="3">
238                 <p style="margin:3px">
239                     <span style="font-family:宋體">法定表明人:</span>{supply_representative}
240                 </p>
241             </td>
242         </tr>
243         <tr style="text-align:left">
244             <td style=" border: 1px solid #ccc;   font-weight: normal;" colspan="5">
245                 <p style="margin:3px">
246                     <span style="font-family:宋體">委託代理人:</span>{buyer_representative_commissioned}
247                 </p>
248             </td>
249             <td style="  border: 1px solid #ccc;  font-weight: normal;" colspan="3">
250                 <p style="margin:3px">
251                     <span style="font-family:宋體">委託代理人:</span>{supply_representative_commissioned}
252                 </p>
253             </td>
254         </tr>
255         <tr style="text-align:left">
256             <td style="  border: 1px solid #ccc;  font-weight: normal;" colspan="5">
257                 <p style="margin:3px">
258                     <span style="font-family:宋體">&nbsp;&nbsp;&nbsp; 話:</span>{buyer_mobile}
259                 </p>
260             </td>
261             <td style=" border: 1px solid #ccc;   font-weight: normal;" colspan="3">
262                 <p style="margin:3px">
263                     <span style="font-family:宋體">&nbsp;&nbsp;&nbsp; 話:</span>{supply_mobile}
264                 </p>
265             </td>
266         </tr>
267         <tr style="text-align:left">
268             <td style=" border: 1px solid #ccc;   font-weight: normal;" colspan="5">
269                 <p style="margin:3px">
270                     <span style="font-family:宋體">&nbsp;&nbsp;&nbsp; 真:</span>{buyer_fax}
271                 </p>
272             </td>
273             <td style="  border: 1px solid #ccc;  font-weight: normal;" colspan="3">
274                 <p style="margin:3px">
275                     <span style="font-family:宋體">&nbsp;&nbsp;&nbsp; 真:</span>{supply_fax}
276                 </p>
277             </td>
278         </tr>
279         <tr style="text-align:left">
280             <td style=" border: 1px solid #ccc;   font-weight: normal;" colspan="5">
281                 <p style="margin:3px">
282                     <span style="font-family:宋體">開戶銀行:</span>{buyer_opening_bank}
283                 </p>
284             </td>
285             <td style="  border: 1px solid #ccc;  font-weight: normal;" colspan="3">
286                 <p style="margin:3px">
287                     <span style="font-family:宋體">開戶銀行:</span>{supply_opening_bank}
288                 </p>
289             </td>
290         </tr>
291         <tr style="text-align:left">
292             <td style=" border: 1px solid #ccc;   font-weight: normal;" colspan="5">
293                 <p style="margin:3px">
294                     <span style="font-family:宋體">&nbsp;&nbsp;&nbsp; 號:</span>{buyer_bank_account}
295                 </p>
296             </td>
297             <td style="  border: 1px solid #ccc;  font-weight: normal;" colspan="3">
298                 <p style="margin:3px">
299                     <span style="font-family:宋體">&nbsp;&nbsp;&nbsp; 號:</span>{supply_bank_account}
300                 </p>
301             </td>
302         </tr>
303     </tbody>
304 </table>
View Code

 

 

解決php7兼容問題 

Deprecated: Methods with the same name as their class will not be constructor

緣由是php7不在支持同名構造函數了。

解決問題的辦法比較簡單,吧同名構造函數  __construct就能夠

demo中報錯的地方須要修改四個地方,問題都是同樣的

mpdf/mpdf.php  

mpdf/classes/grad

mpdf/classes/mpdfform

mpdf/classes/cssmgr

問題就解決了,若是還有相似,找到對應文件就能夠

$mpdf = new mPDF('utf-8', 'A4', 16, '', 10, 10, 15, 1);
die;

 

看具體報什麼錯誤

 

函數使用和說明

 注意: 在目錄下面有個examples,有不少例子可使用

不明白爲何函數沒寫變量註釋

$mpdf = new mPDF($mode='',$format='A4',$default_font_size=0,$default_font='',$mgl=15,$mgr=15,$mgt=16,$mgb=16,$mgh=9,$mgf=9, $orientation='P');
相關文章
相關標籤/搜索