Docker微服務(wù)之Html轉(zhuǎn)Pdf,Html轉(zhuǎn)Image

Html轉(zhuǎn)Pdf(Image)的方案應(yīng)該很多,這里介紹的是docker的一個微服務(wù)的方式逊朽,利用了工具wkhtmltopdf。

一叽讳、Docker微服務(wù)

Docker微服務(wù)首先是一種服務(wù)追他,暴露一個接口給使用者(一個application),使用者通過端口請求并獲得服務(wù)岛蚤。

  • 首先邑狸,創(chuàng)建一個鏡像,一般是自建Dockerfile涤妒,用 docker build -t serverImageName -f Dockerfile .
    或者使用他人的鏡像docker pull serverImageName单雾。
  • 其次,運(yùn)行一個容器作為服務(wù)她紫,常用docker run -d --name serverContainerName -p hostPort:DockerPort serverImageName:version(':version'可以省略硅堆,默認(rèn)是latest版本)。
  • 調(diào)用
    • 應(yīng)用容器犁苏,docker run --link serverContainerName:alias applicationImageName.容器的數(shù)據(jù)通信通過參數(shù)--link解決硬萍。
    • PHP程序調(diào)用:get('alias:hostPort'),可以用php-curl-class等。
    • 其他調(diào)用围详,比如瀏覽器調(diào)用nginx(httpd)朴乖。

推薦閱讀: 搭建LNMP環(huán)境,加深對docker的了解.(在本教程中助赞,mysql就是一個微服務(wù)供php7通過參數(shù)link的當(dāng)時調(diào)用买羞,php7是個微服務(wù)被nginx通過參數(shù)link調(diào)用,nginx是個微服務(wù)雹食,被瀏覽器調(diào)用)
我一直覺得最好的教程還是官方教程畜普,不懂的用有道等翻譯,英語慢慢學(xué)群叶。

二吃挑、工具wkhtmltopdf、wkhtmltoimage

官網(wǎng) https://wkhtmltopdf.org/

介紹

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微服務(wù)完整實例

簡單實現(xiàn)一個(無須第三方框架的):
POST http://html2pdf-serve/index.php
輸入:html(string),options(array),type(pdf|image)
輸出:pdf和圖片源碼

  • 創(chuàng)建項目app
  • 下載wkhtmltox-0.12.4_linux-generic-amd64.tar.xz到app目錄下(省去耗時的下載過程)
  • 新建composer.json:
{
    "require": {
        "biaoqianwo/php-htmltopdf-htmltoimage": "^1.1"
    }
}

然后執(zhí)行composer install赎离。
或者composer require biaoqianwo/php-htmltopdf-htmltoimage
如果主機(jī)沒有安裝composer的話逛犹,怎么辦?就需要用到composer的鏡像。請自行學(xué)習(xí)虽画。

  • 新建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,內(nèi)容如下:
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

然后,創(chuàng)建一個鏡像 docker build -t biaoqianwo/html2pdf .
然后舞蔽,開啟微服務(wù)(運(yùn)行一個容器):docker run --publish 8080:80 --name html2pdf-server biaoqianwo/html2pdf
這樣,就可以通過接口(比如postman码撰,cURL等工具)測試了渗柿。

進(jìn)一步優(yōu)化

新建一個run.sh,將上述過程放到一個shell腳本中完成,實現(xiàn)bash run.sh開始一個微服務(wù)灸拍。

#!/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'}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末做祝,一起剝皮案震驚了整個濱河市鸡岗,隨后出現(xiàn)的幾起案子轩性,更是在濱河造成了極大的恐慌狠鸳,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件卸察,死亡現(xiàn)場離奇詭異坑质,居然都是意外死亡涡扼,警方通過查閱死者的電腦和手機(jī)盟庞,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進(jìn)店門什猖,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人降铸,你說我怎么就攤上這事荤傲。” “怎么了终佛?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵绍豁,是天一觀的道長牙捉。 經(jīng)常有香客問我,道長芬位,這世上最難降的妖魔是什么带到? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任揽惹,我火速辦了婚禮,結(jié)果婚禮上狭握,老公的妹妹穿的比我還像新娘疯溺。我一直安慰自己,他們只是感情好嗅辣,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布澡谭。 她就那樣靜靜地躺著损俭,像睡著了一般。 火紅的嫁衣襯著肌膚如雪雁仲。 梳的紋絲不亂的頭發(fā)上攒砖,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天,我揣著相機(jī)與錄音惰蜜,去河邊找鬼受神。 笑死,一個胖子當(dāng)著我的面吹牛财著,可吹牛的內(nèi)容都是我干的撑碴。 我是一名探鬼主播,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼驮履,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了倒戏?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤傍念,失蹤者是張志新(化名)和其女友劉穎憋槐,沒想到半個月后淑趾,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年延蟹,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片斥杜。...
    茶點(diǎn)故事閱讀 40,040評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖忘渔,靈堂內(nèi)的尸體忽然破棺而出弱恒,到底是詐尸還是另有隱情,我是刑警寧澤返弹,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布义起,位于F島的核電站,受9級特大地震影響默终,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜两疚,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一诱渤、第九天 我趴在偏房一處隱蔽的房頂上張望谈况。 院中可真熱鬧,春花似錦碑韵、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽耸袜。三九已至,卻和暖如春堤框,著一層夾襖步出監(jiān)牢的瞬間纵柿,已是汗流浹背昂儒。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工渊跋, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人拾酝。 一個月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓蒿囤,卻偏偏與公主長得像崇决,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子恒傻,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,979評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 0. 前言 docker是什么湿痢?docker是用GO語言開發(fā)的應(yīng)用容器引擎扑庞,基于容器化罐氨,沙箱機(jī)制的應(yīng)用部署技術(shù)滩援≌ひ可...
    sessionboy閱讀 3,854評論 2 49
  • Docker — 云時代的程序分發(fā)方式 要說最近一年云計算業(yè)界有什么大事件租悄?Google Compute Engi...
    ahohoho閱讀 15,534評論 15 147
  • docker基本概念 1. Image Definition 鏡像 Image 就是一堆只讀層 read-only...
    慢清塵閱讀 8,750評論 1 21
  • 衡量醫(yī)生好壞的指標(biāo)有醫(yī)術(shù)和醫(yī)德,一位醫(yī)生的醫(yī)術(shù)是否高明,應(yīng)該看他是否能依靠最少種類畔塔、最小痛苦的檢查最早鸯屿、最快地準(zhǔn)確...
    世涂花開閱讀 498評論 0 1
  • 買了迷你小熊燉湯鍋寄摆,稱了二斤大米,一個油麥菜婶恼。一個火腿腸。準(zhǔn)備熬一碗青菜火腿粥勾邦。結(jié)果搓扯。米放多了,粥成了米飯了锨推,不過...
    二苗_5c0f閱讀 184評論 0 2