To powinno działać, ale wydaje mi się, że czegoś mi brakuje.Osadź dane bajtów PDF w HTML
Mam plik pdf na dysku lokalnym. Oczywiście Chrome i inne przeglądarki nie mogą uzyskać tego lokalnego adresu URL, ponieważ jest on piaskownicą, więc serwlet pobiera dane z lokalnego dysku i wysyła je z powrotem przez wywołanie ajax do klienta WWW. Nie dostaję żadnych błędów i wygląda na to, że przeglądarka plików PDF ładuje się, ale sam plik się nie wyświetli. Koduję to z wyprzedzeniem, ale nadal nie będzie działać. Poniżej przedstawię moje liczne podejścia, ale nie będę podawał kodu serwletu, ponieważ wydaje się, że działa.
Próba 1:
function embedFile(){
$.get("FileGetter", function(pdfText){
var base64EncodedPDF = b64EncodeUnicode(pdfText);
$("#embedHolder").append("<object id='embedder' width='80%' height='600px'><embed width=100% height=100%"
+ ' type="application/pdf"'
+ ' src="data:application/pdf;base64,'
+ base64EncodedPDF
+ "></embed></object>");
});
}
function b64EncodeUnicode(str) {
return btoa(encodeURIComponent(str).replace(/%([0-9A-F]{2})/g, function(match, p1) {
return String.fromCharCode('0x' + p1);
}));
}
Próba 2:
function embedFile(){
$.get("FileGetter", function(pdfText){
var base64EncodedPDF = b64EncodeUnicode(pdfText);
var obj = $('<object id="repObjID" type="application/pdf" width="100%" height="600" border="2"></object>');
obj.attr('data',base64EncodedPDF);
var embed = $('<embed type="application/pdf"></embed>');
embed.attr('src',base64EncodedPDF);
$('#repObjID').append(embed);
$("#docHolder").html(obj);
}
function b64EncodeUnicode(str) {
return btoa(encodeURIComponent(str).replace(/%([0-9A-F]{2})/g, function(match, p1) {
return String.fromCharCode('0x' + p1);
}));
}
1) Czy na pewno Twoja przeglądarka plików PDF bierze dane zakodowane base64 w adresie URL src? 2) W jaki sposób serwer pobiera dane z dysku lokalnego? Sugeruję, że użytkownik musi wybrać plik, który następnie jest przesyłany (przez AJAX?) Do serwletu? –
Niezupełnie. Użytkownik wybiera rekord w bazie danych, a na jego podstawie znajduje się adres URL wskazujący lokalny katalog. Następnie serwer odczytuje dane z lokalnego adresu URL i konwertuje je na bajty, które następnie są przesyłane do klienta za pośrednictwem odpowiedzi. * Myślałem, że to działa, ale udało mi się z powodzeniem otworzyć dokument w nowym oknie. Plik PDF pojawia się i jest poprawną liczbą stron, ale każda strona jest całkowicie pusta. Jeśli chodzi o przeglądarkę plików PDF, używam domyślnego chrome. –
Można utworzyć binarny [Blob] (https://developer.mozilla.org/en-US/docs/Web/API/Blob) (z typem zawartości), a następnie utworzyć [URL obiektu] (https://developer.mozilla.org/en-US/docs/Web/API/URL/createObjectURL) i załaduj go w elemencie iframe. – Rudie