Tomasz Faszyński

Tomasz Faszyński Specjalista ds.
programowania

Temat: Java + pdf.js i dokument w base64

Pobieram dokument PDF z zewnętrznego serwisu i koduje do base64. Dokument jest pobrany i zakodowany.

public String viewerShowImage(
@RequestParam(value = "dmsId", required = false) Long dmsId,
Locale locale)
{
List<Long> ids = new ArrayList<Long>();
ids.add(dmsId);
InputStream fileContent = null;

try {
List<DmsDTO> dmsRequests = download(ids);
DmsDTO result = dmsRequests.get(0);
fileContent = result.getContent().getContent().getInputStream();
byte[] bytes = IOUtils.toByteArray(fileContent);

return new String(Base64.encodeBase64String(bytes));

} catch (Exception ioe) {
log.error("Error downloading files from DMS", ioe);
}
}


Następnie chcę skorzystać mozilla pdf.js https://mozilla.github.io/pdf.js/ i wyświetlić ten dokument.

function renderPDF(dmsId, canvasContainer) {

$.ajax({
type: "POST",
url: '${viewerShowImage}',
async: false,
data : {
dmsId : dmsId
},
success:function (message) {
var pdfAsArray = window.btoa(unescape(encodeURIComponent(message)));
function renderPage(page) {
var viewport = page.getViewport(scale, rotate);
var canvas = document.createElement('canvas');
var ctx = canvas.getContext('2d');
var renderContext = {
canvasContext: ctx,
viewport: viewport
};

canvas.height = viewport.height;
canvas.width = viewport.width;

canvasContainer.appendChild(canvas);

$("canvas").css("display","block");

page.render(renderContext);
}

function renderPages(pdfDoc) {
for(var num = 1; num <= pdfDoc.numPages; num++)
pdfDoc.getPage(num).then(renderPage);
}


PDFJS.disableWorker = true;
PDFJS.getDocument("data:application/pdf;base64,"+pdfAsArray).then(renderPages);

},
error: function() {
addMessage({ type: 'ERROR', messageText: 'Wystąpił błąd podczas wyświetlania dokumentu.'});
}
});

}


Niestety otrzymuję błąd:

GET http://127.0.0.1:8080//viewer/54172272/0/PD94bWwgdmVyc...…QgbWFnbmlzPC9hPjwvbGk+PC91bD48L2Rpdj48L2Rpdj48L2Rpdj48L2JvZHk+PC9odG1sPg== 404 (Not Found)


Oczywiście pod tym adresem nie ma pliku, ale jak wczytać base64, aby wyświetlił mi się PDF?

Próbowałem zastosować:

http://stackoverflow.com/questions/12092633/pdf-js-ren...

Ale otrzymywałem błąd:
Failed to execute 'btoa' on 'Window': The string to be encoded contains characters outside of the Latin1 range.


Obecnie próbuję to wdrożyć:
http://stackoverflow.com/questions/23223718/failed-to-...
Damian L.

Damian L. Architekt IT

Temat: Java + pdf.js i dokument w base64

Zakładam, że to REST w springu. Nie wystarczy zwrócić tej tablicy bajtów bez zabawy z base64 i ustawić Content-Type na "application/pdf" i pozwolić przeglądarce załatwić sprawę? Przykład: http://stackoverflow.com/a/16656382
Jest jakieś wymaganie, które wymusza dokładnie takie podejście?

Poza tym POST czy GET? :)

Następna dyskusja:

Programista JAVA pilnie pos...




Wyślij zaproszenie do