5
これはうまくいくはずですが、何か不足しているようです。PDFバイトデータをHTMLに埋め込む
ローカルドライブにpdfファイルがあります。明らかにChromeや他のブラウザはサンドボックス化されているので、ローカルURLを取得できません。そのため、ローカルドライブからデータを取得し、Webクライアントへのajax呼び出しによってサーブレットに戻すサーブレットがあります。私はどんなエラーも出ませんし、pdfビューアがロードされているようですが、ファイル自体は表示されません。私はそれを前もってエンコードしていますが、それでも動作しません。以下に私の多くのアプローチを示しますが、サーブレットコードは含まれていません。
試み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);
}));
}
試み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)あなたは必ずあなたのPDFビューアは、src URLにbase64エンコードデータを受け入れるんしていますか? 2)サーバーはどのようにローカルドライブからデータを取得しますか?ユーザーがファイルを選択してから、AJAX経由でサーブレットにアップロードすることをお勧めします。 –
ユーザーはデータベース内のレコードを選択しており、そのレコードにはローカルディレクトリを指すURLがあります。次に、サーバーはローカルURLからデータを読み取り、それをバイトに変換し、応答を介してクライアントに転送します。私は思っていた*それは働いていたが、私は半完成で新しいウィンドウで文書を開くことができた。 pdfが表示され、正しいページ数ですが、各ページは完全に空白です。 PDFビューアについては、私はクロムのデフォルトを使用しています。 –
コンテンツタイプのバイナリ[Blob](https://developer.mozilla.org/en/US/docs/Web/API/Blob)を作成し、[オブジェクトURL](https: /developer.mozilla.org/en-US/docs/Web/API/URL/createObjectURL)、iframeにロードします。 – Rudie