亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > 綜合 > 正文

wkhtmltopdf 最好用Html轉pdf的工具

2024-07-21 02:02:57
字體:
來源:轉載
供稿:網友

實習時公司需要把一些html頁面中的部分內容生成pdf文件,然后我就找一些用php把html頁面圍成pdf文件的類。方法是可謂是找了很多很多,什么html2pdf,pdflib,FPDF這些都試過了,但是都沒有達到我要的求(主要是不能解決中文亂碼的問題以及樣式排版的問題)。

pdflib,FPDF 這兩個方法是需要編寫程序去生成pdf的,就也是講不支持直接把html頁面轉換成pdf;html2pdf這個雖然可以把html頁面轉換成pdf文 件,但是它只能轉換一般簡單的html代碼,如果你的html內容要的是通過后臺新聞編輯器排版的那肯定不行的。

糾結了半天,什么百度,谷歌搜索都用了,搜索了半天,功夫不負有心人,終于找到一個非常好用的方法了,下面就隆重介紹。

它就 是:wkhtmltopdf,wkhtmltopdf可以直接把任何一個可以在瀏覽器中瀏覽的網頁直接轉換成一個pdf,首先說明一下它不是一個php 類,而是一個把html頁面轉換成pdf的一個軟件(需要安裝在服務器上),但是它并不是一個簡單的桌面軟件,而且它直接cmd批處理的,使用php中的 shell_exec()函數就可以調用它。下面就介紹如何用php+js+html來讓它生成pdf文件的方法(不過有個缺陷就是他需要在服務器端生成一個緩存文件,如果你使用thinkphp框架的話就可以將其緩存文件放在runtime 文件夾中暫存就行)。

一,下載并安裝wkhtmltopdf

1、下載地址:http://wkhtmltopdf.org/downloads.html 如圖:

這里寫圖片描述 

2、上面有各種平臺下安裝的安裝包,英文不好的直接谷歌翻譯一下。下面以 windows7平臺上使用舉例,我的下載的是stable(穩定版)的wkhtmltopdf-0.12.3.2-installer.exe這個版本,我在win7、win8 32位和64位以及win-sever上安裝測試都沒有問題的,系統時幾位就下載幾位的安裝包。下載好以后直接安裝就可以了,注意安裝路徑要知道,下面會用到的。

這里寫圖片描述
3、安裝好以后需要在系統環境變量變量名為”Path”的后添加:;D:/wkhtmltopdf/bin 也就是你安裝的目錄。安裝好以后重啟電腦。
下圖是如何設置環境變量:

打開我的電腦右鍵屬性

打開我的電腦右鍵屬性

點擊高級系統設置

點擊高級系統設置

找到高級里面點擊環境變量

找到高級里面點擊環境變量

找到系統變量中的path,點擊編輯,將剛剛的安裝位置復制到最后,記得前面加一個分號哦!

找到系統變量中的path,點擊編輯,將剛剛的安裝位置復制到最后,記得前面加一個分號哦!
這里寫圖片描述

二,測試使用效果
直接在cmd里輸入:wkhtmltopdf http://www.baidu.com/ D:website1.pdf(注意中間有空格哈)
第一個是:運行軟件名稱(這個是不變的) 第二個是網址 第三個是生成后的路徑及文件名?;剀嚭笫遣皇强瓷粋€生成進度條的提示呢,恭喜您已經成功了,到你的生成目錄里看看是不是有一個剛生成的pdf文件呢。
操作方法:1、windows鍵+r打開搜索框,輸入cmd,點擊確定

這里寫圖片描述

2、直接在cmd里輸入:wkhtmltopdf http://www.baidu.com/ D:website1.pdf(注意中間有空格哈)

這里寫圖片描述

3、點擊回車后,會看到一個進度條,然后就提示轉換成功!

這里寫圖片描述

4、之后在相應位置(即剛剛設置的D盤)中會發現多了一個Pdf文件,就說明成功了

這里寫圖片描述

三,php里調用

php里調用是很簡單的,用shell_exec這個函數就可以了,如果shell_exec函數不能用看看php.ini里是否補禁用了(找到php.ini中的shell_exec函數,取消注釋就可以了,一般都是可以直接用的)。簡單舉例:

<?php shell_exec("wkhtmltopdf http://www.49028c.com/ 1.pdf") ?>

你會發現在你php文件的同級目錄中會生成一個1.pdf的文件

下面代碼舉例介紹如何在網站開發中使用它:主要功能是截取網頁的部分傳遞到php中處理成pdf文檔

html頁面代碼:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head> <script src="js/jquery-2.1.4.min.js"></script> <link rel="stylesheet" href="css/common.css" rel="external nofollow" rel="external nofollow" > <link rel="stylesheet" href="css/myCenter.css" rel="external nofollow" rel="external nofollow" ><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>霍蘭德職業測試</title></head><body><!--startprint--><div class="right5">     <div class="right_top" style="background-image:url(images/right-di.png);">      <h3>霍蘭德測試報告</h3>    </div>    <div class="print">      <input type="button" value="下載報告" id="down" class="print_btn">    </div>     <div class="Hollander">        <h6>MBTI測試結果:ESTJ</h6>        <div id="chart"></div>        <p>約翰?霍蘭德(John Holland)是美國約翰?霍普金斯大學心理學教授,美國著名的職業指導專家?;籼m德以職業興趣理論為基礎,先后編制了職業偏好量表(VocatIonaI Preference lnventory)和自我導向搜尋表(Self-directed Search)兩種職業興趣量表,霍蘭德力求為每種職業興趣找出兩種相匹配的職業能力。興趣測試和能力測試的結合在職業指導和職業咨詢的實際操作中起到了促進作用。</p>    </div>      <table class="tbl1">     <tbody>      <tr node-type="toolBar">        <td class="tbl11">領導模式:</td>        <td class="tbl12">          <p>①直接領導,快速管理 ②運用過去經驗解決問題 ③直接、明確地識別問題的核心 ④決策和執行決策非常迅速 ⑤傳統型領導,尊重組織內部的等級和組織獲得的成就</p>        </td>       </td>      </tr>      <tr node-type="toolBar">        <td class="tbl11">領導模式:</td>        <td class="tbl12">          <p>①直接領導,快速管理 ②運用過去經驗解決問題 ③直接、明確地識別問題的核心 ④決策和執行決策非常迅速 ⑤傳統型領導,尊重組織內部的等級和組織獲得的成就</p>        </td>       </td>      </tr>      <tr node-type="toolBar">        <td class="tbl11">領導模式:</td>        <td class="tbl12">          <p>①直接領導,快速管理 ②運用過去經驗解決問題 ③直接、明確地識別問題的核心 ④決策和執行決策非常迅速 ⑤傳統型領導,尊重組織內部的等級和組織獲得的成就</p>        </td>       </td>      </tr>      <tr node-type="toolBar">        <td class="tbl11">領導模式:</td>        <td class="tbl12">          <p>①直接領導,快速管理 ②運用過去經驗解決問題 ③直接、明確地識別問題的核心 ④決策和執行決策非常迅速 ⑤傳統型領導,尊重組織內部的等級和組織獲得的成就</p>        </td>       </td>      </tr>      <tr node-type="toolBar">        <td class="tbl11">適合報考專業:</td>        <td class="tbl12">          <a><span>專業定位卡介紹>></span></a>        </td>       </td>     </tr>    </tbody>   </table>  </div><!--endprint-->  <form action="pdf.php" method="post" name="hld_res" id="hideform">   <input type="hidden" id="hide_content" name="html"/>  </form> </body> <script>  $(function () {   //獲取需要傳遞的Html代碼 通過<!--startprint--><!--endprint-->截取   bdhtml=window.document.body.innerHTML;    sprnstr="<!--startprint-->";    eprnstr="<!--endprint-->";    prnhtml=bdhtml.substr(bdhtml.indexOf(sprnstr)+17);    prnhtml=prnhtml.substring(0,prnhtml.indexOf(eprnstr));    //將獲取的html代碼添加到隱藏域中傳給php文件處理   $("#hide_content").val(""+prnhtml+"");  } );    $("#down").click(function(){   $("#hideform").submit();  });  </script></html>

php頁面:

<?php  //轉成pdf    $html=$_POST['html'];    //Turn on output buffering    ob_start();    $html='    <link rel="stylesheet" href="css/common.css" rel="external nofollow" rel="external nofollow" >    <link rel="stylesheet" href="css/myCenter.css" rel="external nofollow" rel="external nofollow" >    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />'.$html;    //這兒可以引入生成的Html的樣式表 路徑可以是絕對路徑也可以是相對路徑,也可以把樣式表文件復制到臨時html文件的目錄下 即這兒的demo文件目錄下(默認) 也可以直接把樣式寫在html頁面中直接傳遞過來    //$html = ob_get_contents();    //$html=$html1.$html;    $filename = "hld";    //save the html page in tmp folder 保存的html臨時文件位置 可以是相對路徑也是可以是絕對路徑 下面用相對路徑    file_put_contents("{$filename}.html", $html);    //Clean the output buffer and turn off output buffering    ob_end_clean();    //convert HTML to PDF    shell_exec("wkhtmltopdf -q {$filename}.html {$filename}.pdf");    if(file_exists("{$filename}.pdf")){      header("Content-type:application/pdf");      header("Content-Disposition:attachment;filename={$filename}.pdf");      echo file_get_contents("{$filename}.pdf");      //echo "{$filename}.pdf";    }else{      exit;    }   ?>

點擊頁面中的下載按鈕,

這里寫圖片描述

是不是彈出一個下載提示,打開下載的pdf,是不是和網頁上的樣式一模一樣呢,

這里寫圖片描述 

這里寫圖片描述

再打開Php文件中的文件保存位置,看看是不是多了兩個臨時文件呢?

這兩個臨時文件在哪兒,你的css就得在哪兒,或者你直接使用相對路徑,引用其他文件中的css樣式也可以的,最簡單的就是把css樣式直接寫在要轉成pdf的html頁面中。

這里寫圖片描述

如果存在樣式沒有,那就是你的樣式路徑沒有寫對,在檢查一下就可以了!

四,解決分頁問題

wkhtmltopdf 很好用,但也有些不盡人意。就是當一個html頁面很長我需要在指定的地方分頁那怎么辦呢? wkhtmltopdf 開發者在開發的時候并不是沒有考慮到這一點,wkhtmltopdf 有個很好的方法,就是在那個div的樣式后添加一個:page-break-inside:avoid;就ok了。

例如

div{ width:800px; min-height:1362px;margin:auto;page-break-inside:avoid;}

以上就是個人總結的轉pdf的方法,很多地方還可以擴展,小伙伴們開動腦筋動起來吧,不過目前一直沒有解決就是沒法用中文名稱命名文件,如果有能解決的伙伴,麻煩在下面留言告知,謝謝么么噠了!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品情侣自拍| 成人av在线网址| 久久久久久久国产精品| 黄色成人在线免费| 中文字幕一区二区精品| 亚洲性视频网址| 国产成人在线精品| 精品美女久久久久久免费| 国产成人自拍视频在线观看| 国产999精品久久久影片官网| 97成人超碰免| 2025国产精品视频| 国产www精品| 97视频免费在线观看| 国产精品27p| 欧美www视频在线观看| 久久久久久久久国产| 欧美日本亚洲视频| 国产精品福利在线观看| 亚洲国产精品人人爽夜夜爽| 亚洲女同精品视频| 国产精品视频久久久久| 久久影院免费观看| 亚洲男人的天堂网站| 中文字幕国内精品| 激情亚洲一区二区三区四区| 国产日韩欧美日韩大片| 成人免费网视频| 国产精品久久精品| 日韩女优人人人人射在线视频| 中文字幕精品一区久久久久| 国产成人精品久久亚洲高清不卡| 美女av一区二区| 久久精品国产2020观看福利| 欧美专区福利在线| 川上优av一区二区线观看| 日韩久久精品成人| 91久久国产综合久久91精品网站| 91tv亚洲精品香蕉国产一区7ujn| 欧美中文字幕精品| 97视频在线观看播放| 日本伊人精品一区二区三区介绍| 久久亚洲综合国产精品99麻豆精品福利| 亚洲成人教育av| 人九九综合九九宗合| 久久99亚洲精品| 高清一区二区三区四区五区| 欧美最顶级丰满的aⅴ艳星| 欧美国产亚洲视频| 欧美一区二区视频97| 欧美在线一区二区视频| 欧美午夜精品久久久久久久| 欧美激情精品在线| 激情久久av一区av二区av三区| 亚洲国产精品国自产拍av秋霞| 欧美性xxxx极品hd欧美风情| 亚洲成色www8888| 成人写真视频福利网| 456亚洲影院| 91理论片午午论夜理片久久| 欧美一区二区三区免费观看| 亚洲欧美在线免费观看| 亚洲深夜福利网站| 久久久久久com| 色av中文字幕一区| 日韩电影中文 亚洲精品乱码| 国产精品一区二区三区久久| 欧美精品电影免费在线观看| 国产乱人伦真实精品视频| 米奇精品一区二区三区在线观看| 久久亚洲精品小早川怜子66| 国产亚洲精品久久久久久牛牛| 97超视频免费观看| 亚洲人成在线一二| 国产不卡一区二区在线播放| 日韩视频免费中文字幕| 91精品视频在线播放| 亚洲福利小视频| 日韩中文娱乐网| 91免费的视频在线播放| 久久久久久久久中文字幕| 黄色成人av在线| 国产成人激情小视频| 亚洲欧洲日产国产网站| 欧美福利小视频| 伊人久久男人天堂| 亚洲人成网站色ww在线| 91美女片黄在线观| 亚洲综合大片69999| 亚洲白虎美女被爆操| 九九久久久久久久久激情| 国语自产精品视频在线看抢先版图片| 精品国产乱码久久久久久天美| 97在线免费观看视频| 国产一区二区成人| 国产精品第10页| 欧美在线视频免费播放| 成人免费视频xnxx.com| 中文字幕在线视频日韩| 性欧美在线看片a免费观看| www.日韩欧美| 成人国内精品久久久久一区| 国内精久久久久久久久久人| 久久精品一本久久99精品| 久久久久久久av| 亚洲伊人久久大香线蕉av| 欧美日韩成人在线视频| 久久久久久国产精品美女| 亚洲自拍偷拍在线| 中文字幕综合在线| 欧美色图在线视频| 国产午夜精品久久久| 欧美激情视频在线免费观看 欧美视频免费一| 亚洲国产精品久久久久秋霞蜜臀| 性色av一区二区三区免费| 亚洲人成啪啪网站| 国产欧美中文字幕| 亚洲激情视频在线观看| 国产亚洲一区二区在线| 日韩精品在线观看网站| 91精品91久久久久久| 国产精品免费小视频| 亚洲第一区在线观看| 91精品综合久久久久久五月天| 欧美在线性视频| 亚洲最大在线视频| 91精品国产综合久久香蕉的用户体验| 中文字幕精品一区久久久久| 久久精品亚洲热| 欧美激情免费在线| 欧美精品videos性欧美| 日韩电影在线观看免费| 精品国内自产拍在线观看| 亚洲第一精品久久忘忧草社区| 色综合久久久888| 国产脚交av在线一区二区| 91精品国产91久久| 国内精品400部情侣激情| 超碰97人人做人人爱少妇| 亚洲奶大毛多的老太婆| 国产午夜精品免费一区二区三区| 欧美午夜片在线免费观看| 色噜噜狠狠狠综合曰曰曰88av| 国产区亚洲区欧美区| 日韩精品电影网| 日本亚洲欧美三级| 精品人伦一区二区三区蜜桃网站| 亚洲有声小说3d| 狠狠色噜噜狠狠狠狠97| 国语对白做受69| 韩剧1988在线观看免费完整版| 97香蕉久久超级碰碰高清版| 久久精品视频网站| 成人亚洲欧美一区二区三区| 久久久影视精品| 欧美在线视频免费观看| 久久久999成人| 国产99久久精品一区二区 夜夜躁日日躁| 8x海外华人永久免费日韩内陆视频| 欧美专区福利在线| 精品久久久久久中文字幕一区奶水| 欧美成人激情视频| 91香蕉电影院| 亚洲人成五月天|