問題タブ [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.
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
Blob
filename
したがって、loadPdf()
関数は次のとおりです。
Firefox の Pdf ビューアーからダウンロードすると、MY_CUSTOM_FILENAME.pdf が正常に表示されます。
しかし Chrome では、Blob URL のハッシュが表示されます。と:
- そのハッシュを変更することは不可能のようです
- インライン PDF をロードするために
<iframe>
( の代わりに)を使用しても、Chrome は. したがって、それを「ハッキング」する方法はありません。<object>
<embed>
この観点からの他のヒントはありますか?