2010-12-20 109 views

Respuesta

13

jQuery no puede (porque JavaScript no puede) crear un PDF a partir de datos, no ... puede obtener uno de su servidor (como cualquier otra solicitud), pero no puede generar uno. JavaScript simplemente no tiene un mecanismo (aunque hay algunas opciones de HTML5 implementadas ahora) para crear/guardar un archivo que funcione en varios navegadores, especialmente un archivo binario.

+10

sí, es posible generar un pdf con javascript ... http: // stackoverflow.com/questions/742271/generate-pdf-files-with-javascript –

+1

@YuriKolovsky - Eso no funciona en todos los navegadores, está utilizando URI de datos (y puede requerir un complemento), la respuesta anterior sigue siendo cierta: "JavaScript simplemente no tiene un mecanismo para crear/guardar un archivo ** que funcione en todos los navegadores ** " –

+1

No veo la pregunta mencionando ** navegador cruzado ** –

4

Si es posible, el lado del servidor es una mejor opción para generar archivos PDF. Probablemente sea más rápido para la mayoría de los usuarios y devolver un archivo a través de una solicitud HTTP estándar es mucho más sólido que las opciones actuales del lado del cliente.

Dicho esto, esta biblioteca generará un archivo PDF en el lado del cliente: http://snapshotmedia.co.uk/blog/jspdf

En los navegadores que soportan URIs de datos, se puede devolver el PDF directamente. En otros navegadores, puede acoplarlo con un componente Flash llamado Downloadify para lograr lo mismo.

4

Si está recuperando datos PDF de su servidor en su éxito AJAX y necesita enviarlos a su usuario como una descarga, se puede lograr con un poco de codificación base64. Si entiendo correctamente, lo más probable es que tenga un escenario en el que su servidor posiblemente devuelva un PDF o algún otro tipo de datos cuando tenga éxito (como XML). En este caso, tiene dos pasos para manejar la solicitud:

1) Determine el tipo de contenido a través de su encabezado. Aquí está un ejemplo de la división de su controlador basado en la respuesta:

$.ajax({ 

    type: "POST", url: "/test", data: someData, success: function(response, status, xhr){ 
    var ct = xhr.getResponseHeader("content-type") || ""; 
    if (ct.indexOf(‘xml’) > -1) { 
     // handle xml here 
    } 
    if (ct.indexOf(‘pdf’) > -1) { 
     // handle pdf here 
    }  
    } 
}); 

2) Una vez que tenga su contenido PDF, puede redirigir el navegador para mostrar el PDF mediante el uso de un truco de datos base 64. Primero, codifica el contenido de datos en base64. Hay un number of libraries para ayudarte a hacer esto en Javascript. A continuación, devuelva su contenido a través de document.location.href:

document.location.href = 'data:application/pdf;base64,' + base64PDFData; 

Eso debería obtener lo que necesita. En teoría, podría reenviar cualquier tipo de contenido al navegador con este método.

EDITAR:

debería mencionar que el URI de datos desafortunadamente no funciona en IE due to security restrictions.

1

Si el HTML que está tratando es una tabla, puede usar el complemento jquery.dataTables con TableTools para generar PDF. Utiliza Flash detrás de escena y está severamente limitado en el formateo, pero genera PDF.

http://datatables.net/extras/tabletools/

2

Agregue esto a su escritura:

<script src="https://docraptor.com/docraptor-1.0.0.js"></script> 
DocRaptor.createAndDownloadDoc("YOUR_API_KEY_HERE", { 
    test: false, // test documents are free, but watermarked 
    type: "pdf", 
    name: planStatus+"_" +assessmentYear+"_"+employeeId+ ".pdf", 
    document_content: document.querySelector('#MyDoc').innerHTML, // use this page's HTML 
    // document_content: "<h1>Hello world!</h1>",    // or supply HTML directly 
    // document_url: "http://example.com/your-page",   // or use a URL 
    // javascript: true,          // enable JavaScript processing 
    // prince_options: { 
    // media: "screen",          // use screen styles instead of print styles 
    // } 
}) 
+0

copie y pegue el código para generar pdf, y puede darle cualquier nombre al pdf que desee.He dado el nombre tomado de la variable según mi necesidad –

Cuestiones relacionadas