2011-07-24 12 views
1

私は、ネストされたRadGridコントロールを含む私のasp.netのページからPDFファイルの作成については、以下の許容基準があります。ページの現在のビューは、ビューステートやセッションのことを意味してPDFに変換する必要がありますASP.NETページをPDFに変換する方法は?

  1. を現在のページリクエストの情報を考慮する必要があります。これにより私には1つの選択肢しか残らない。新しいpdfポストバックが送信されたときに、現在のセッションのPage_Render()イベントハンドラでPDF変換を行います。

  2. asp.netのページレイアウトは、$(document).ready(...)の時にJQueryを使って変更されました。つまり、レンダリングされたHTMLだけでなく、PDFに変換する必要があります。それを実行して、最終的なPDFファイルに所望のレイアウト変更を加えます。例えば列アライメントなどがあります。

  3. asp.netページはIE 6以降で正しく表示されるため、使用されるPDFツールはIEレンダリングエンジンを使用する必要があります。

このようなシナリオではどのツールが役立つのかアドバイスできますか?

私はダウンロードしてツールをEvoPdfテストしたが、それは明らかに(のみFireFoxのレンダリング)をIEのレンダリングエンジンをサポートしていませんし、それを正しく作業を可能にするJavaScriptを作ることができませんでした。

私はABCPdfとWinnovetiveを評価するつもりですが、私は彼らが私が欲しいものを支持するだろうかわかりません。

上記の問題を解決するツールが見つからない場合は、クライアントスクリプトを使用してページのスクリーンショットを撮って(可能かどうかわからない)、サーバーに送信することもできます最後にその画像をpdfに変換します。

多くのおかげで、

答えて

0

winnovativeはまさに私が必要としたものでした:) EvoPdfとは違ってIEレンダリングエンジンを使用しています。

私は他のツールをテストする時間がありませんでした。

おかげ

1

で見てはいけません。

  1. は、あなたがasp.netページの後に取得したHTMLページを変換してみレンダリングされている
  2. WebToPDF.NETのJavaScript(とjQueryを)suportsは、それが問題
  3. ではありませんので、WebToPDF.NETはすべてW3Cのテストに合格(BIDIを除く)、改ページ、フォーム、リンクを含むHTML 4.01、JavaScript、XHTML 1.0、XHTML 1.1、CSS 2.1をサポートしています。
+0

私はレンダリング(たHtmlTextWriterライター)と変換メソッドを呼び出し、保護オーバーライドボイド内のhtmlを取得:

はここに、このアプローチに関連するソースコードです。問題は今、pdfがポップアップとしてこのように表示されず、一部のバイナリ情報がページに表示されるということです。どのようにそれをポップアップとして表示するにはどのような考えですか? –

+0

実際に私はバイナリ情報が何であるか理解していません...私はasp.netページのレンダリングされたHTMLコードを取得し、このコードをPDFに変換する必要があることを誓っています。結果として、あなたはPDFであるストリームを取得します。さらに、あなたはそれがあなたが望むものであれば何でもできます。ポップアップとして表示する場合は、このストリームをResponseに書き込み、コンテンツタイプを "application/pdf"として指定します – zavolokas

0

EvoPdfは(http://www.html-to-pdf.net/)ExpertPDFを開発同じチームによって開発されています。 ExpertPDFは古い製品なので、APIはほとんど同じですが、EvoPDF APIはやや洗練されています。

製品の主な違いは、ExpertPDFがローカルIEレンダリングエンジンを使用していることです。

0

Winnovative HTML to PDF Converterは、IEをレンダリングエンジンとして使用しません。 WebKitレンダリングと互換性があり、IEや他のサードパーティのツールに依存しません。

ASP.NETページのRender()メソッドをオーバーライドして現在のHTMLページを変換し、ページによってレンダリングされるHTMLコードをキャプチャできます。完全な例はC#のソースコードConvert the Current HTML Page to PDF Demoにあります。

// Controls if the current HTML page will be rendered to PDF or as a normal page 
bool convertToPdf = false; 

protected void convertToPdfButton_Click(object sender, EventArgs e) 
{ 
    // The current ASP.NET page will be rendered to PDF when its Render method will be called by framework 
    convertToPdf = true; 
} 

protected override void Render(HtmlTextWriter writer) 
{ 
    if (convertToPdf) 
    { 
     // Get the current page HTML string by rendering into a TextWriter object 
     TextWriter outTextWriter = new StringWriter(); 
     HtmlTextWriter outHtmlTextWriter = new HtmlTextWriter(outTextWriter); 
     base.Render(outHtmlTextWriter); 

     // Obtain the current page HTML string 
     string currentPageHtmlString = outTextWriter.ToString(); 

     // Create a HTML to PDF converter object with default settings 
     HtmlToPdfConverter htmlToPdfConverter = new HtmlToPdfConverter(); 

     // Set license key received after purchase to use the converter in licensed mode 
     // Leave it not set to use the converter in demo mode 
     htmlToPdfConverter.LicenseKey = "fvDh8eDx4fHg4P/h8eLg/+Dj/+jo6Og="; 

     // Use the current page URL as base URL 
     string baseUrl = HttpContext.Current.Request.Url.AbsoluteUri; 

     // Convert the current page HTML string a PDF document in a memory buffer 
     byte[] outPdfBuffer = htmlToPdfConverter.ConvertHtml(currentPageHtmlString, baseUrl); 

     // Send the PDF as response to browser 

     // Set response content type 
     Response.AddHeader("Content-Type", "application/pdf"); 

     // Instruct the browser to open the PDF file as an attachment or inline 
     Response.AddHeader("Content-Disposition", String.Format("attachment; filename=Convert_Current_Page.pdf; size={0}", outPdfBuffer.Length.ToString())); 

     // Write the PDF document buffer to HTTP response 
     Response.BinaryWrite(outPdfBuffer); 

     // End the HTTP response and stop the current page processing 
     Response.End(); 
    } 
    else 
    { 
     base.Render(writer); 
    } 
} 
関連する問題