khtmltopdf是一個非常有用的應用程序,用于從html(網頁)創建pdf。本篇文章將介紹關于如何使用php腳本和Linux命令行工具創建網頁的pdf。
步驟1:在Linux中安裝wkhtmltopdf
從google code下載wkhtmltopdf并安裝到Linux系統。
# cd /opt
# wget https://wkhtmltopdf.googlecode.com/files/wkhtmltopdf-0.9.9-static-i386.tar.bz2
# tar xjf wkhtmltopdf-0.9.9-static-i386.tar.bz2
# mv wkhtmltopdf-i386 /usr/bin/wkhtmltopdf
# chown apache:apache /usr/bin/wkhtmltopdf
# chmod +x /usr/bin/wkhtmltopdf
步驟2:使用命令行創建PDF
首先檢查wkhtmltopdf腳本,它在命令行中正常工作。下面的命令將創建http://google.com網頁的pdf。
# /usr/bin/wkhtmltopdf http://google.com google.pdf
步驟3:使用wkhtmltopdf創建pdf的php代碼
使用下面的PHP代碼塊從HTML(網頁)生成PDF。此腳本需要為Apache啟用shell_exec函數。大多數共享主機不允許此函數。
使用下面的代碼創建一個文件名getpdf.php,并將其放到網站文檔根目錄中。
<?php
$url=$_GET['url']; // Website URL to Create pdf
$name=$_GET['pdf']; // Output pdf name
$command="/usr/bin/wkhtmltopdf ";
$pdf_dir="/var/www/html/pdfs/"; // Pdf files will be saved here
$ex_cmd="$command $url " . $pdf_dir . $name;
$output=shell_exec($ex_cmd);
?>
打開以下網址生成網站的pdf(html)。
語法:http:
//youdomain.com/getPdf.php?url=<website url>&pdf=<pdf name>
示例:
https : //tecadmin.net/getPdf.php?url=http : //google.com&pdf=google.pdf
本篇文章到這里就已經全部結束了,更多其他精彩內容可以關注的Linux視頻教程欄目!
以上就是使用Qtwebkit和PHP將HTML轉換為PDF的詳細內容,更多請關注其它相關文章!
更多技巧請《轉發 + 關注》哦!
本人寫Qt程序這么多年,比較喜歡支持多個Qt版本,尤其是鐘情于支持任意Qt版本+任意系統+任意編譯器,這句話說起來簡單其實實現起來就不容易了,首先你得有個很多版本的測試環境,起碼十幾個Qt環境要的吧,四五種操作系統要的吧,還要安裝各種VS版本免不了的,畢竟win上除了默認的mingw編譯器還有很多人用的是msvc編譯器,這么一大堆環境折騰下來,沒有個1T硬盤是不夠的,而且官網發布Qt版本的速度相當快,最慢半年肯定來一個版本,又得測試了,每次發布一個大的版本,除了常用的windows以外,linux要測試吧,而且現在還多出來一些國產linux系統比如deepin new start UOS之類的,也要試試吧,哎呀好累。
下面是部分代碼:
//公用初始化瀏覽器控件配置
void WebHelper::initWebSetting()
{
//全局配置只需要設置一次就行
static bool isInit=false;
if (!isInit) {
isInit=true;
#ifdef webkit
QWebSettings *webSetting=QWebSettings::globalSettings();
webSetting->setAttribute(QWebSettings::JavascriptEnabled, true);
webSetting->setAttribute(QWebSettings::PluginsEnabled, true);
webSetting->setAttribute(QWebSettings::JavascriptCanOpenWindows, true);
#elif webengine
QWebEngineSettings *webSetting=QWebEngineSettings::globalSettings();
webSetting->setAttribute(QWebEngineSettings::JavascriptEnabled, true);
webSetting->setAttribute(QWebEngineSettings::PluginsEnabled, true);
webSetting->setAttribute(QWebEngineSettings::JavascriptCanOpenWindows, true);
#endif
}
}
//通用瀏覽器組件加載
void frmMapBoundary::loadMap(bool tool)
{
QString content;
QString fileName=QString("%1/map_web.html").arg(AppPath);
QString url="file:///" + fileName;
baidu->reset();
baidu->setMapZoom(10);
baidu->setShowOverlayTool(tool);
//設置默認的中心點坐標,建議采用中心點坐標的方式
baidu->setMapCenterPoint("121.414,31.1828");
//如果采用加載內容方式則需要先設置不存儲文件
//ie內核以及在linux上需要用load的方式加載
//發現 Qt5.5 webkit 也需要用文件加載
#ifdef savehtmlfile
baidu->setSaveFile(true);
#else
baidu->setSaveFile(false);
#endif
baidu->setFileName(fileName);
content=baidu->newMap();
//下面為兩種方式加載網頁,如果內容為空則加載網頁文件否則加載內容
//一般為了保密建議加載內容,這樣看不到生成的網頁文件
//可能在linux上的webkit內核需要用load的方式加載
if (baidu->getSaveFile()) {
#if (defined webkit) || (defined webengine)
webView->load(QUrl(url));
#elif webie
webView->dynamicCall("Navigate(const QString&)", url);
#endif
} else {
QUrl baseUrl(QString("%1/").arg(AppPath));
#if (defined webkit) || (defined webengine)
webView->setHtml(content, baseUrl);
#endif
}
}
//通用數據交互類
//需要自定義繼承自QObject的類來接收QWebEngineView交互數據,不然會打印很多煩人的信息
class WebJsData : public QObject
{
Q_OBJECT
public:
static WebJsData *Instance();
explicit WebJsData(QObject *parent=0);
public slots:
//定義兩個參數,這樣就涵蓋了所有的情況 type表示類型相當于唯一標識
void receiveData(const QString &type, const QVariant &data);
signals:
void receiveDataFromJs(const QString &type, const QVariant &data);
};
WebJsData *WebJsData::Instance()
{
static WebJsData self;
return &self;
}
WebJsData::WebJsData(QObject *parent)
{
}
void WebJsData::receiveData(const QString &type, const QVariant &data)
{
//可以在這里重新梳理好再發出去信號
emit receiveDataFromJs(type, data);
}
1. 同時支持在線地圖和離線地圖兩種模式。
2. 同時支持webkit內核、webengine內核、IE內核。
3. 支持設置多個標注點,信息包括名稱、地址、經緯度。
4. 可設置地圖是否可單擊、拖動、鼠標滾輪縮放。
5. 可設置協議版本、秘鑰、主題樣式、中心坐標、中心城市、地理編碼位置等。
6. 可設置地圖縮放比例和級別,縮略圖、比例尺、路況信息等控件的可見。
7. 支持地圖交互,比如鼠標按下獲取對應位置的經緯度。
8. 支持查詢路線,可設置起點位置、終點位置、路線模式、路線方式、路線方案(最少時間、最少換乘、最少步行、不乘地鐵、最短距離、避開高速)。
9. 可顯示點線面工具,可直接在地圖上劃線、點、矩形、圓形等。
10. 可設置行政區劃,指定某個城市區域繪制圖層,在線地圖自動輸出行政區劃邊界點集合到js文件給離線地圖使用。
11. 可靜態或者動態添加多個覆蓋物。支持點、折線、多邊形、矩形、圓形、弧線、點聚合等。
12. 函數接口友好和統一,使用簡單方便,就一個類。
13. 支持js動態交互添加點、刪除點、清空點、重置點,不需要刷新頁面。
14. 支持任意Qt版本、任意系統、任意編譯器。
國內站點:[https://gitee.com/feiyangqingyun](https://gitee.com/feiyangqingyun)
國際站點:[https://github.com/feiyangqingyun](https://github.com/feiyangqingyun)
跨平臺著實花了不少的精力,為了從Qt4.7兼容到Qt6.2及后續版本,頭發掉了不少,僅有的幾根毛所剩無幾,哎,可能這就是程序員的命,本人寫Qt程序這么多年,比較喜歡支持多個Qt版本,尤其是鐘情于支持任意Qt版本+任意系統+任意編譯器,這句話說起來簡單其實實現起來就不容易了,首先你得有個很多版本的測試環境,起碼十幾個Qt環境要的吧,四五種操作系統要的吧,還要安裝各種VS版本免不了的,畢竟win上除了默認的mingw編譯器還有很多人用的是msvc編譯器,這么一大堆環境折騰下來,沒有個1T硬盤是不夠的,而且官網發布Qt版本的速度相當快,最慢半年肯定來一個版本,又得測試了,每次發布一個大的版本,除了常用的windows以外,linux要測試吧,而且現在還多出來一些國產linux系統比如deepin new start UOS之類的,也要試試吧,哎呀好累。
### 1 省市區域地圖封裝類功能特點
1. 同時支持閃爍點圖、遷徙圖、區域地圖、世界地圖、儀表盤等。
2. 可以設置標題、提示信息、背景顏色、文字顏色、線條顏色、區域顏色等各種顏色。
3. 可設置城市的名稱、值、經緯度 集合。
4. 可設置地圖的放大倍數、是否允許鼠標滾輪縮放。
5. 內置世界地圖、全國地圖、省份地圖、地區地圖,可以精確到縣,所有地圖全部離線使用。
6. 內置了各省市json數據文件轉js文件功能,如有數據更新自行轉換即可,支持單個文件轉換和一鍵轉換所有文件。
7. 內置了從json文件或者js文件獲取該區域的所有名稱和經緯度信息集合的功能,可以通過該方法獲取到信息用來顯示。
8. 依賴瀏覽器組件顯示地圖,提供的demo支持webkit/webengine/miniblink/ie 多種方式加載網頁。
9. 采用miniblink瀏覽器內核打通了Qt5.6及后續版本+mingw編譯器缺少瀏覽器模塊的遺憾,使得整個項目支持所有Qt版本,親測4.7到6.2等任意版本。
10. 閃爍點遷徙圖等設置的點支持單獨設置顏色。
11. 提供接口直接獲取點擊的點相關信息,方便程序聯動處理。
12. 拓展性極強,可以依葫蘆畫瓢自行增加各種精美的echarts組件,做出牛逼的效果。
13. 內置的儀表盤組件提供交互功能,demo演示中包含了對應的代碼。
14. 函數接口友好和統一,使用簡單方便,就一個類。
15. 支持任意Qt版本、任意系統、任意編譯器。
### 2 百度地圖封裝類功能特點
1. 同時支持在線地圖和離線地圖兩種模式。
2. 同時支持webkit內核、webengine內核、miniblink內核、IE內核。
3. 支持設置多個標注點,信息包括名稱、地址、經緯度。
4. 可設置地圖是否可單擊、拖動、鼠標滾輪縮放。
5. 可設置協議版本、秘鑰、主題樣式、中心坐標、中心城市、地理編碼位置等。
6. 可設置地圖縮放比例和級別,縮略圖、比例尺、路況信息等控件的可見。
7. 支持地圖交互,比如鼠標按下獲取對應位置的經緯度。
8. 支持查詢路線,可設置起點位置、終點位置、路線模式、路線方式、路線方案(最少時間、最少換乘、最少步行、不乘地鐵、最短距離、避開高速)。
9. 可顯示點線面工具,可直接在地圖上劃線、點、矩形、圓形等。
10. 可設置行政區劃,指定某個城市區域繪制圖層,在線地圖自動輸出行政區劃邊界點集合到js文件給離線地圖使用。
11. 可靜態或者動態添加多個覆蓋物。支持點、折線、多邊形、矩形、圓形、弧線、點聚合等。
12. 提供函數接口處理經緯度解析成地址和地址解析成經緯度坐標。
13. 提供的demo直接可以單獨選點執行對應的處理比如路線查詢。
14. 可以拿到路線查詢到的點坐標信息集合,比如用于機器人坐標導航等。
15. 封裝了豐富的函數比如刪除指定點和所有點,刪除指定覆蓋物和所有覆蓋物等。
16. 標注點彈框信息可以自定義內容,標準html格式。
17. 標注點單擊事件可選 0-不處理 1-自己彈框 2-發送信號。
18. 標注點可設置動畫效果 0-不處理 1-跳動 2-墜落
19. 標注點可設置本地圖片文件等。
20. 函數接口友好和統一,使用簡單方便,就一個類。
21. 支持js動態交互添加點、刪除點、清空點、重置點,不需要刷新頁面。
22. 支持任意Qt版本、任意系統、任意編譯器。
### 3 離線地圖下載類功能特點
1. 多線程同步下載多級別瓦片地圖,不卡界面。
2. 內置多個離線地圖下載請求地址,自動隨機選擇一個發送請求。
3. 下載地圖類型同時支持街道圖和衛星圖。
4. 自動計算可視區域或者行政區域的下載瓦片數量。
5. 下載的級別可以自定義范圍和選擇。
6. 每個瓦片下載完成都發送信號通知,參數包括下載用時。
7. 可設置下載最大超時時間,超過了則丟棄跳到下一個下載任務。
8. 實時顯示下載進度,以及當前級別已經下載的瓦片數和總瓦片數。
9. 下載過程中可以停止下載,下載完成自動統計總用時。
10. 內置經緯度和屏幕坐標互相轉換函數。
11. 目前支持百度地圖,其他地圖比如谷歌地圖、騰訊地圖、高德地圖可以定制。
12. 函數接口友好和統一,使用簡單方便,就一個類。
13. 支持任意Qt版本、任意系統、任意編譯器。
### 4 省市輪廓下載類功能特點
1. 定時器排隊下載省市輪廓圖點坐標集合存儲到JS文件。
2. 支持一個行政區域多個不規則區域下載。
3. 自動計算行政區域的下載輪廓數量。
4. 可精確選擇省份、市區、縣城,也可直接輸入行政區域的名稱。
5. 可以設置下載間隔、隨時開始下載和停止下載。
6. 提供編輯邊界功能,可以直接在地圖上編輯好不規則區域的點集合,然后獲取邊界點集合數據,這個可以用來自己繪制區域拿到數據,比如某個鄉鎮甚至某個小區的行政區域數據,很牛逼。
1. 體驗地址:[https://pan.baidu.com/s/1ZxG-oyUKe286LPMPxOrO2A](https://pan.baidu.com/s/1ZxG-oyUKe286LPMPxOrO2A) 提取碼:o05q 文件名:bin_map.zip
2. 國內站點:[https://gitee.com/feiyangqingyun](https://gitee.com/feiyangqingyun)
3. 國際站點:[https://github.com/feiyangqingyun](https://github.com/feiyangqingyun)
4. 個人主頁:[https://blog.csdn.net/feiyangqingyun](https://blog.csdn.net/feiyangqingyun)
5. 知乎主頁:[https://www.zhihu.com/people/feiyangqingyun/](https://www.zhihu.com/people/feiyangqingyun/)
*請認真填寫需求信息,我們會在24小時內與您取得聯系。