web-dev-qa-db-ja.com

HTMLをに変換する PDF .NETで

HTMLの内容を関数に渡してPDFを生成したいのですが。私はこのためにiTextSharpを使用しましたが、テーブルに遭遇してレイアウトが乱雑になったときにはうまく機能しません。

もっと良い方法はありますか?

381
SandHurst

wkhtmltopdf を試してください。これは私がこれまで見つけた中で最高のツールです。

.NETの場合、wkhtmltopdfコマンドラインユーティリティを簡単に呼び出すには、この 小さなライブラリ を使用します。

180
Marko

編集:新しい提案PdfSharpを使用したPDFのHTMLレンダラー

(wkhtmltopdfを試して、それを回避することを提案した後)

HtmlRenderer.PdfSharpは、100%完全C#管理コード簡単、スレッドセーフ、そして最も重要なFREE新しいBSDライセンスソリューションです。 。

使用法

  1. HtmlRenderer.PdfSharp nugetパッケージをダウンロードしてください。
  2. メソッド例を使用してください。

    public static Byte[] PdfSharpConvert(String html)
    {
        Byte[] res = null;
        using (MemoryStream ms = new MemoryStream())
        {
            var pdf = TheArtOfDev.HtmlRenderer.PdfSharp.PdfGenerator.GeneratePdf(html, PdfSharp.PageSize.A4);
            pdf.Save(ms);
            res = ms.ToArray();
        }
        return res;
    }
    

非常に良い代替無料版 / iTextSharp

バージョン4.1.6までiTextSharpはLGPLライセンスの下でライセンスされ、バージョン4.16まで(またはフォークもあるかもしれません)のパッケージとして利用可能であり、自由に使用することができます。もちろん、誰かが継続的な5+ 有料版を使うことができます

私は自分のプロジェクトにwkhtmltopdfソリューションを統合しようとしましたが、たくさんのハードルがありました。

私は個人的には、以下の理由でHosted Enterpriseアプリケーションでwkhtmltopdfベースのソリューションを使用しないでください。

  1. まず第一に、wkhtmltopdfはC#ではなくC++で実装されています、そして特にあなたのプロジェクトの32ビットと64ビットのビルドを切り替えるとき、あなたはあなたのC#コード内にそれを埋め込む様々な問題を経験するでしょう。異なるマシンでの "無効なフォーマットの例外"を回避するためだけに、条件付きプロジェクトの作成などを含むいくつかの回避策を試してみた。
  2. あなたがあなた自身の仮想マシンを管理すれば大丈夫です。しかし、プロジェクトが(AzureTuesPenchin作者のようにAzureでは実際には不可能です)、Elastic Beanstalkなどのように制限された環境で)実行している場合wkhtmltopdfのみが機能するようにその環境を構成します。
  3. wkhtmltopdfはサーバー内にファイルを作成しているので、ユーザーの許可を管理し、wkhtmltopdfが実行されている場所への「書き込み」アクセス権を付与する必要があります。
  4. Wkhtmltopdfはスタンドアロンアプリケーションとして実行されているため、はあなたのIISアプリケーションプールによって管理されていません。そのため、他のマシン上のサービスとしてホストする必要があります。そうしないと、本番サーバー内で処理の急増とメモリ消費が発生します。
  5. それは一時ファイルを使用してpdfを生成します、そしてディスクI/Oが本当に遅いAWS EC2のような場合、それは大きなパフォーマンス問題です。
  6. 最も嫌われた "DLL 'wkhtmltox.dll"をロードできない "エラーが多くのユーザーから報告されています。

--- PRE編集セクション---

より簡単なアプリケーション/環境でHTMLからPDFを生成したい人のために私は提案として私の古い記事を残します。

TuesPechkin

https://www.nuget.org/packages/TuesPechkin/ /

または特にMVC Webアプリケーション(しかし、私はあなたがどんな.netアプリケーションでもそれを使うかもしれないと思う)

ロタティバ

https://www.nuget.org/packages/Rotativa/ /

両方ともhtmlをpdfに変換するために wkhtmtopdf バイナリを利用します。これはcssスタイルシートを解析できるようにページのレンダリングにWebkitエンジンを使用します

これらはC#とのシームレスで使いやすい統合を提供します。

Rotativaは任意のRazorビューから直接PDFを生成することもできます。

さらに実社会のWebアプリケーションでは、スレッドの安全性なども管理します。

169

HTMLからPDFへのコンバータのほとんどは、HTMLの解析とレンダリングを行うためにIEに依存しています。これはユーザーが自分のIEを更新するときに壊れる可能性があります。 ここで はIEに依存しないものです。

コードは次のようなものです。

EO.Pdf.HtmlToPdf.ConvertHtml(htmlText, pdfFileName);

他の多くのコンバーターと同様に、テキスト、ファイル名、またはURLを渡すことができます。結果はファイルまたはストリームに保存できます。

29
Jason

私は最近HTMLからPDFへの変換に関してPoCを行い、自分の結果を共有したいと思いました。

私のこれまでのお気に入りは OpenHtmlToPdf です。

このツールの利点:

  • 非常に優れたHTML互換性(例えば、私の例ではテーブルが複数のページにわたる場合にテーブルヘッダを正しく繰り返す唯一のツールでした)
  • 流暢なAPI
  • 無料でオープンソース( Creative Commons Attribution 3.0 license
  • NuGet経由で利用可能

テストした他のツール:

26
Markus

NReco を強くお勧めします。無料版と有料版があり、本当に価値があります。バックグラウンドでwkhtmtopdfを使用しますが、アセンブリが1つだけ必要です。素晴らしいです。

使用例

NuGet からインストールしてください。

var htmlContent = String.Format("<body>Hello world: {0}</body>", DateTime.Now);
var pdfBytes = (new NReco.PdfGenerator.HtmlToPdfConverter()).GeneratePdf(htmlContent);

免責事項:私は開発者ではなく、プロジェクトのファンに過ぎません:)

20
Kim Tranjan

Winnovative HTML入力をサポートする.Net PDFライブラリを提供する。彼らは無制限の 無料トライアル を提供しています。プロジェクトのデプロイ方法によっては、これで十分な場合があります。

13
Stewart

私はExpertPDFを使いました HtmlからPdfへのコンバータ まともな仕事をします。残念ながら、無料ではありません。

7
charpdevel0p3r

必須PDF を使用して HTMLをPDFC#sample に変換できます。ここにリンクされているサンプルはASP.NETベースですが、このライブラリはWindowsフォーム、WPF、ASP.NET Webフォーム、およびASP.NET MVCから使用できます。このライブラリでは、Internet Explorer(デフォルト)とWebKit(最適な出力)の異なるHTMLレンダリングエンジンを使用することができます。

資格がある場合は、 コミュニティライセンス プログラムを通じて、一連のコントロール全体を無料で(商用アプリケーションでも)入手できます。コミュニティライセンスは完全な製品であり、制限や透かしはありません。

注意:私はSyncfusionに勤めています。

7
Davis Jebaraj

新しいWebベースの文書生成アプリもあります - DocRaptor.com 。使いやすいようで、そして無料のオプションがあります。

7
Paul

あなたが本当に本当の.Net PDFライブラリを必要としないのであれば、たくさんの PDF toolsへの無料のHTML があります。ライン。

1つの解決策はそれらのうちの1つを選んでからC#でそれの周りに薄いラッパーを書くことでしょう。たとえば、 このチュートリアル で行ったように。

6
Stewart

2018年の更新、そして標準のHTML + CSS = PDFの式を使ってみよう!

HTMLからPDFへの要求には良い知らせがあります。 この回答が示したように W3C標準 css-break-3 は問題を解決する ...これは2017年または2018年に決定版の勧告に変わることを計画した勧告候補です。テスト後.

それほど標準的でないものとして、 print-css.rocks で示されるように、C#用のプラグインを使った解決策があります。

6
Peter Krauss

以下は、iTextSharpを使用してhtml + cssをPDFに変換する例です(iTextSharp + itextsharp.xmlworker)。

using iTextSharp.text;
using iTextSharp.text.pdf;
using iTextSharp.tool.xml;


byte[] pdf; // result will be here

var cssText = File.ReadAllText(MapPath("~/css/test.css"));
var html = File.ReadAllText(MapPath("~/css/test.html"));

using (var memoryStream = new MemoryStream())
{
        var document = new Document(PageSize.A4, 50, 50, 60, 60);
        var writer = PdfWriter.GetInstance(document, memoryStream);
        document.Open();

        using (var cssMemoryStream = new MemoryStream(System.Text.Encoding.UTF8.GetBytes(cssText)))
        {
            using (var htmlMemoryStream = new MemoryStream(System.Text.Encoding.UTF8.GetBytes(html)))
            {
                XMLWorkerHelper.GetInstance().ParseXHtml(writer, document, htmlMemoryStream, cssMemoryStream);
            }
        }

        document.Close();

        pdf = memoryStream.ToArray();
}
4
Sergey Malyutin

ABCpdf.NET(http://www.websupergoo.com/abcpdf-5.htm)

使ってお勧めします。

非常に優れたコンポーネントです。画像のようにWebページをPDFに変換するだけでなく、テキスト、画像、書式設定なども実際に変換します。

無料ではありませんが、安いです。

それはあなたが持っている他のどんな要求にも左右される。

WebBrowserコントロールを使用してHtmlを読み込み、次にPrintメソッドを使用してローカルにインストールされたPDFプリンタに印刷することは、非常に単純ですが簡単には展開できないソリューションです。利用可能な無料のPDFプリンタがいくつかあり、WebBrowserコントロールは.Netフレームワークの一部です。

編集:あなたがHTMLである場合XTMLあなたは仕事をするために PDFizer を使用することができます。

3
Rune Grimstad

私は以下のライブラリがhtmlをpdfに変換するのにより効果的であるとわかりました。
nuget https://www.nuget.org/packages/Select.HtmlToPdf/

PDFビジョン 良いです。ただし、それを使用するには完全信頼が必要です。私はすでにメールを送って、なぜ私のHTMLがサーバー上で変換されないのかと尋ねましたが、localhost上ではうまく機能しました。

3
Mike

あなたがpdfで完璧なhtmlレンダリングを必要とするならば、あなたは商業ライブラリを使う必要があります。

ExpertPdf HTMLからPDFへの変換 は非常に使いやすく、最新のhtml5/css3をサポートしています。 URL全体をpdfに変換することもできます。

using ExpertPdf.HtmlToPdf; 
byte[] pdfBytes = new PdfConverter().GetPdfBytesFromUrl(url);

またはHTML文字列:

using ExpertPdf.HtmlToPdf; 
byte[] pdfBytes = new PdfConverter().GetPdfBytesFromHtmlString(html, baseUrl);

生成されたPDFドキュメントをディスク上のファイルのストリームに直接保存することもできます。

2
charpdevel0p3r

私はRotativaパッケージの作者です。かみそりビューから直接PDFファイルを作成することができます。

https://www.nuget.org/packages/Rotativa/ /

ModelおよびViewBagコンテナからのデータでかみそりビューを使用できるので、使用するのは簡単で、あなたはレイアウトを完全に制御できます。

AzureでSaaSバージョンを開発しました。それはWebApiまたはあらゆる.Netアプリ、サービス、Azure Webサイト、Azure Webジョブ、それが.Netを実行するものすべてからそれを使用することをさらに簡単にします。

http://www.rotativahq.com/ /

利用可能な無料のアカウント。

2
Giorgio Bozio

私もしばらく前にこれを探していました。私はHTMLDOCに出会いました http://www.easysw.com/htmldoc/ は引数としてHTMLファイルを取り、そこからPDFを吐き出す無料のオープンソースのコマンドラインアプリです。 。私のサイドプロジェクトではかなりうまくいきましたが、実際に必要なものによって異なります。

それを作っている会社はコンパイルされたバイナリを売っています、しかしあなたはソースから無料でダウンロードしてコンパイルして、そして無料でそれを使うことができます。私はかなり最近のリビジョン(バージョン1.9用)をコンパイルすることができました、そして私は数日以内にそれのためにバイナリインストーラーをリリースするつもりです。

編集(2/25/2014):ドキュメントとサイトは http://www.msweet.org/projects.php?Z1 に移動したようです。

2
enriquein

ここに ラッパー pruizによるwkhtmltopdf.dllの/

そして ラッパー Codaxyによるwkhtmltopdf.exe
- また nugetについて

1
Garfield

これは 無料のライブラリ であり、とても簡単に動作します。 OpenHtmlToPdf

string timeStampForPdfName = DateTime.Now.ToString("yyMMddHHmmssff");

string serverPath = System.Web.Hosting.HostingEnvironment.MapPath("~/FolderName");
string pdfSavePath = Path.Combine(@serverPath, "FileName" + timeStampForPdfName + ".FileExtension");


//OpenHtmlToPdf Library used for Performing PDF Conversion
var pdf = Pdf.From(HTML_String).Content();

//FOr writing to file from a ByteArray
 File.WriteAllBytes(pdfSavePath, pdf.ToArray()); // Requires System.Linq
1

HiQPdfソフトウェアの代表として、私は最善の解決策が HiQPdf HTMLからPDF .NET for .NETへの変換 であると思います。それは市場で最も先進的なHTML5、CSS3、SVGとJavaScriptレンダリングエンジンを含みます。 HTMLからPDFライブラリへの無料版 _もあり、これを使用して最大3個のPDFページまで無料で作成できます。 HTMLページからbyte []としてPDFを生成するための最小限のC#コードは次のとおりです。

HtmlToPdf htmlToPdfConverter = new HtmlToPdf();

// set PDF page size, orientation and margins
htmlToPdfConverter.Document.PageSize = PdfPageSize.A4;
htmlToPdfConverter.Document.PageOrientation = PdfPageOrientation.Portrait;
htmlToPdfConverter.Document.Margins = new PdfMargins(0);

// convert HTML to PDF 
byte[] pdfBuffer = htmlToPdfConverter.ConvertUrlToMemory(url);

ASP.NETとMVCの両方に関するより詳細な例は、 HiQPdf HTMLからPDFへのコンバータの例のリポジトリ にあります。

1
HiQPdf

私が見つけたJavascriptのPDFや、レンダリングされたビューやhtmlページのスタイルを生成するのに最適なツールは phantomJS です。

サンプルフォルダのexeのルートにあるrasterize.js関数で.exeファイルをダウンロードして、解の中に入れます。

それはあなたがそのファイルを開かずにどんなコードででもファイルをダウンロードすることを可能にしますまたそれはスタイルと特別にjqueryが適用されるときそれもファイルをダウンロードすることを可能にします。

次のコードはPDF Fileを生成します。

public ActionResult DownloadHighChartHtml()
{
    string serverPath = Server.MapPath("~/phantomjs/");
    string filename = DateTime.Now.ToString("ddMMyyyy_hhmmss") + ".pdf";
    string Url = "http://wwwabc.com";

    new Thread(new ParameterizedThreadStart(x =>
    {
        ExecuteCommand(string.Format("cd {0} & E: & phantomjs rasterize.js {1} {2} \"A4\"", serverPath, Url, filename));
                           //E: is the drive for server.mappath
    })).Start();

    var filePath = Path.Combine(Server.MapPath("~/phantomjs/"), filename);

    var stream = new MemoryStream();
    byte[] bytes = DoWhile(filePath);

    Response.ContentType = "application/pdf";
    Response.AddHeader("content-disposition", "attachment;filename=Image.pdf");
    Response.OutputStream.Write(bytes, 0, bytes.Length);
    Response.End();
    return RedirectToAction("HighChart");
}



private void ExecuteCommand(string Command)
{
    try
    {
        ProcessStartInfo ProcessInfo;
        Process Process;

        ProcessInfo = new ProcessStartInfo("cmd.exe", "/K " + Command);

        ProcessInfo.CreateNoWindow = true;
        ProcessInfo.UseShellExecute = false;

        Process = Process.Start(ProcessInfo);
    }
    catch { }
}


private byte[] DoWhile(string filePath)
{
    byte[] bytes = new byte[0];
    bool fail = true;

    while (fail)
    {
        try
        {
            using (FileStream file = new FileStream(filePath, FileMode.Open, FileAccess.Read))
            {
                bytes = new byte[file.Length];
                file.Read(bytes, 0, (int)file.Length);
            }

            fail = false;
        }
        catch
        {
            Thread.Sleep(1000);
        }
    }

    System.IO.File.Delete(filePath);
    return bytes;
}
1
Shan Khan

PDFmyURLは最近、Webページ/ HTMLからPDFへの変換用の.NETコンポーネントもリリースしました。これは非常にユーザーフレンドリーなインターフェースを持っています、例えば:

PDFmyURL pdf = new PDFmyURL("yourlicensekey");
pdf.ConvertURL("http://www.example.com", Application.StartupPath + @"\example.pdf");

ドキュメンテーション: PDFmyURL .NETコンポーネントドキュメンテーション

免責事項:私はPDFmyURLを所有する会社で働いています

0
user1914292

Itextsharp dllを使用しているのであれば、サードパーティdll(プラグイン)を追加する必要はありません。xmlworkerを使用する代わりにhtmlworkerを使用していると思います。httmlを簡単にpdfに変換できます。

いくつかのCSSはそれらが動作しないでしょう サポートされているCSS
例を使用した詳細説明の参照ここをクリック


        MemoryStream memStream = new MemoryStream();
        TextReader xmlString = new StringReader(outXml);
        using (Document document = new Document())
        {
            PdfWriter writer = PdfWriter.GetInstance(document, memStream);
            //document.SetPageSize(iTextSharp.text.PageSize.A4);
            document.Open();
            byte[] byteArray = System.Text.Encoding.UTF8.GetBytes(outXml);
            MemoryStream ms = new MemoryStream(byteArray);
            XMLWorkerHelper.GetInstance().ParseXHtml(writer, document, ms, System.Text.Encoding.UTF8);
            document.Close();
        }

        Response.ContentType = "application/pdf";
        Response.AddHeader("content-disposition", "attachment;filename=" + filename + ".pdf");
        Response.Cache.SetCacheability(HttpCacheability.NoCache);
        Response.BinaryWrite(memStream.ToArray());
        Response.End();
        Response.Flush();
0
Merbin Joe

さて、この技術を使って…….

Srcは here からダウンロードできます。 nant が必要です

0
jjchiw

あなたがユーザーにブラウザでレンダリングされたページのpdfをダウンロードさせたいなら、その問題に対する最も簡単な解決策は、

window.print(); 

クライアント側では、現在のページのPDFを保存するようにユーザーに促します。リンクスタイルでpdfの外観をカスタマイズすることもできます

<link rel="stylesheet" type="text/css" href="print.css" media="print">

印刷中にprint.cssがHTMLに適用されます。

制限

ファイルをサーバー側に保存することはできません。ユーザーは手動でページを保存しなければならなかったよりもページを印刷するように促します。ページはタブでレンダリングされる必要があります。

0

WebBrowserコントロールを使用できるもう1つのトリックは、以下の完全に機能するコードです

私の場合、テキストボックスコントロールにURLを割り当てる

  protected void Page_Load(object sender, EventArgs e)
{

   txtweburl.Text = "https://www.google.com/";

 }

以下は、スレッドを使用して画面を生成するためのコードです

  protected void btnscreenshot_click(object sender, EventArgs e)
  {
    //  btnscreenshot.Visible = false;
    allpanels.Visible = true;
    Thread thread = new Thread(GenerateThumbnail);
    thread.SetApartmentState(ApartmentState.STA);
    thread.Start();
    thread.Join();

}

private void GenerateThumbnail()
{
    //  btnscreenshot.Visible = false;
    WebBrowser webrowse = new WebBrowser();
    webrowse.ScrollBarsEnabled = false;
    webrowse.AllowNavigation = true;
    string url = txtweburl.Text.Trim();
    webrowse.Navigate(url);
    webrowse.Width = 1400;
    webrowse.Height = 50000;

    webrowse.DocumentCompleted += webbrowse_DocumentCompleted;
    while (webrowse.ReadyState != WebBrowserReadyState.Complete)
    {
        System.Windows.Forms.Application.DoEvents();
    }
}

以下のコードでは、ダウンロード後にpdfファイルを保存しています

        private void webbrowse_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
    // btnscreenshot.Visible = false;
    string folderPath = Server.MapPath("~/ImageFiles/");

    WebBrowser webrowse = sender as WebBrowser;
    //Bitmap bitmap = new Bitmap(webrowse.Width, webrowse.Height);

    Bitmap bitmap = new Bitmap(webrowse.Width, webrowse.Height, PixelFormat.Format16bppRgb565);

    webrowse.DrawToBitmap(bitmap, webrowse.Bounds);


    string Systemimagedownloadpath = System.Configuration.ConfigurationManager.AppSettings["Systemimagedownloadpath"].ToString();
    string fullOutputPath = Systemimagedownloadpath + Request.QueryString["VisitedId"].ToString() + ".png";
    MemoryStream stream = new MemoryStream();
    bitmap.Save(fullOutputPath, System.Drawing.Imaging.ImageFormat.Jpeg);



    //generating pdf code 
     Document pdfDoc = new Document(new iTextSharp.text.Rectangle(1100f, 20000.25f));
     PdfWriter writer = PdfWriter.GetInstance(pdfDoc, Response.OutputStream);
     pdfDoc.Open();
     iTextSharp.text.Image img = iTextSharp.text.Image.GetInstance(fullOutputPath);   
     img.ScaleAbsoluteHeight(20000);
     img.ScaleAbsoluteWidth(1024);     
     pdfDoc.Add(img);
     pdfDoc.Close();
     //Download the PDF file.
     Response.ContentType = "application/pdf";
     Response.AddHeader("content-disposition", "attachment;filename=ImageExport.pdf");
     Response.Cache.SetCacheability(HttpCacheability.NoCache);
     Response.Write(pdfDoc);
     Response.End();


}

詳細については、私の最も古い投稿を参照することもできます: Webページへのナビゲーションがキャンセルされ、asp.net Webフォームにメッセージが表示されました

0

Winnovative HTML to PDF converterを使用すると、HTML文字列を1行で変換できます。

byte[] outPdfBuffer = htmlToPdfConverter.ConvertHtml(htmlString, baseUrl);

ベースURLは、HTML文字列内の相対URLによって参照される画像を解決するために使用されます。あるいは、HTMLのフルURLを使用するか、または画像タグにsrc = "data:image/png"を使用して画像を埋め込むことができます。

Winnovativeコンバーターに関する 'fubaar'ユーザーのコメントに答えて、修正が必要です。コンバーターはレンダリングエンジンとしてIEを使用しません。実際にはインストールされているソフトウェアには依存せず、レンダリングはWebKitエンジンと互換性があります。

0
Winnovative

https://grabz.it で解決策を試すことを提案します。

彼らはスクリーンショットをキャッチし、簡単で柔軟なアプローチでそれを操作するニース.NET APIを提供します。

アプリで使用するには、最初に key + secret および download を取得する必要があります(無料です)。

今、それを使用する短い例。

APIを使用するには、まずGrabzItClientクラスのインスタンスを作成し、GrabzItアカウントからコンストラクターにアプリケーションキーとアプリケーションシークレットを渡す必要があります(以下の例を参照)。

//Create the GrabzItClient class
//Replace "APPLICATION KEY", "APPLICATION SECRET" with the values from your account!
private GrabzItClient grabzIt = GrabzItClient.Create("Sign in to view your Application Key", "Sign in to view your Application Secret");

次に、HTMLをPDFに変換するために必要なことをすべて行います。

grabzIt.HTMLToPDF("<html><body><h1>Hello World!</h1></body></html>");

画像に変換することもできます:

grabzIt.HTMLToImage("<html><body><h1>Hello World!</h1></body></html>");     

次に、画像を保存する必要があります。使用可能な2つの保存メソッドのいずれかを使用できます。公開アクセス可能なコールバックハンドルが使用可能な場合はSave、使用できない場合はSaveToです。 ドキュメントを確認してください 詳細については。

0
Johnny

Spireをチェックすることもできます。これは、この単純なコードでHTML to PDFを作成することを可能にします。

 string htmlCode = "<p>This is a p tag</p>";

//use single thread to generate the pdf from above html code
Thread thread = new Thread(() =>
{ pdf.LoadFromHTML(htmlCode, false, setting, htmlLayoutFormat); });
thread.SetApartmentState(ApartmentState.STA);
thread.Start();
thread.Join();

// Save the file to PDF and preview it.
pdf.SaveToFile("output.pdf");
System.Diagnostics.Process.Start("output.pdf");

詳細な記事:asp.net C#でHTMLをPDFに変換する方法 [

0
Satinder singh

HTMLを直接PDFに解析する代わりに、HTMLページのビットマップを作成してから、たとえば iTextSharp を使用してPDFにビットマップを挿入できます。

URLのビットマップを取得するコードを次に示します。 SOのどこかで見つけたので、ソースを見つけたらリンクします。

public System.Drawing.Bitmap HTMLToImage(String strHTML)
{
    System.Drawing.Bitmap myBitmap = null;

    System.Threading.Thread myThread = new System.Threading.Thread(delegate()
    {
        // create a hidden web browser, which will navigate to the page
        System.Windows.Forms.WebBrowser myWebBrowser = new System.Windows.Forms.WebBrowser();
        // we don't want scrollbars on our image
        myWebBrowser.ScrollBarsEnabled = false;
        // don't let any errors shine through
        myWebBrowser.ScriptErrorsSuppressed = true;
        // let's load up that page!    
        myWebBrowser.Navigate("about:blank");

        // wait until the page is fully loaded
        while (myWebBrowser.ReadyState != System.Windows.Forms.WebBrowserReadyState.Complete)
            System.Windows.Forms.Application.DoEvents();

        myWebBrowser.Document.Body.InnerHtml = strHTML;

        // set the size of our web browser to be the same size as the page
        int intScrollPadding = 20;
        int intDocumentWidth = myWebBrowser.Document.Body.ScrollRectangle.Width + intScrollPadding;
        int intDocumentHeight = myWebBrowser.Document.Body.ScrollRectangle.Height + intScrollPadding;
        myWebBrowser.Width = intDocumentWidth;
        myWebBrowser.Height = intDocumentHeight;
        // a bitmap that we will draw to
        myBitmap = new System.Drawing.Bitmap(intDocumentWidth - intScrollPadding, intDocumentHeight - intScrollPadding);
        // draw the web browser to the bitmap
        myWebBrowser.DrawToBitmap(myBitmap, new System.Drawing.Rectangle(0, 0, intDocumentWidth - intScrollPadding, intDocumentHeight - intScrollPadding));
    });
    myThread.SetApartmentState(System.Threading.ApartmentState.STA);
    myThread.Start();
    myThread.Join();

    return myBitmap;
}
0
Jimmy Mattsson

追加のDLLを使用せずに HTMLからASP.NETからPDF アプリケーションへの変換のためのこのPDF Duo .Net変換コンポーネントを試してみてください。

HTML文字列またはファイルを渡すか、ストリーミングしてPDFを生成することができます。以下のコードを使用してください(例C#)。

string file_html = @"K:\hdoc.html";   
string file_pdf = @"K:\new.pdf";   
try   
{   
    DuoDimension.HtmlToPdf conv = new DuoDimension.HtmlToPdf();   
    conv.OpenHTML(file_html);   
    conv.SavePDF(file_pdf);   
    textBox4.Text = "C# Example: Converting succeeded";   
}   

あなたが見つけることができる情報+ C#/ VBの例: http://www.duodimension.com/html_pdf_asp.net/component_html_pdf.aspx

0
Constantine