5

以前の投稿を参照して(PDFレポートの生成

http://www.alistapart.com/articles/boomに似たソリューションを使用することにしました

どちらのリファレンスも読みたくない方のために-私はレポートを作成していて、それをPDFとして必要としています。.NETを使用してHTML->PDFルートに進むことにしました。

それで、私が望むようにHTMLファイルを取得したとしましょう。上記のページをPDFに変換する最良の方法は何ですか?本質的には、ユーザーにHTMLで「プレビュー」を表示してから、そのページをPDFに変換できるようにしてほしいと思います。私が現在実験しているライブラリはABCPdfです。

私が最初に考えたのは、ページをファイルシステムに保存し、ページ自体のイベントハンドラー中に変換ルーチンでそのURLを参照することでした。印刷の準備として、ページをレンダリングするたびにページを保存する必要があるため、これには問題があります。実際、それは逆行しているように見えます。

私の次の考えは、ページのレンダリングメソッドを使用してページをバイトストリームとしてキャプチャし、これを使用することでした(ABCPdfはHTMLストリームの変換をサポートしているため)。これが私の答えである場合、実際にページをプルする方法に迷います。ハンドラーがバイトストリームにMe.Render()を実行し、それを変換ルーチンに送信する「印刷」ボタンがありますか?それも可能ですか?

結論-ページが素敵なHTMLでレンダリングされたら、そのページのPDFへの変換をどのように初期化しますか?回避策やその他の解決策は大歓迎です。

これは「簡単な部分」でなければならないので、明らかな何かが欠けていることを願っています

4

3 に答える 3

3

わかりました、それを機能させました-そしてそれはかなり簡単でした。答えが必要かもしれない次の人にこれを渡すだけです。ページのUrlプロパティを使用して、ABCPdf addImageUrl()メソッドに送信しました。また、複数のページであるため、チェーンを使用する必要がありました。すべての助けに感謝します。

Dim oPdfDoc As New Doc()
Dim iPageID As Int32
Dim MyUrl = Request.Url

iPageID = oPdfDoc.AddImageUrl(MyUrl.AbsoluteUri)

While True
    oPdfDoc.FrameRect()
    If Not oPdfDoc.Chainable(iPageID) Then
        Exit While
    End If
    oPdfDoc.Page = oPdfDoc.AddPage()
    iPageID = oPdfDoc.AddImageToChain(iPageID)
End While

For i as Int32 = 1 To oPdfDoc.PageCount
    oPdfDoc.PageNumber = i
    oPdfDoc.Flatten()
Next

oPdfDoc.Save(Server.MapPath("test.pdf"))
oPdfDoc.Clear()
于 2010-01-04T03:51:59.093 に答える
1

私はあなたと同じ状況にあり、iTextSharpやABC PDFを含む多くのオプションを評価した後、最終的にwkhtmltopdf:http ://code.google.com/p/wkhtmltopdf/になりました。

于 2010-01-22T09:21:14.503 に答える
-2

C#からどのようにそれを行いますか?あなたは(直接)しません。

ワーカーPRINCE.EXEプロセスを生成することが、唯一のオプションである可能性があります。

PRINCE.EXEは、HTMLの「標準入力」からデータを読み書きし、PDFを「標準出力」に送信します。出力ファイル名なしでコマンドライン「%dir%\PRINCE-」を使用します。

System.Managementクラスが機能しない可能性があるため、PRINCEを生成するために別のCOMコンポーネントが必要になる場合があります。VisualBasicまたはC++を使用してCOMコンポーネントを作成します。

HTMLをデータベースに入れることは一般的に悪い考えですが、本質的に静的であるように聞こえるので、あなたの場合は問題ないかもしれません。

編集

「子PRINCE.EXE」を「ワーカーPRINCE.EXEプロセス」に変更しました。PRINCE.EXEは子プロセスである必要はないというのがおかしいと思います。

于 2009-12-30T18:35:23.377 に答える