2013-08-24 9 views
7

PhantomJSを使用して可変高さのウェブページをpdfに書き出します。 pdfsは任意のページサイズを持つことができます(ベクトル的なので、比率に似ています)ので、pdfにWebページ全体に収まる単一のページを作成する方法でエクスポートしたいと思います。私は簡単にページの高さPhantomJSで単一ページ.pdfを生成

page.includeJs('jquery.js', function() { 
    var pageHeight = page.evaluate(function() { 
    return $('#content').height(); 
    }); 
}); 

を検出することができますevaluate PhantomJS法を用いた幸いにも

は、しかし、私は私の利点にそれを使用することができるかどうかはわかりません。 viewportSizeは、ビューポートをレンダリングするのではなく文書全体をレンダリングしているので、これには何も影響していないようです。私はそれを固定に設定しました{width: 800, height: 800}

私はpaperSizeサイズの周りに私の頭を包むことはできません。返されるpageHeightに高さを設定すると、1.5xページがレンダリングされるので、幅を調整しようとしましたが、理解できる数式に実際に追加されません。

これを達成するため、またはあなたがpaperSizeプロパティとページ

+0

ない質問の焦点が、ファントムのjsスクリプトにはjQueryを取得する方法を示すためのデモincludeJS方法に感謝! – chiliNUT

答えて

1

viewportSizeからレンダリングピクセルサイズの境界との間の相関関係に多くの洞察力を持っている方には任意のアイデアは、伝統のようにウィンドウのサイズをシミュレートブラウザ。これは、HTMLレイアウトのためにページのレンダリングに影響しますが、直接PDFレンダリングには影響しません。

page.papersizeを使用して、WebページをPDFとしてレンダリングするときのサイズを定義します。 jQueryののビットで、それはこのように、単一のドキュメントでWebページをレンダリングするのは簡単です:Cyber​​maxs'回答を拡張

var page = require('webpage').create(), 
    system = require('system'), 
    address, output; 

if (system.args.length != 3) { 
    console.log('Usage: spdf.js URL filename'); 
    phantom.exit(1); 
} else { 
    address = system.args[1]; 
    output = system.args[2]; 
    page.viewportSize = { width: 600, height: 600 }; 

    page.open(address, function (status) { 
     if (status !== 'success') { 
      console.log('Unable to load the address!'); 
      phantom.exit(); 
     } else { 
      var size = page.evaluate(function() { 
       return {width: width = $(document).width(), height : $(document).height() }; 
      }); 

      page.paperSize = size; 

      page.render(output); 
      phantom.exit(); 
     } 
    }); 
} 
+0

あなたのコメントのおかげで、私はこれを試みたが、何らかの理由で私のPDFは2ページ、1と私のページで使用されて半分を持つことになります。幅も、viewportSize.widthよりも小さくなるようです。それはある程度ズームしたかのように動作しますが、zoomFactorを1に設定しました。これがどうして起こるのか、何が起こるのかを知りたいのですが? – treznik

+0

同じ問題が私に起こっています。どんな助けもありがたいです –

+0

これを見てください:http://stackoverflow.com/a/14036545/1420669 –

2

、私は

  • は(36センチメートルはとよく一致した固定幅を設定追加しました私のビューポート)と
  • 高さ計算の単位
  • 余白を0pxに設定します。

私は良い説明をすることはできませんが、それは私のために働く。

フルスクリプト:

var page = require('webpage').create(), 
system = require('system'), 
address, output, size; 

if (system.args.length < 3 || system.args.length > 5) { 
    console.log('Usage: screenshot.js <URL> <filename>'); 
    phantom.exit(1); 
} else { 
    address = system.args[1]; 
    output = system.args[2]; 
    page.viewportSize = { width: 1280, height: 900}; 
    page.open(address, function (status) { 
     if (status !== 'success') { 
      console.log('Unable to load the address!'); 
      phantom.exit(); 
     } else { 
      window.setTimeout(function() { 
       page.includeJs("//code.jquery.com/jquery-1.10.1.min.js", function() { 
        var size = page.evaluate(function() { 
         return {width: width = "36cm", height : $(document).height()*2+400 + "px", margin: '0px' }; 
        }); 
        page.paperSize = size;   
        page.render(output); 
        phantom.exit(); 
       }); 
      }, 400); 
     } 
    }); 
} 
関連する問題