Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537
起因:因?yàn)楣居龅桨l(fā)稿問題,很多人喜歡用word編碼,然后再發(fā)布到網(wǎng)站上。PHP的包中雖然有部分可以使用的類庫,但是對于圖片始終處理不好,我就想到了python。研究了下,python將word轉(zhuǎn)為html還真是方便。但是,怎么結(jié)合到服務(wù)器上呢?我們的服務(wù)器是用PHP開發(fā)的。
1:python腳本
#!/usr/bin/python# -*- coding: UTF-8 -*-import sysfrom pydocx import PyDocXreload(sys)sys.setdefaultencoding('utf8')FileName = sys.argv[1] #獲取文件名參數(shù)ShortName = sys.argv[2] #獲取文件名參數(shù)html = PyDocX.to_html(FileName) # f = open("/www/wwwroot/micuer.com/pythoncode/runtime/99.txt", 'w') #服務(wù)器的全路徑# f.write(html)# f.close()print(html)
2:php處理腳本
public function uploadword(){ try { $file = request()->file("file"); // 上傳到本地服務(wù)器 $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()]); } }
上傳界面如下:
實(shí)現(xiàn)的功能就是利用PHP的exec函數(shù),調(diào)用py腳本,將html代碼返回給前臺服務(wù)器。
返回?cái)?shù)據(jù)如下
其實(shí),再處理這個方案中,也遇到了很多問題,比如在命令行下只能成功,但是exec函數(shù)執(zhí)行不成功等等。
參考了資料:https://my.oschina.net/u/4427610/blog/3155816
也就是
exec("python python_test.py 2>error.txt 2>&1", $array, $ret);
在bash中0,1,2三個數(shù)字分代表STDIN_FILENO、STDOUT_FILENO、STDERR_FILENO,即標(biāo)準(zhǔn)輸入(一般是鍵盤),標(biāo)準(zhǔn)輸出(一般是顯示屏,準(zhǔn)確的說是用戶終端控制臺),標(biāo)準(zhǔn)錯誤(出錯信息輸出)。
也可以通過以下方式將標(biāo)準(zhǔn)錯誤重定向到標(biāo)準(zhǔn)輸出保存到$array中:
打印之后,發(fā)現(xiàn)是沒有權(quán)限調(diào)用。于是就直接改為輸出了,也就是 py的print(html)函數(shù)。
注意幾點(diǎn):
1:執(zhí)行權(quán)限問題
2:exec(“python python_test.py 2>error.txt 2>&1”, $array, $ret); 中 $array就接受到了 print(html)的值
3:各個腳本盡量使用全路徑
的
用PHP生成HTML文檔, 支持標(biāo)簽嵌套縮進(jìn), 支持標(biāo)簽自定義屬性
起因
這個東西確實(shí)也是心血來潮寫的, 本來打算是輸出HTML片段用的, 但后來就干脆寫成了一個可以輸出完整HTML的功能;
我很滿意里邊的實(shí)現(xiàn)縮進(jìn)的機(jī)制, 大家有用到的可以看看
p.s. 現(xiàn)在都是真正的前后端分離了(vue, nodejs, webpack...), 這個東西喜歡就用, 不喜歡就算了~
支持的標(biāo)簽
html, head, meta, title, body, input, select/option, form, table, div, 注釋, 以及 自定義標(biāo)簽(成對出現(xiàn)的標(biāo)簽), 還有一大堆屬性(在下邊有介紹)
實(shí)現(xiàn)
整體
1.每個標(biāo)簽都對應(yīng)一個類, 比如 標(biāo)簽<html>, 對應(yīng)了一個叫html的類
2.標(biāo)簽中有用到的屬性, 我都放到了一個類中了, 并提供了方法去獲取賦了值的屬性
嵌套縮進(jìn)
每個標(biāo)簽我都設(shè)計(jì)了一個類, 比如 table 標(biāo)簽, 就有一個叫table的類與之對應(yīng)
每個類里邊一般都有以下3個重要成員:
1.本標(biāo)簽的縮進(jìn)值
2.輸出本標(biāo)簽最終字符串的方法, out()
3.給本標(biāo)簽添加子標(biāo)簽的方發(fā), append()
其中append()接收的是子標(biāo)簽的對象, 在最終調(diào)用$html->out()的時(shí)候, 每個子標(biāo)簽對象里的out()方法會被依次調(diào)用, 縮進(jìn)值也會從上層類傳遞到最下層類并累加;
另外, 每個類都包含了屬性類(calss attribute ), 每個類的縮進(jìn)值是從屬性類里繼承而來的, 所以如果修改了屬性類里的縮進(jìn)量, 所有類的縮進(jìn)量就跟著改變了
你也可以給標(biāo)簽類添加一個自己的縮進(jìn)值來覆蓋統(tǒng)一的縮進(jìn)值
屬性
我這里的方案是定義一個類(calss attribute ), 里邊有
1.標(biāo)簽可能擁有的屬性
2.對應(yīng)的setXxx方法
3.組裝非空的屬性拼成字符串的方法
4.為了不影響下次顯示, 會有專門的清空方法, 把之前賦值的屬性都清空
這樣的話, 在定義標(biāo)簽屬性的時(shí)候, 需要的就賦上值, 不需要的不賦值就不會在最終的HTML代碼中顯示出來
源碼地址: 傳到碼云了,看其中的test.php文件,是介紹他的用法。
以上就是用php生成HTML文件的類的詳細(xì)內(nèi)容,更多請關(guān)注其它相關(guān)文章!
更多技巧請《轉(zhuǎn)發(fā) + 關(guān)注》哦!
khtmltopdf是一個非常有用的應(yīng)用程序,用于從html(網(wǎng)頁)創(chuàng)建pdf。本篇文章將介紹關(guān)于如何使用php腳本和Linux命令行工具創(chuàng)建網(wǎng)頁的pdf。
步驟1:在Linux中安裝wkhtmltopdf
從google code下載wkhtmltopdf并安裝到Linux系統(tǒng)。
# 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:使用命令行創(chuàng)建PDF
首先檢查wkhtmltopdf腳本,它在命令行中正常工作。下面的命令將創(chuàng)建http://google.com網(wǎng)頁的pdf。
# /usr/bin/wkhtmltopdf http://google.com google.pdf
步驟3:使用wkhtmltopdf創(chuàng)建pdf的php代碼
使用下面的PHP代碼塊從HTML(網(wǎng)頁)生成PDF。此腳本需要為Apache啟用shell_exec函數(shù)。大多數(shù)共享主機(jī)不允許此函數(shù)。
使用下面的代碼創(chuàng)建一個文件名getpdf.php,并將其放到網(wǎng)站文檔根目錄中。
<?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);
?>
打開以下網(wǎng)址生成網(wǎng)站的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
本篇文章到這里就已經(jīng)全部結(jié)束了,更多其他精彩內(nèi)容可以關(guān)注的Linux視頻教程欄目!
以上就是使用Qtwebkit和PHP將HTML轉(zhuǎn)換為PDF的詳細(xì)內(nèi)容,更多請關(guān)注其它相關(guān)文章!
更多技巧請《轉(zhuǎn)發(fā) + 關(guān)注》哦!
*請認(rèn)真填寫需求信息,我們會在24小時(shí)內(nèi)與您取得聯(lián)系。