需求要生成動態生成電子文件以及后面簽字,但是又要在小程序里預覽效果。
spose.Words for Java是一個強大的文檔處理庫,可以幫助你使用HTML生成Word文檔。以下是一個簡單的示例代碼,演示了如何使用Aspose.Words實現這一功能:
import com.aspose.words.*;
public class HtmlToWord {
public static void main(String[] args) {
// 創建一個空的Word文檔
Document doc = new Document();
// HTML內容
String htmlContent = "<html><body><h1>Hello, World!</h1><p>This is an example of generating a Word document from HTML using Aspose.Words.</p></body></html>";
// 使用DocumentBuilder將HTML插入到Word文檔中
DocumentBuilder builder = new DocumentBuilder(doc);
builder.insertHtml(htmlContent);
// 保存為Word文檔
try {
doc.save("HtmlToWord.docx", SaveFormat.DOCX);
System.out.println("Word文檔已生成。");
} catch (Exception e) {
System.out.println("生成Word文檔時出現錯誤:" + e.getMessage());
}
}
}
在上面的代碼中,我們首先創建一個空的Word文檔對象。然后,我們定義了HTML內容并使用 DocumentBuilder 將HTML插入到Word文檔中。最后,我們保存生成的Word文檔為docx格式。
起因:因為公司遇到發稿問題,很多人喜歡用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:各個腳本盡量使用全路徑
*請認真填寫需求信息,我們會在24小時內與您取得聯系。