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íng)銷服務(wù)商

          電腦端+手機(jī)端+微信端=數(shù)據(jù)同步管理

          免費(fèi)咨詢熱線:

          PHP轉(zhuǎn)換HTML為PDF文檔的方法和常見(jiàn)問(wèn)題

          司的某項(xiàng)業(yè)務(wù)需要與用戶線上簽訂協(xié)議,即用戶在線手寫一個(gè)簽名,后臺(tái)將公司公章信息和用戶的簽名以及合同信息生成一份PDF文件,供用戶查看和下載。



          比對(duì)了一些插件,我們最終決定使用dompdf這個(gè)插件,插件的github在這里:https://github.com/dompdf/dompdf。

          1. 使用方法

          • 安裝可以使用composer或者直接下載源代碼,使用require或者include引入。
          • 具體的使用方式,可以參考以下示例代碼。
          // 引入命名空間
          use Dompdf\Dompdf;
          // 初始化dompdf對(duì)象
          $dompdf = new Dompdf();
          // 加載html文檔內(nèi)容
          $dompdf->loadHtml('hello world');
          // 設(shè)置紙張類型和方向
          $dompdf->setPaper('A4', 'landscape');
          // 渲染HTML為PDF
          $dompdf->render();
          // 流輸出
          $dompdf->stream();
          

          2. 常見(jiàn)問(wèn)題和解決辦法

          2.1 中文亂碼的問(wèn)題

          插件對(duì)于字體和編碼問(wèn)題是這樣形容的:

          PDF documents internally support the following fonts: Helvetica, Times-Roman, Courier, Zapf-Dingbats, & Symbol. These fonts only support Windows ANSI encoding. In order for a PDF to display characters that are not available in Windows ANSI, you must supply an external font. Dompdf will embed any referenced font in the PDF so long as it has been pre-loaded or is accessible to dompdf and reference in CSS @font-face rules. See the font overview for more information on how to use fonts.The DejaVu TrueType fonts have been pre-installed to give dompdf decent Unicode character coverage by default. To use the DejaVu fonts reference the font in your stylesheet, e.g. body { font-family: DejaVu Sans; } (for DejaVu Sans). The following DejaVu 2.34 fonts are available: DejaVu Sans, DejaVu Serif, and DejaVu Sans Mono.

          嘗試了一下,默認(rèn)帶的字體是無(wú)法渲染中文的,使用CSS的@font-face引入會(huì)報(bào)錯(cuò)(也可能是我打開(kāi)方式不對(duì))。這樣就只好自己引入一個(gè)字體了。

          插件給了一個(gè)安裝語(yǔ)言文件的工具,地址再這里:https://github.com/dompdf/utils。

          使用步驟:

          • 下載或者復(fù)制load_font.php文件,放到dompdf文件夾內(nèi),與src和test文件夾同級(jí)
          • 修改load_font.php文件中引入的autoload.php為項(xiàng)目實(shí)際的位置
          • 在命令行中執(zhí)行php load_font.php simkai /path/to/simkai.ttf

          這樣,我們就可以在html文檔的css中使用font-family屬性來(lái)指定字體了。

          html {
           font-family: simkai;
          }
          

          2.2 圖片無(wú)法展示

          插件應(yīng)該是無(wú)法直接顯示網(wǎng)絡(luò)圖片,所以需要將圖片轉(zhuǎn)換為BASE64格式才能顯示。

          將HTML文檔中的所有圖片轉(zhuǎn)換為BASE64的方式:

          function imgToBase64($html) {
           $html = preg_replace_callback('/<img(?:.*?)src="(.*?)"(?:.*?)\/?>/', function($matches) {
           $imageInfo = getimagesize($matches[1]);
           $base64 = "" . chunk_split(base64_encode(file_get_contents($matches[1])));
           $base64_image = 'data:' . $imageInfo['mime'] . ';base64,' . $base64;
           return str_replace($matches[1], $base64_image, $matches[0]);
           }, $html);
           return $html;
          }
          

          這樣轉(zhuǎn)換其實(shí)性能影響挺大的,感覺(jué)性能不太好可以加一下緩存。

          khtmltopdf是一個(gè)非常有用的應(yīng)用程序,用于從html(網(wǎng)頁(yè))創(chuàng)建pdf。本篇文章將介紹關(guān)于如何使用php腳本和Linux命令行工具創(chuàng)建網(wǎng)頁(yè)的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)頁(yè)的pdf。

          # /usr/bin/wkhtmltopdf http://google.com google.pdf

          步驟3:使用wkhtmltopdf創(chuàng)建pdf的php代碼

          使用下面的PHP代碼塊從HTML(網(wǎng)頁(yè))生成PDF。此腳本需要為Apache啟用shell_exec函數(shù)。大多數(shù)共享主機(jī)不允許此函數(shù)。

          使用下面的代碼創(chuàng)建一個(gè)文件名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);

          ?>

          打開(kāi)以下網(wǎng)址生成網(wǎng)站的pdf(html)。

          語(yǔ)法: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)容,更多請(qǐng)關(guān)注其它相關(guān)文章!

          更多技巧請(qǐng)《轉(zhuǎn)發(fā) + 關(guān)注》哦!

          詳細(xì)]php調(diào)用python腳本,將word轉(zhuǎn)為html代碼及調(diào)用失敗處理

          起因:因?yàn)楣居龅桨l(fā)稿問(wèn)題,很多人喜歡用word編碼,然后再發(fā)布到網(wǎng)站上。PHP的包中雖然有部分可以使用的類庫(kù),但是對(duì)于圖片始終處理不好,我就想到了python。研究了下,python將word轉(zhuǎn)為html還真是方便。但是,怎么結(jié)合到服務(wù)器上呢?我們的服務(wù)器是用PHP開(kāi)發(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代碼返回給前臺(tái)服務(wù)器。

          返回?cái)?shù)據(jù)如下

          其實(shí),再處理這個(gè)方案中,也遇到了很多問(wèn)題,比如在命令行下只能成功,但是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三個(gè)數(shù)字分代表STDIN_FILENO、STDOUT_FILENO、STDERR_FILENO,即標(biāo)準(zhǔn)輸入(一般是鍵盤),標(biāo)準(zhǔn)輸出(一般是顯示屏,準(zhǔn)確的說(shuō)是用戶終端控制臺(tái)),標(biāo)準(zhǔn)錯(cuò)誤(出錯(cuò)信息輸出)。
          也可以通過(guò)以下方式將標(biāo)準(zhǔn)錯(cuò)誤重定向到標(biāo)準(zhǔn)輸出保存到$array中:
          打印之后,發(fā)現(xiàn)是沒(méi)有權(quán)限調(diào)用。于是就直接改為輸出了,也就是 py的print(html)函數(shù)。

          注意幾點(diǎn):
          1:執(zhí)行權(quán)限問(wèn)題
          2:exec(“python python_test.py 2>error.txt 2>&1”, $array, $ret); 中 $array就接受到了 print(html)的值
          3:各個(gè)腳本盡量使用全路徑


          主站蜘蛛池模板: 精品一区二区三区电影| 亚洲成a人一区二区三区| 无码中文字幕乱码一区| 亚洲变态另类一区二区三区| 国产一区二区草草影院| 国产成人一区二区精品非洲| 国产精品亚洲一区二区无码| 精品国产毛片一区二区无码| 国产在线一区二区综合免费视频| 亚洲乱码一区二区三区在线观看| 亚洲AV福利天堂一区二区三| 中文乱码人妻系列一区二区 | 亚洲日韩激情无码一区 | 在线观看国产一区二区三区| 无码8090精品久久一区| 熟女精品视频一区二区三区| 国产精品久久无码一区二区三区网| 视频一区视频二区制服丝袜| 国产亚洲3p无码一区二区| 在线播放偷拍一区精品| 亚洲一区二区三区无码影院| 免费无码VA一区二区三区| 又紧又大又爽精品一区二区| 国产精品区一区二区三在线播放| 中文字幕日韩精品一区二区三区| 无码8090精品久久一区| 99在线精品一区二区三区| 国产成人精品一区在线| 97人妻无码一区二区精品免费| 爆乳熟妇一区二区三区霸乳| 国产精品一区二区久久| 一区在线观看视频| 亚洲欧美国产国产一区二区三区 | 无码日韩AV一区二区三区| 国产精品 一区 在线| 糖心vlog精品一区二区三区| 真实国产乱子伦精品一区二区三区| 亚洲爆乳精品无码一区二区| 久久婷婷色一区二区三区| 一区二区三区四区精品| 国产精品美女一区二区三区|