SlimerJSを使用してWebページをPDFに出力
4562 ワード
本稿では、
ソフトウェアリスト: xvfb gtk3 cups firefox slimerjs
本明細書で使用するオペレーティングシステムのバージョンはCentOS 7.2です.
xvfbのインストール
xvfbの紹介ではwikiを見ることができますが、簡単に言えばプロセッサでグラフィック化に関連する機能ですが、画面にグラフィック出力は表示されません.インストール後、xvfb-runコマンドを使用してheadless slimerjsを実行できます.
Firefoxのインストール
SlimerJSはFirefoxに依存しており、現在サポートされているバージョン番号は38~46で、他のバージョンではテスト結果が保証されていません.46以上38未満のバージョンのインストールは推奨されません.
ここでは、Firefoxのバージョン番号64のEMEバージョンをダウンロードします.通常のバージョンでは、複雑なWebページをレンダリングするときに、エンジンレベルのエラーが発生する可能性があります.
GTK 3のインストール
Firefox 46はGTK 3に依存するため、ここではGTK 3をインストールする必要がある.また、オペレーティングシステムのバージョンがCentOS 6の場合.x、それではGTK 3のインストールを放棄することをお勧めします.直接システムをアップグレードします.
CUPSのインストール
CUPSはアップルが開発したユニバーサルUnix印刷システムで、CUPSがインストールされていなければSlimerJSがWebページをPDFにレンダリングする際にハングアップします.
SlimerJSのインストール
環境変数の設定
実行開始
また、実行が正常に実行されていない場合は、-debugパラメータを追加できます.
リファレンスコード
フォント
Linuxサーバにサービスが配備されているため、Webレンダリングで使用されるフォントはWindowsやmacOSと大きく異なります.例えば、Windowsのマイクロソフト・ブラックはLinuxでは使用できません.また、インストールフォントにも2つの選択肢があります.1つ目はサーバに直接インストールすること、2つ目はWeb FontsとしてWebページから導入することです.
Flexレイアウト
ネット上では2.xはFlexレイアウトをサポートしていますが、私たちの実践結果はサポートされていません.SlimerJSはFlexレイアウトでよくサポートされており、追加の作業は必要ありません.
Canvasペイント
私たちのページではEChartsを使用してグラフを描き、EChartsの下部ではcanvasを使用してグラフを描きます.PhantomJS出力のPDFはこの点でサポートが悪く、Stacked Columnにはなぜか空白の隙間がたくさん現れています.SlimerJSの表現はずっといいですが、実際より薄い破線が太くて、色も濃いです.
ドキュメントページング
出力するPDFがページング出力(ページング印刷が便利)をサポートする場合は、paperSizeのHeightを設定して各ページpdfの高さを決定する必要があります.ただし、ここにも穴があり、各ページのPDFの高さには数画素の差があり、空白のページが1つ増えることがあります.
CSS適合
PDFをレンダリングするとき、ブラウザは印刷モードに入ります.多くの要素の背景色/テキスト色/背景画像は表示されません.PhantomJSについて、ネット上では以下のようなスタイルを追加する必要があると議論されています(私自身はこの案を実践したことがありません):
SlimerJSの場合、paperSizeには関連設定(printBGcolors/printBGImages)がありますが、テキストの色は設定できないようです.CSSを作成する際には、以下の詳細に注意することをお勧めします.すべての背景画像をBase 64文字列に変換してcssに直接導入(幸いwebpackがある) 要素のテキスト色と背景色を設定するすべてのスタイルは、印刷モード と互換性が必要である.テキストの色に関する設定はinheritedをサポートしていません.この点は特に に注意してください.
サンプルコードは次のとおりです.
最後の忠告
出力されたPDFがWebページの表示効果と100%一致することを期待しないでください.ほとんど不可能です(特にWebコンテンツが複雑な場合)、最終的な効果は多かれ少なかれ欠陥があります.
SlimerJS
によってWebページをPDFドキュメントに出力するプロセスについて説明します.生成されたPDFドキュメントのテキストはベクトルであり、コピーを選択することができます.ネット上でも似たような共有がありますが、プロセス全体で遭遇する可能性のあるピットやWeb開発における技術の詳細を明らかにしていません.ソフトウェアリスト:
本明細書で使用するオペレーティングシステムのバージョンはCentOS 7.2です.
xvfbのインストール
xvfbの紹介ではwikiを見ることができますが、簡単に言えばプロセッサでグラフィック化に関連する機能ですが、画面にグラフィック出力は表示されません.インストール後、xvfb-runコマンドを使用してheadless slimerjsを実行できます.
yum install xorg-x11-server-Xvfb
Firefoxのインストール
SlimerJSはFirefoxに依存しており、現在サポートされているバージョン番号は38~46で、他のバージョンではテスト結果が保証されていません.46以上38未満のバージョンのインストールは推奨されません.
wget https://ftp.mozilla.org/pub/firefox/releases/46.0.1/linux-x86_64-EME-free/zh-CN/firefox-46.0.1.tar.bz2
tar xjvf firefox-46.0.1.tar.bz2
ここでは、Firefoxのバージョン番号64のEMEバージョンをダウンロードします.通常のバージョンでは、複雑なWebページをレンダリングするときに、エンジンレベルのエラーが発生する可能性があります.
GTK 3のインストール
Firefox 46はGTK 3に依存するため、ここではGTK 3をインストールする必要がある.また、オペレーティングシステムのバージョンがCentOS 6の場合.x、それではGTK 3のインストールを放棄することをお勧めします.直接システムをアップグレードします.
yum install gtk3-devel
CUPSのインストール
CUPSはアップルが開発したユニバーサルUnix印刷システムで、CUPSがインストールされていなければSlimerJSがWebページをPDFにレンダリングする際にハングアップします.
yum install cups
SlimerJSのインストール
wget http://download.slimerjs.org/releases/0.10.0/slimerjs-0.10.0.zip
unzip slimerjs-0.10.0.zip
環境変数の設定
// firefox firefox
export SLIMERJSLAUNCHER=PATH_TO_FIREFOX
実行開始
cd PATH_TO_SLIMERJS
xvfb-run ./slimerjs SCRIPT_PATH HTTP_PAGE_URL OUTPUT_FILENAME
また、実行が正常に実行されていない場合は、-debugパラメータを追加できます.
xvfb-run ./slimerjs --debug test.js http://www.qq.com/ test.pdf
リファレンスコード
var page = require('webpage').create()
var system = require('system')
if (system.args.length !== 3) {
console.log('Arguments error: xvfb-run ./slimerjs SCRIPT_PATH HTTP_PAGE_URL OUTPUT_FILENAME')
slimer.exit()
} else {
var url = system.args[1]
var renderPath = system.args[2]
console.log('Page url is ' + url)
console.log('Output path is ' + renderPath)
page.paperSize = {
// magic number in my project
width: '1500px',
height: '1038px',
shrinkToFit: true,
printBGColors: true,
printBGImages: true
}
page.onLoadFinished = function() {
console.log('Finish loading page')
// ,
page.evaluate(function() {
var nodes = document.querySelectorAll('.bottom-line')
for(var i = 0; i< nodes.length; i += 1) {
nodes[i].parentNode.removeChild(nodes[i])
}
})
console.log('Start rendering')
page.render(renderPath)
console.log('Finish rendering')
slimer.exit()
}
console.log('Opening page now ...')
page.open(url)
}
フォント
Linuxサーバにサービスが配備されているため、Webレンダリングで使用されるフォントはWindowsやmacOSと大きく異なります.例えば、Windowsのマイクロソフト・ブラックはLinuxでは使用できません.また、インストールフォントにも2つの選択肢があります.1つ目はサーバに直接インストールすること、2つ目はWeb FontsとしてWebページから導入することです.
Flexレイアウト
ネット上では2.xはFlexレイアウトをサポートしていますが、私たちの実践結果はサポートされていません.SlimerJSはFlexレイアウトでよくサポートされており、追加の作業は必要ありません.
Canvasペイント
私たちのページではEChartsを使用してグラフを描き、EChartsの下部ではcanvasを使用してグラフを描きます.PhantomJS出力のPDFはこの点でサポートが悪く、Stacked Columnにはなぜか空白の隙間がたくさん現れています.SlimerJSの表現はずっといいですが、実際より薄い破線が太くて、色も濃いです.
ドキュメントページング
出力するPDFがページング出力(ページング印刷が便利)をサポートする場合は、paperSizeのHeightを設定して各ページpdfの高さを決定する必要があります.ただし、ここにも穴があり、各ページのPDFの高さには数画素の差があり、空白のページが1つ増えることがあります.
CSS適合
PDFをレンダリングするとき、ブラウザは印刷モードに入ります.多くの要素の背景色/テキスト色/背景画像は表示されません.PhantomJSについて、ネット上では以下のようなスタイルを追加する必要があると議論されています(私自身はこの案を実践したことがありません):
@media print {
body {
/*https://developer.mozilla.org/en-US/docs/Web/CSS/-webkit-print-color-adjust*/
-webkit-print-color-adjust: exact;
}
}
SlimerJSの場合、paperSizeには関連設定(printBGcolors/printBGImages)がありますが、テキストの色は設定できないようです.CSSを作成する際には、以下の詳細に注意することをお勧めします.
サンプルコードは次のとおりです.
.someClassName {
background-color:red;
color: #FFF;
}
@media print {
.someClassName {
background-color:red !important;
color: #FFF !important;
}
}
最後の忠告
出力されたPDFがWebページの表示効果と100%一致することを期待しないでください.ほとんど不可能です(特にWebコンテンツが複雑な場合)、最終的な効果は多かれ少なかれ欠陥があります.