2016-09-04 7 views
0

メテオ・プロジェクトでは、ページからセクションのPDFエクスポートを生成する必要があります。 私はwebshotを使ってエクスポートを生成します。 最近の要件は、エクスポートで公開静的資産(ロゴイメージ)を使用することです。 私はcssファイルをすべて読んで、その内容をHTML文書のスタイルタグにコピーすることでphantomjsでCSS資産を利用できるようにしました。私はWebshotを消費させました。それはうまく動作します。画像の場合 は、私は、サーバー上で実行されますメテオ - 公的資産のファントム・レンダリング

const buildPath = path.resolve('.').split(path.sep + 'server')[0]; 
const imagePath = buildPath + '/web.browser/app/images/'; 

を使用して、サーバー上の画像フォルダへの完全なパスとHTMLで「./images/」のパターンを交換してください。画像が表示されません。 生成されたHTML(私はデバッグのために保存します)を私のdevマシン上の任意の場所で開くと、イメージパスが正常に解決され、イメージが取得されます。

ファントムの静的資産にアクセスする正しい方法は何ですか?

+0

ようこそスタックオーバーフロー! PhantomJSはどのブラウザでも機能しますが、いくつかのバグがあります。どのPhantomJSバージョンを使用しますか? 'onConsoleMessage'、' onError'、 'onResourceError'、' onResourceTimeout'イベント([Example](https://gist.github.com/artjomb/4cf43d16ce50d8674fdf#file-1_phantomerrors-js))に登録してください。多分エラーがあるかもしれません。 –

+0

イメージを読み込むのに十分な時間を与えましたか?あなたのコードの最小の実例を表示できますか? – Vaviloff

答えて

0

私はそのことを理解しました。imgタグのsrc属性に完全修飾プロトコルがありませんでした。 Chromeはスマートで寛容ですが、ファントムはそうではありません。 基本的には、イメージへのフルパスの前に 'file:///'を追加する必要がありました。 それは今のようになります。

const buildPath = path.resolve('.').split(path.sep + 'server')[0].replace(/\\/g, '/'); 
const imagePath = buildPath + '/web.browser/app/images/'; 
html = html.replace(/src="\.\/images\//g, 'src="file:///' + imagePath); 

と時間に関するコメントに関しては、私は、レンダリングのための完全な1秒の遅延を与えないが、それはそれなしで動作するかどうかをチェックしませんでした。