2012-09-12 13 views
6

Estoy tratando de desarrollar una aplicación empaquetada (sin conexión) con chrome 23+ que permite al usuario generar e imprimir un archivo pdf. Intenté varias formas de lograr esto, pero ninguno realmente funciona.Aplicaciones empaquetadas de Chrome/pdf.js

Usando algo como esto, el navegador/aplicación se congela:

window.html (includes pdf.js (http://code.google.com/p/jspdf/) and genpdf.js (see below)): 

.... 
<browser src="about:blank" width="1024" height="768"></browser> 

genpdf.js: 

var doc = new jsPDF(); 
doc.text(20, 20, 'foo'); 
doc.text(20, 30, 'bar'); 
document.querySelector('browser').src = window.webkitURL.createObjectURL(new Blob([doc.output()], {type: 'application/pdf'})); 

Esto sería mi forma preferida para visualizar el PDF generado, pero con la ventana congelar el usuario no puede imprimirlo.

Otra forma sería la de guardar el PDF en el escritorio:

chrome.fileSystem.chooseFile({type: 'saveFile'}, function(writableFileEntry) { 
    writableFileEntry.createWriter(function(writer) { 
     writer.onerror = function(e) { 
     console.log('writeend'); 
     }; 
     writer.onwriteend = function(e) { 
     console.log('writeend'); 
     }; 
     var doc = new jsPDF(); 
     doc.text(20, 20, 'foo'); 
     doc.text(20, 30, 'bar'); 
     writer.write(new Blob([doc.output()], {type: 'application/pdf'})); 
    }, errorHandler); 
}); 

Esto funciona, pero el archivo en el escritorio está bloqueado hasta que la aplicación está cerrada. ¿Hay alguna llamada de API que me falta para liberar el archivo guardado?

¡Gracias de antemano!

+0

Me encantaría ver a alguien responder esto. – knownasilya

+1

Si su solución preferida está causando la falla de Chrome, lo primero que haría es [presentar un problema] (http://code.google.com/p/chromium/issues/list). Es muy posible que los desarrolladores de Chrome puedan ayudarte. –

Respuesta

3

En la segunda solución, creo que debe proporcionar el tamaño del búfer, para que el escritor pueda saber cuándo finaliza la escritura.

var docBuffer = doc.output(); 
writer.write(new Blob([docBuffer], {type: 'application/pdf', 'size': docBuffer.length})); 
+0

No diría que su respuesta resuelve el problema, pero de seguro nos acerca a la depuración. – knownasilya

+0

Sí, tienes razón! Si el operador proporciona más información, me gustaría ayudar – cvsguimaraes

-1

Tome un vistazo a wkhtmltopdf, genera PDF desde una página HTML + CSS utilizando el motor WebKit. Me encanta, produce el mismo resultado en píxeles cuando la página aparece en el navegador Chromium. Hay una versión para MS-Windows y Linux, probé ambas.

+1

El OP está buscando un método en el navegador, específicamente el uso de las aplicaciones de Chrome, no una utilidad basada en el kit web. – knownasilya

+0

Esto no responde en absoluto a la pregunta formulada, como señala Knownasilya. –

+0

A veces cuesta menos esfuerzo cambiar el problema que resolverlo. No estoy familiarizado con las * aplicaciones empaquetadas *, pero si pueden ejecutar un ejecutable externo, tal vez sea una solución más rápida. Además, cuando PDF se genera a partir de HTML, la plantilla puede ser editada por un diseñador web, el diseño del resultado será más profesional. – ern0

Cuestiones relacionadas