5

ユーザーが保存することを選択したときに、カスタムファイル名でプロンプトを表示するインライン PDF を動的に作成しようとしています。documentationによると、saveasname属性は私が望むことを行う必要があります。

(format="PDF" のみ) ユーザーがブラウザーに書き込まれた PDF ファイルを保存するときに [名前を付けて保存] ダイアログに表示されるファイル名。

ただし、IE 9 と Firefox 13.0.1 の両方で発生しているのは、SaveAs ダイアログに表示されるファイル名が私の CF テンプレートと同じですが、拡張子が PDF になっていることです。(つまり、私のコードは入っmakepdf.cfmていて、SaveAs は を保存するように促しますmakepdf.pdf。) ただし、Chrome では完全に機能します。(すべて Windows 7 で。)

PDFを作成するための私のコードは次のとおりです。

<cfdocument format="pdf" bookmark="true" saveasname="MyReport.pdf">

コンテンツの性質とコンテンツ タイプを明示的に宣言すると、次のようになります。

<cfheader name="Content-Disposition" value="inline; filename=MyReport.pdf">
<cfcontent type="application/x-pdf">
<cfdocument format="pdf" bookmark="true" saveasname="MyReport.pdf">
  • Chrome で「Content-Disposition」が 2 回宣言されていると表示される
  • Firefox で PDF ファイルが破損していると表示される
  • IEはそれを無視します(それでも正しいファイル名は表示されません)

ヘッダーだけに頼るなら

<cfheader name="Content-Disposition" value="inline; filename=MyReport.pdf">
<cfcontent type="application/x-pdf">
<cfdocument format="pdf" bookmark="true">

コードの最初のスニペットと同じ動作が得られます。

インラインで表示するのではなく、ブラウザにダウンロードを促す方法を知っています。すべてが期待どおりに機能しますが、それは望ましい動作ではありません。

ファイル名に時刻と日付を使用する必要がありますが、エンド ユーザーはファイルを上書きしないようにするのに十分な知識がありません (ファイルを保存することを選択した場合)。

IE と Firefox に本来の動作をさせるために欠けているものはありますか? これを行う他のブラウザは何ですか?モバイルサファリ?

4

3 に答える 3

3

INLINE ではなく、必ず ATTACHMENT を使用してください。

IE は INLINE が好きではなく、単語文書を読み取り専用として開き、指定したファイル名を想定しません。

例:

<cfheader name="content-disposition" value="attachment; filename=#filename#.doc" charset="utf-8">

いいえ

<cfheader name="content-disposition" value="inline; filename=#filename#.doc" charset="utf-8">
于 2014-03-19T15:36:51.133 に答える
3

問題は、「filename = xxx」が実際には「添付ファイル」の配置を意図していたようであり、すべてのブラウザー PDF プラグインがそれをインラインの「名前を付けて保存」を指定するメカニズムとして認識しているわけではありません。

それらすべてに好みのファイル名を使用させる別の方法は、Web サーバーの書き換えルールを使用して URL を操作することです。簡単な例として、pdf を生成してインラインで提供するためのスクリプトがあるとします: pdf.cfm

<cfheader name="Content-Disposition" value="inline">
<cfdocument format="PDF" mimetype="application/pdf">Test</cfdocument>

次に、フォーム/pdf/myfilenameの URL に一致する書き換えルールを作成し、それらをpdf.cfmに渡します。IIS7 では、次のようになります。

<rule name="Inline PDF SaveAs" stopProcessing="true">
    <match url="^/pdf/[\w-]+$" ignoreCase="true" />
    <action type="Rewrite" url="/pdf.cfm" appendQueryString="false" />
</rule>

これは、英数字、アンダースコア、およびハイフン文字のみを含むファイル名と一致します。スペースや無効なファイル名文字を許可したくないでしょう。

/pdf/myreportにアクセスすると、プラグインによって PDF がインラインで表示され、保存すると、デフォルトのファイル名はmyreport.pdfになります。

検索エンジンの安全な URL または「ルート」をサポートするフレームワークを使用している場合は、Web サーバーの書き換えを必要とせずに同じことを行うことができます。

更新: 実際には、URL 書き換えを使用する必要はありません。スラッシュを追加してから、目的のファイル名を CF スクリプト URL に追加するだけです。

/pdf.cfm/myreport

プラグインは、最後のスラッシュの後に来るものを「名前を付けて保存...」の名前として使用します。

于 2012-07-23T09:12:09.940 に答える