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-...