Genera .pdf de una sola página con PhantomJS

Estoy exportando una página web de altura variable en pdf usando PhantomJS. Como los pdfs pueden tener cualquier tamaño de página (más parecido a la proporción, ya que es vectorial), me gustaría exportarlo de una manera que cree una sola página en el pdf para que se ajuste a toda la página web.

Afortunadamente, utilizando el método PhantomJS de evaluate , puedo detectar fácilmente la altura de la página

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

Sin embargo, no estoy seguro de cómo puedo usar eso para mi ventaja. viewportSize no parece afectar esto de ninguna manera, ya que no estoy renderizando la window gráfica sino todo el documento. Lo ajusto a un {width: 800, height: 800} fijo {width: 800, height: 800}

Así que no puedo paperSize tamaños de paperSize . Establecer la altura de la página devueltaHeight representará páginas de 1.5x, así que intenté ajustar el ancho, pero en realidad no se puede agregar a ninguna fórmula que pueda entender.

Cualquier idea sobre cómo lograr esto, o tiene más información sobre la correlación entre la propiedad paperSize y los límites del tamaño de píxel que se representan desde la página

Extendiendo la respuesta de Cybermaxs, agregué

  • establecer un ancho fijo (36cm correspondía bien con mi puerto de visualización) y
  • una unidad para el cálculo de altura
  • establecer el margen a 0px.

No puedo dar una buena explicación, pero funciona para mí.

El guion completo:

 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); } }); } 

viewportSize simula el tamaño de la window como en un browser tradicional. Afecta la representación de la página debido a la disposition de HTML pero no a la representación directamente en PDF.

Use page.papersize para definir el tamaño de la página web cuando se represente como PDF. Con un poco de Jquery, es fácil renderizar la página web en un documento único, como este:

 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(); } }); }