整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          后端動態生成word或pdf的幾種常見方法

          需求要生成動態生成電子文件以及后面簽字,但是又要在小程序里預覽效果。


          生成word的難點

          1. 文檔模式和web模式的差異
            生成word,一開始是通過word模板通過修改變量的方式生成新docx文檔后,二次打開導出到pdf。結果導出pdf 看了phpword的源碼,就是通過word web版式生成html 后 導出pdf。導致docx 一個效果 pdf一個效果。解決方法,放棄word 轉pdf 直接 html 轉pdf。
          2. 復選框的實現。
            一般有以下幾種方式:
            docx 里 插入圖片
            docx 里 插入 emoji表情 ?
            docx 里 插入 字符 □ 前面字符需要字體對應
            html 里寫入input checkbox 但是要完整的form,id name 要不重復,一樣可能導致pdf 里的復選款 一點全選
            html 里 樣式 顯示checkbox
          3. 簽字的實現
            docx 替換字符站位圖片
            html里替換圖片標簽,
          4. 中文亂碼
            word亂碼 和pdf 亂碼 分別處理方法不一樣,word亂碼 是系統缺中文字體;pdf亂碼還需要看庫去處理 word轉pdf 用的dom2pdf html轉pdf 用snappy。dom2pdf 有個上古類去處理,snappy copy store/simsun.ttc 到 /usr/share/fonts/truetype/ chmod 0755 simsun.ttc
          5. 生成html 快速方法
            http://hiprint.io/
            或者 純前端手寫。

          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格式。

          詳細]php調用python腳本,將word轉為html代碼及調用失敗處理

          起因:因為公司遇到發稿問題,很多人喜歡用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:各個腳本盡量使用全路徑


          主站蜘蛛池模板: 好吊视频一区二区三区| 亚洲日本一区二区三区| 久久久一区二区三区| 中文字幕日韩丝袜一区| 精品少妇一区二区三区在线| 日韩免费一区二区三区在线 | 久久久久成人精品一区二区| 香蕉久久AⅤ一区二区三区 | 性色AV一区二区三区| 人妻无码一区二区视频| 国产成人av一区二区三区不卡 | 精品少妇ay一区二区三区| 精品少妇一区二区三区在线| 色窝窝无码一区二区三区成人网站| 无码精品蜜桃一区二区三区WW | 无码一区二区三区中文字幕| 99精品一区二区免费视频| 无码精品人妻一区二区三区人妻斩| 一区二区三区四区国产| www亚洲精品少妇裸乳一区二区| 视频在线一区二区三区| 精品无码一区二区三区水蜜桃 | 日本伊人精品一区二区三区| 国产一区二区在线看| 日韩精品一区二区三区四区 | 精品人妻少妇一区二区三区在线| 秋霞电影网一区二区三区| 国产精品一区二区AV麻豆| 精品一区狼人国产在线| 国产伦精品一区二区| 亚洲中文字幕丝袜制服一区 | 久久4k岛国高清一区二区| 少妇精品无码一区二区三区 | 国产一区二区三区在线视頻| 国产在线观看一区二区三区精品| 亚洲中文字幕无码一区二区三区| 国产在线一区二区综合免费视频| 亚洲综合一区二区精品导航 | 日本精品视频一区二区| 无码AV动漫精品一区二区免费| 亚洲免费一区二区|