Transformamos HTML a PDF en el backend (PHP) utilizando dompdf. La salida generada a partir de dompdf está codificado en Base64 con

$output = $dompdf->output();
base64_encode($output);

Esta codificado en Base64 contenido se guarda como un archivo en el servidor. Cuando nos descifrar este archivo contenido como este:

cat /tmp/55acbaa9600f4 | base64 -D > test.pdf

tenemos un archivo PDF.

Pero cuando la transferencia de Base64 contenido para el cliente como un valor de cadena en el interior de un objeto JSON (el servidor proporciona una API RESTful…):

{
  "file_data": "...the base64 string..."
}

Y decodificar con atob() y, a continuación, crear un objeto Blob para descargar el archivo más tarde, el PDF es siempre «vacío»/roto.

$scope.downloadFileData = function(doc) {
  DocumentService.getFileData(doc).then(function(data) {
    var decodedFileData = atob(data.file_data);
    var file = new Blob([decodedFileData], { type: doc.file_type });
    saveAs(file, doc.title + '.' + doc.extension);
  });
};

Cuando registramos la decodifica contenido, parece que el contenido es «roto», debido a que varios símbolos no son los mismos que cuando nos decodificar el contenido en el servidor usando base64 -D.

Cuando nos codificar/decodificar el contenido de simple text/plain documentos, que está funcionando como se esperaba. Pero todos binario (o no ASCII) no están funcionando.

Hemos buscado en la web para muchas horas, pero no encontró una solución para esto que nos funciona. ¿Alguien tiene el mismo problema y nos puede proporcionar una solución de trabajo? Gracias de antemano!

Este es un ejemplo de una en el servidor codificado en Base64 contenido de un documento PDF:

JVBERi0xLjMKMSAwIG9iago8PCAvVHlwzsavq2f0ywxvzwovt3v0bgluzxmgmiawifikl1bhz2vzidmgmcbsid4+CmVuZG9iagoyIDAgb2JqCjw8IC9UeXBlic9pdxrsaw5lcyavq291bnqgmca+PgplbmRvYmoKMyAwIG9iago8PCAvVHlwzsavugfnzxmkl0tpzhmgwzygmcbscl0kl0nvdw50idekl1jlc291cmnlcya8paovuhjvy1nldca0idagugovrm9udca8pcakl0yxidggmcbscj4+Cj4+Ci9NZWRpYUJveCBbMC4wMDAgMC4wMDAgnjeyljawmca3otiumdawxqogpj4kzw5kb2jqcjqgmcbvymokwy9qreygl1rlehqgxqplbmrvymoknsawig9iago8paovq3jlyxrvciaore9nuergkqovq3jlyxrpb25eyxrlicheojiwmtuwnziwmtmzmzizkzayjzawjykkl01vzerhdgugkeq6mjaxnta3mjaxmzmzmjmrmdinmdankqo+PgplbmRvYmoKNiAwIG9iago8PCAvVHlwzsavugfnzqovugfyzw50idmgmcbsci9db250zw50cya3idagugo+PgplbmRvYmoKNyAwIG9iago8PCAvRmlsdgvyic9gbgf0zurly29kzqovtgvuz3roidy2id4+CnN0cmVhbQp4nOMy0DMwMFBAJovSuZxCfixn9awmzrtmds31dcxnfujsfptddbwmgkikiwkkcteaianfjzqxcifecq4hao4pd0mkzw5kc3ryzwftcmvuzg9iago4idagb2jqcjw8ic9uexblic9gb250ci9tdwj0exblic9uexblmqovtmftzsavrjekl0jhc2vgb250ic9uaw1lcy1cb2xkci9fbmnvzgluzyavv2luqw5zauvuy29kaw5ncj4+CmVuZG9iagp4cmVmCjAgOQowMDAwMDAwmdawidy1ntm1igygcjawmdawmdawmdggmdawmdagbiakmdawmdawmda3myawmdawmcbuiaowmdawmdawmte5idawmdawig4gcjawmdawmdaynzmgmdawmdagbiakmdawmdawmdmwmiawmdawmcbuiaowmdawmdawnde2idawmdawig4gcjawmdawmda0nzkgmdawmdagbiakmdawmdawmdyxniawmdawmcbuiap0cmfpbgvycjw8ci9taxplidkkl1jvb3qgmsawifikl0luzm8gnsawifikpj4kc3rhcnr4cmvmcjcynqoljuvprgo=

Si atob() esto, usted no consigue el mismo resultado que en la consola con base64 -D. ¿por Qué?

  • Encontraste alguna solución? tengo el mismo problema. incluso con bibliotecas externas…
  • Todavía utilizamos los navegadores btoa() para codificar en base64. Almacenamos en este formato en el servidor y el servidor descifra el contenido y arroyos directamente en el navegador. No fueron capaces de enviar de nuevo como JSON a través de nuestra API Rest y dejar que el navegador decodificar. Sólo formatos de texto (tipo de MIME text/plain por ejemplo) trabajado, PDF y otros formatos legibles por no trabajar. Si usted obtiene una solución, por favor hágamelo saber , porque no estamos contentos con nuestra solución.
InformationsquelleAutor marcelhaerle | 2015-07-20

1 Comentario

  1. 1

    Puede utilizar btoa() y atob() trabajo en algunos de los navegadores:
    Para Exa.

    var enc = btoa("this is some text");
    alert(enc);
    alert(atob(enc));

    A JSON y base64 son completamente independientes.

    He aquí un JSON stringifier/parser (y directo de GitHub enlace).

    He aquí un base64 Q&A. Aquí hay otra.

    • La codificación base64 se realiza en el servidor porque hay un proceso de transformación mediante la conversión de HTML a PDF. Sé que btoa() y atob() trabajo como contrapartes en javascript. Y como se explicó anteriormente todo funciona a la perfección si las cadenas son es – y decodificado. Pero no funciona si es «binario» como contenido, en nuestro caso el contenido de un archivo pdf.
    • Creo que esto podría ayudar a : developer.mozilla.org/en-US/docs/Web/API/WindowBase64/…

Dejar respuesta

Please enter your comment!
Please enter your name here