問題タブ [pdfobject]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
0 に答える
1369 参照

javascript - base64 pdf 用のブラウザー組み込み PDF ビューアーでファイル名をカスタマイズする方法

次のような base64 文字列から PDF を埋め込んでいます。

これは、Firefox と Chrome の両方で機能します。

私の問題は、pdf ダウンロード アクションのファイル名をカスタマイズできないことです。filenameパラメーター ( 'data:application/pdf;filename=MY_CUSTOM_FILENAME.pdf;...) を使用していますが、無視されていることに注意してください。

Firefox では、次の警告が表示されます (関連するコードはこちら)。

「getPDFFileNameFromURL: パフォーマンス上の理由から、"data:" URL を無視します。」

また、pdf のファイル名はデフォルトですdocument.pdf

Chrome では警告は表示されませんが、ファイル名はデフォルトのままですdownload.pdf

では、どうすればファイル名をカスタマイズできますか? それは可能ですか?

私はこれらの方法を試しましたが、失敗しました:

  • 基本的にこの投稿で行っていることを行うライブラリであるPDFObjectをチェックしました(これを書いているときに発見しました!)が、ファイル名のカスタマイズは許可されていないようです。

  • に pdf を読み込んで、<iframe>そのコンテンツを操作しようとしました。しかし、(少なくとも Firefox では) Cross Origin エラーが発生します

  • Mozilla の PDF ビューアー ( PDF.js ) もContent-Dispositionヘッダーをチェックして、pdf のファイル名を推測しているようです。HTTPリクエストを何らかの方法でシミュレートし(base64文字列を使用しているため、常にブラウザーでローカルに)、それを使用してpdfビューアーをロードすることは可能でしょうか?

PDF.jsを直接使用することで解決できることはわかっていますが、可能であれば、この依存関係を避けたいと思います (また、コーディングも実装が簡単ではないため)。最後に、ファイル名をカスタマイズしたいだけです!

ありがとう!


編集: 以下のコード スニペットは Chrome では機能しません (「data:application/pdf;filename=MY_CUSTOM_FILENAME.pdf;base64,....」をプラグインとして読み込むことができませんでした。プラグインが読み込まれているフレームがサンドボックス化されているためです。 .) ですが、plan .html ファイルを開くと機能します。


編集 2: 解決策を見つけましたが、Firefox でのみ動作します。

ここで説明されbase64ているように文字列をに変換し、これを Url に変換して、この URL にパラメーターを追加します (ここで説明されているように「#」を使用)。Blob Blobfilename

したがって、loadPdf()関数は次のとおりです。

Firefox の Pdf ビューアーからダウンロードすると、MY_CUSTOM_FILENAME.pdf が正常に表示されます。

しかし Chrome では、Blob URL のハッシュが表示されます。と:

この観点からの他のヒントはありますか?