Docker微服務之Html轉Pdf,Html轉Image
Html轉Pdf(Image)的方案應該很多,這裡介紹的是docker的一個微服務的方式,利用了工具wkhtmltopdf。
一、Docker微服務
Docker微服務首先是一種服務,暴露一個介面給使用者(一個application),使用者通過埠請求並獲得服務。
- 首先,建立一個映象,一般是自建Dockerfile,用
docker build -t serverImageName -f Dockerfile .
或者使用他人的映象docker pull serverImageName
。 - 其次,執行一個容器作為服務,常用
docker run -d --name serverContainerName -p hostPort:DockerPort serverImageName:version
(':version'可以省略,預設是latest版本)。 - 呼叫
- 應用容器,
docker run --link serverContainerName:alias applicationImageName
.容器的資料通訊通過引數--link解決。 - PHP程式呼叫:get('alias:hostPort'),可以用php-curl-class等。
- 其他呼叫,比如瀏覽器呼叫nginx(httpd)。
- 應用容器,
推薦閱讀: 搭建LNMP環境,加深對docker的瞭解.(在本教程中,mysql就是一個微服務供php7通過引數link的當時呼叫,php7是個微服務被nginx通過引數link呼叫,nginx是個微服務,被瀏覽器呼叫)
我一直覺得最好的教程還是官方教程,不懂的用有道等翻譯,英語慢慢學。
二、工具wkhtmltopdf、wkhtmltoimage
介紹
wkhtmltopdf and wkhtmltoimage are open source (LGPLv3) command line tools to render HTML into PDF and various image formats using the Qt WebKit rendering engine. These run entirely "headless" and do not require a display or display service.
linux上的安裝
cd /tmp
wget https://github.com/wkhtmltopdf/wkhtmltopdf/releases/download/0.12.4/wkhtmltox-0.12.4_linux-generic-amd64.tar.xz
tar xf wkhtmltox-0.12.4_linux-generic-amd64.tar.xz && rm wkhtmltox-0.12.4_linux-generic-amd64.tar.xz
ln -s -T /tmp/wkhtmltox/bin/wkhtmltopdf /usr/local/bin/wkhtmltopdf && \
chmod a+x /usr/local/bin/wkhtmltopdf && \
ln -s -T /tmp/wkhtmltox/bin/wkhtmltoimage /usr/local/bin/wkhtmltoimage && \
chmod a+x /usr/local/bin/wkhtmltoimage
使用
wkhtmltopdf http://google.com google.pdf
or wkhtmltopdf /tmp/google.html google.local.pdf
可選項options
wkhtmltopdf --lowquality --quiet --load-error-handling ignore --load-media-error-handling ignore http://google.com google.pdf
更多參看:https://wkhtmltopdf.org/usage/wkhtmltopdf.txt 或者wkhtmltoimage -h
三、PHP包php-htmltopdf-htmltoimage
將wkhtmltopdf封裝成一個PHP包,github地址:https://github.com/biaoqianwo/php-htmltopdf-htmltoimage
四、docker微服務完整例項
簡單實現一個(無須第三方框架的):
POST http://html2pdf-serve/index.php
輸入:html(string),options(array),type(pdf|image)
輸出:pdf和圖片原始碼
- 建立專案app
- 下載wkhtmltox-0.12.4_linux-generic-amd64.tar.xz到app目錄下(省去耗時的下載過程)
- 新建composer.json:
{
"require": {
"biaoqianwo/php-htmltopdf-htmltoimage": "^1.1"
}
}
然後執行composer install
。
或者composer require biaoqianwo/php-htmltopdf-htmltoimage
如果主機沒有安裝composer的話,怎麼辦?就需要用到composer的映象。請自行學習。
- 新建index.php檔案:
<?php
require __DIR__ . '/vendor/autoload.php';
use Biaoqianwo\Html2Pdf\Html2Pdf;
use Biaoqianwo\Html2Pdf\Html2Image;
$post = $_POST;
$html = $post['html'];
$options = $post['options'];
$type = $post['type'];
if ($type == 'image') {
// Image
$generator = new Html2Image('/usr/local/bin/wkhtmltoimage');
$result = $generator->getOutputFromHtml($html, $options);
} else {
// Pdf
$generator = new Html2Pdf('/usr/local/bin/wkhtmltopdf');
$result = $generator->getOutputFromHtml($html, $options);
}
echo $result;
- 書寫Dockerfile,內容如下:
FROM php:7.1-apache
MAINTAINER 704872038@qq.com
RUN apt-get update
# Install dependencies needed for wkhtmltopdf
RUN apt-get install -y libxrender1 libfontconfig1 libxext6 fonts-arphic-bkai00mp fonts-arphic-bsmi00lp \
fonts-arphic-gbsn00lp fonts-arphic-gkai00mp fonts-dejavu-core fonts-droid fonts-liberation fonts-lmodern \
fonts-tibetan-machine xfonts-utils xfonts-75dpi xfonts-100dpi
ENV TIMEZONE="Asia/Shanghai"
# Set PHP timezone (both cli and apache)
RUN echo "date.timezone=\"${TIMEZONE}\"" > /usr/local/etc/php/conf.d/timezone.ini
# Make logs dir writable for apache user
RUN mkdir -p /var/www/html/logs
RUN chown -R www-data:www-data /var/www/html/logs
# Copy project files to the image
COPY . /var/www/html
# Install wkhtmltopdf
RUN tar xf wkhtmltox-0.12.4_linux-generic-amd64.tar.xz && rm wkhtmltox-0.12.4_linux-generic-amd64.tar.xz
RUN ln -s -T /var/www/html/wkhtmltox/bin/wkhtmltopdf /usr/local/bin/wkhtmltopdf && \
chmod a+x /usr/local/bin/wkhtmltopdf && \
ln -s -T /var/www/html/wkhtmltox/bin/wkhtmltoimage /usr/local/bin/wkhtmltoimage && \
chmod a+x /usr/local/bin/wkhtmltoimage
# Make logs dir mountable
VOLUME /var/www/html/logs
然後,建立一個映象 docker build -t biaoqianwo/html2pdf .
然後,開啟微服務(執行一個容器):docker run --publish 8080:80 --name html2pdf-server biaoqianwo/html2pdf
這樣,就可以通過介面(比如postman,cURL等工具)測試了。
進一步優化
新建一個run.sh,將上述過程放到一個shell指令碼中完成,實現bash run.sh
開始一個微服務。
#!/bin/sh
# Install php dependencies
composer install
composer cleanable
# Use 'latest' tag if it is unset, or explicitly set to null.
docker build --tag=biaoqianwo/html2pdf:${TAG:-'latest'} .
# run a container
docker run \
--detach \
--publish 8080:80 \
biaoqianwo/html2pdf:${TAG:-'latest'}
相關文章
- html轉image 儲存到zipHTML
- JAVA中HTML轉PDFJavaHTML
- C#將html轉pdfC#HTML
- PDF檔案轉HTML方法HTML
- java Html2Image 實現html轉圖片功能JavaHTML
- html頁面轉PDF的功能HTML
- Java 將Html轉為PDF(二)JavaHTML
- 10 個HTML轉為PDF最佳工具HTML
- .NET使用DinkToPdf將HTML轉成PDFHTML
- .net Aspose.pdf 轉html 去除版權HTML
- HTML轉換到PDF的三種方式HTML
- Java 將PDF轉為HTML時儲存到流JavaHTML
- html頁面轉PDF、圖片操作記錄HTML
- 如何免費將PDF轉成HTML網頁?HTML網頁
- jspdf + html2canvas 實現html轉pdf (提高解析度版本)JSHTMLCanvas
- HTML轉PDF的純客戶端和純服務端實現方案HTML客戶端服務端
- 使用Python 實現 PDF 到 HTML 的轉換PythonHTML
- Markdown轉HTMLHTML
- HTML教程(轉)HTML
- HTML 元素(轉)HTML
- 安卓手機怎樣將PDF檔案轉為HTML安卓HTML
- HTML input image按鈕HTML
- HTML input image 按鈕HTML
- Javascript 將html轉成pdf,下載,支援多頁哦(html2canvas 和 jsPDF)JavaScriptHTMLCanvasJS
- html轉Excel表格HTMLExcel
- Html 顯示pdfHTML
- 使用UiBot實現批次html轉換成PDF檔案UIHTML
- 把HTML轉成PDF的4個方案及實現方法HTML
- 4、製作一個html轉pdf的spring boot starterHTMLSpring Boot
- JS 將HTML頁面轉為PDF或者World 並下載JSHTML
- JS轉換HTML轉義符JSHTML
- Mac系統中怎麼將html網頁轉成PDF格式?MacHTML網頁
- Laravel 使用 laravel-snappy 包 實現 HTML 轉 PDF 和 PNGLaravelAPPHTML
- react HTML字串轉換ReactHTML字串
- psd 轉換 htmlHTML
- 從HTML到XML (轉)HTMLXML
- 學習HTML教程(轉)HTML
- HTML 字符集(轉)HTML