起因:因為公司遇到發稿問題,很多人喜歡用word編碼,然后再發布到網站上。PHP的包中雖然有部分可以使用的類庫,但是對于圖片始終處理不好,我就想到了python。研究了下,python將word轉為html還真是方便。但是,怎么結合到服務器上呢?我們的服務器是用PHP開發的。
1:python腳本
#!/usr/bin/python# -*- coding: UTF-8 -*-import sysfrom pydocx import PyDocXreload(sys)sys.setdefaultencoding('utf8')FileName = sys.argv[1] #獲取文件名參數ShortName = sys.argv[2] #獲取文件名參數html = PyDocX.to_html(FileName) # f = open("/www/wwwroot/micuer.com/pythoncode/runtime/99.txt", 'w') #服務器的全路徑# f.write(html)# f.close()print(html)
2:php處理腳本
public function uploadword(){ try { $file = request()->file("file"); // 上傳到本地服務器 $savename = \think\facade\Filesystem::disk('upload')->putFile( 'word', $file); $shotrname = time().".txt"; // 短名稱 $savename = "/www/wwwroot/micuer.com/data/upload/".$savename; //Request::domain(). $python_file_name = "/www/wwwroot/micuer.com/pythoncode/WordToHtml.py"; //組裝命令 $cmd = "python {$python_file_name} ".$savename." {$shotrname} 2>error.txt 2>&1"; $res = exec($cmd,$array, $ret); return json(["code"=>200,"msg"=>"成功","data"=>$savename,"cmd"=>$cmd,"array"=>$array]); } catch (think\exception\ValidateException $e) { return json(["code"=>40000,"msg"=>$e->getMessage()]); } }
上傳界面如下:
實現的功能就是利用PHP的exec函數,調用py腳本,將html代碼返回給前臺服務器。
返回數據如下
其實,再處理這個方案中,也遇到了很多問題,比如在命令行下只能成功,但是exec函數執行不成功等等。
參考了資料:https://my.oschina.net/u/4427610/blog/3155816
也就是
exec("python python_test.py 2>error.txt 2>&1", $array, $ret);
在bash中0,1,2三個數字分代表STDIN_FILENO、STDOUT_FILENO、STDERR_FILENO,即標準輸入(一般是鍵盤),標準輸出(一般是顯示屏,準確的說是用戶終端控制臺),標準錯誤(出錯信息輸出)。
也可以通過以下方式將標準錯誤重定向到標準輸出保存到$array中:
打印之后,發現是沒有權限調用。于是就直接改為輸出了,也就是 py的print(html)函數。
注意幾點:
1:執行權限問題
2:exec(“python python_test.py 2>error.txt 2>&1”, $array, $ret); 中 $array就接受到了 print(html)的值
3:各個腳本盡量使用全路徑
的
用PHP生成HTML文檔, 支持標簽嵌套縮進, 支持標簽自定義屬性
起因
這個東西確實也是心血來潮寫的, 本來打算是輸出HTML片段用的, 但后來就干脆寫成了一個可以輸出完整HTML的功能;
我很滿意里邊的實現縮進的機制, 大家有用到的可以看看
p.s. 現在都是真正的前后端分離了(vue, nodejs, webpack...), 這個東西喜歡就用, 不喜歡就算了~
支持的標簽
html, head, meta, title, body, input, select/option, form, table, div, 注釋, 以及 自定義標簽(成對出現的標簽), 還有一大堆屬性(在下邊有介紹)
實現
整體
1.每個標簽都對應一個類, 比如 標簽<html>, 對應了一個叫html的類
2.標簽中有用到的屬性, 我都放到了一個類中了, 并提供了方法去獲取賦了值的屬性
嵌套縮進
每個標簽我都設計了一個類, 比如 table 標簽, 就有一個叫table的類與之對應
每個類里邊一般都有以下3個重要成員:
1.本標簽的縮進值
2.輸出本標簽最終字符串的方法, out()
3.給本標簽添加子標簽的方發, append()
其中append()接收的是子標簽的對象, 在最終調用$html->out()的時候, 每個子標簽對象里的out()方法會被依次調用, 縮進值也會從上層類傳遞到最下層類并累加;
另外, 每個類都包含了屬性類(calss attribute ), 每個類的縮進值是從屬性類里繼承而來的, 所以如果修改了屬性類里的縮進量, 所有類的縮進量就跟著改變了
你也可以給標簽類添加一個自己的縮進值來覆蓋統一的縮進值
屬性
我這里的方案是定義一個類(calss attribute ), 里邊有
1.標簽可能擁有的屬性
2.對應的setXxx方法
3.組裝非空的屬性拼成字符串的方法
4.為了不影響下次顯示, 會有專門的清空方法, 把之前賦值的屬性都清空
這樣的話, 在定義標簽屬性的時候, 需要的就賦上值, 不需要的不賦值就不會在最終的HTML代碼中顯示出來
源碼地址: 傳到碼云了,看其中的test.php文件,是介紹他的用法。
以上就是用php生成HTML文件的類的詳細內容,更多請關注其它相關文章!
更多技巧請《轉發 + 關注》哦!
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的詳細內容,更多請關注其它相關文章!
更多技巧請《轉發 + 關注》哦!
*請認真填寫需求信息,我們會在24小時內與您取得聯系。