14

CFM ページで生成された HTML を PDF に変換し、ページに移動するときに標準の「名前を付けて保存」プロンプトをユーザーに表示させたいと考えています。

4

4 に答える 4

18

cfdocumentタグ(format = "PDF"を使用)を使用して、生成するページの周囲にPDFを配置してPDFを生成する必要があります。ファイル名属性を指定する必要があります。そうしないと、ドキュメントはブラウザに直接ストリーミングされます。

コンテンツをPDFとして保存した後、cfheaderとcfcontentを組み合わせて使用​​して、PDFを添付ファイルとして出力し(「名前を付けて保存」)、ファイルを応答ストリームに追加します。また、cfcontentタグにdeletefile = "Yes"を追加して、ファイルシステムからファイルをクリーンに保ちます。

<cfdocument format="PDF" filename="file.pdf" overwrite="Yes">
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
    <title>Hello World</title>
</head>
<body>
    Hello World
</body>
</html>
</cfdocument>
<cfheader name="Content-Disposition" value="attachment;filename=file.pdf">
<cfcontent type="application/octet-stream" file="#expandPath('.')#\file.pdf" deletefile="Yes">

余談ですが、以下の例ではファイル名にfile.pdfを使用していますが、競合状態に起因する問題を回避するために、ファイル名にランダムまたはセッションで生成された文字列を使用することをお勧めします。

于 2008-09-16T16:43:10.407 に答える
4

PDF の保存をまったく避けたい場合は、ファイル名なしで cfdocument を使用すると、cfheader と cfcontent を使用せずに (flashpaper の) PDF がブラウザに直接送信されます。

警告: cfheader/cfcontent を使用する場合と同様に、キャッシュがブラウザーにフラッシュされる前にこれを行う必要があります。これは、ファイルを保存する必要なく基本的に同じことを行うためです。

コンテンツを取得するには、おそらく同じ呼び出し/インクルード/その他をラップした cfsavecontent を使用します。2 つの主要な例外を除いて、ページを生成します。cfdocument は外部スタイルシートに問題があるようです。そのため、インクルードを使用してスタイルをドキュメントに直接配置することをお勧めします。代わりに @import を使用してみることができます -- 一部の人には有効です。また、画像への相対リンクは壊れることがあるので注意が必要です。

于 2008-09-16T17:59:32.720 に答える
3

この<cfdocument>アプローチは、それを実現するための認可された方法ですが、既存の PDF ドキュメントを操作する方法で可能なすべてを提供するわけではありません。事前に設計された印刷解像度の PDF テンプレートを使用してクーポンを生成する必要があるプロジェクトがありました。 <cfdocument>HTML にビットマップ画像が埋め込まれている場合のみ出力を概算できます。確かに、大きな画像を作成して HTML で拡大縮小することにより、印刷解像度を偽造することはできましたが、元のファイルは素晴らしくきれいなベクター画像ファイルであり、代わりにそれを使用したかったのです。

私は仕事を成し遂げるために のコピーを使用する<cfx_pdf>ことになりました。( Developer's Site , CF Tag Store ) Java PDF ライブラリの CF ラッパーで、既存の PDF ドキュメントを操作できます。これにより、PDF フォームへの入力、権限の設定、ファイルのマージ、ベクター グラフィックス、テーブル、テキストの描画、カスタム フォントの使用、などなど。もしあなたがそれを喜んで使っていれば、かなり素晴らしい結果を得ることができます。

1 つの欠点は、開発者がこの製品を長い間放置していたように見えることです。開発者サイトの著作権は 2003 年のままで、ColdFusion MX 6.1 以降については何も言及されていません。いくつかのバグを修正し、必要に応じて機能させるために、暗号化されたテンプレートのいくつかを壊す必要がありました。とはいえ、強力なツールです。

于 2008-09-17T22:22:07.900 に答える
1

私は ColdFusion にはあまり詳しくありませんが、ユーザーがアプリケーション/オクテット ストリームを要求したときにページの Content-Type を設定する必要があります。これにより、毎回ダウンロードが求められます。

お役に立てれば!

于 2008-09-16T16:05:04.803 に答える