Passe algum tempo integrando essas coisas, ou seja, para gerar pdf em javascript e salvá-lo no sistema de arquivos.
Na verdade, não há nada difícil, mas vou descrever como você pode fazer isso funcionar. Espero que isso economize o tempo de alguém.
Em primeiro lugar, você precisa adicionar ao plugin Cordova FileSystem. Isso pode ser feito facilmente com a linha de comando:
cordova plugin add org.apache.cordova.file
Além disso, você precisa corrigir o jsPDF (estou falando sobre a versão 0.9.0), porque ele não funciona no Android com a criação de blob padrão.
Você precisa substituir a linha comentada pelo seguinte código (graças à resposta do stackoverflow http://stackoverflow.com/questions/18596005/generate-client-side-pdf-with-jspdf-on-phonegap-based-apps):
// blob = new Blob([array], {type: "application/pdf"});
try
{
blob = new Blob([array], {type: "application/pdf"});
console.debug("case 1");
}
catch (e)
{
window.BlobBuilder = window.BlobBuilder ||
window.WebKitBlobBuilder ||
window.MozBlobBuilder ||
window.MSBlobBuilder;
if (e.name == 'TypeError' && window.BlobBuilder)
{
var bb = new BlobBuilder();
bb.append(data);
blob = bb.getBlob("application/pdf");
console.debug("case 2");
}
else if (e.name == "InvalidStateError")
{
// InvalidStateError (tested on FF13 WinXP)
blob = new Blob([array], {type: "application/pdf"});
console.debug("case 3");
}
else
{
// We're screwed, blob constructor unsupported entirely
console.debug("Errore");
}
}
E a última etapa será realmente gerar e salvar o arquivo criado!
// Somewhere in your code
window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, gotFS, fail);
function gotFS(fileSystem) {
fileSystem.root.getFile("test.pdf", {create: true, exclusive: false}, gotFileEntry, fail);
}
function gotFileEntry(fileEntry) {
fileEntry.createWriter(gotFileWriter, fail);
}
function gotFileWriter(writer) {
var doc = new jsPDF();
doc.setFontSize(14);
doc.text(20, 20, 'Hello world!');
writer.write(doc.output());
}
ATUALIZAÇÃO 21.03.2014 A
última versão estava produzindo PDF corrompido, abaixo está um código atualizado que funciona corretamente com imagens usando jsPDF.
var sourcer = $('#imageForDocument');
function writeReport(doc) {
var data = doc.output();
var buffer = new ArrayBuffer(data.length);
var array = new Uint8Array(buffer);
for (var i = 0; i < data.length; i++) {
array[i] = data.charCodeAt(i);
}
writer.write(buffer);
}
if ($("#doclogo").length > 0) {
window.canvasplugin(sourcer.attr('src'), function (val) {
var doc = makePdfReport(val);
writeReport(doc);
});
}