.NETでHTMLをPDFに変換


425

HTMLコンテンツを関数に渡してPDFを生成したい。私はこれにiTextSharpを使用しましたが、テーブルに遭遇し、レイアウトが乱雑になるとうまく機能しません。

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


これにはGemBox.Documentを使用できます。また、HTMLファイルをPDFファイルに変換するためのサンプルコードもここにあります。
マリオZ

どのバージョンのiTextSharpを使用していますか。また、htmlを共有できますか?
Amedee Van Gasse

それでも私の追加情報の要求には答えられません。HTMLWorkerまたはXMLWorkerを使用している場合も追加してください。
アメディヴァンガッセ

.netコアはどうですか?
ピエロアルベルト

2019年9月:新しい回答を追加しました。リストされているオプションの一部は無料で、その他は有料で、一部は.netコアとして利用できます stackoverflow.com/questions/564650/...
マウリシオ・グラシアグティエレス

回答:


198

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

(wkhtmltopdfを試し、それを回避するよう提案した後)

HtmlRenderer.PdfSharpは、100%完全にC#で管理されたコードで使いやすく、スレッドセーフであり、最も重要なのは無料 新しい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ソリューションとしましたが、ハードルがたくさんありました。

私は個人的にwkhtmltopdfの使用を避けます-ベース、次の理由により、ホステッドエンタープライズアプリケーションでのソリューションのます。

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

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

より単純なアプリケーション/環境でhtmlからpdfを生成したい人のために、私は古い投稿を提案として残します。

TuesPechkin

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

または特にMVC Webアプリケーションの場合 (ただし、.netアプリケーションで使用できます)

Rotativa

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

どちらもwkhtmtopdfバイナリを使用して、 htmlをpdfに変換します。これは、ページのレンダリングにWebkitエンジンを使用して、CSSスタイルシートも解析できるようにします。

C#とのシームレスな統合を簡単に使用できます。

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

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


2
投稿を更新していただきありがとうございます。PdfSharpを試してみましょう。あなたは私をたくさんの時間を節約しました。
John Henckel

1
PdfSharpはパフォーマンスの点では優れていますが、フロートを適切にレンダリングしませんでした。幸いなことに、古き良きテーブルを使用するようにマークアップを変更することができました。PdfSharpはそれらを適切に処理します。
Gebb

3
HtmlRendererを試しました。CSSをロードしない場合は、非常に高速でした。しかし、CSS(Bootstrapといくつかの特注)を適用しようとすると、CSSの解析に時間がかかり(おそらく軽減できます)、レンダリングはWebページとはまったく異なりました。
OutstandingBill

1
@ user2347528-HtmlRenderer.PdfSharpのソースを見ると、これを修正する方法はありません-合計ページの高さを取得して各PDFページにクリップするだけです。これは本当に残念です-これは、このライブラリを含む複数ページのPDFが実際にできることを意味します行われます。
バングル氏

3
BS。これにより、HTMLの画像が作成され、その画像がPDFファイルに追加されます。これは実際のPDFではありません。また、PDFはベクターグラフィックス形式です。もちろん、PDFがこのライブラリが生成するラスターグラフィックで構成されている場合を除いて、無限にスクロールできます。
Stefan Steiger 2017

191

更新:wkhtmltopdfよりもPupeteerSharpをお勧めします。

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

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


17
.NETをサポートしていますか?
Kiquenet

6
スタンドアロンの実行可能ファイルです。これをプロセスとして起動し、HTMLドキュメントのURLを引数として渡すことができます。
Marek、

46
@bamccaig私はすでにそれを持っています=)github.com/gmanny/Pechkinこれは、ライブラリのすべての使用可能な関数を公開し、複数のスレッドで使用するラッパーも備えています。そして、それはNuGetにあります。
Gman 2012

7
C#の中でこれを使用するにはstackoverflow.com/questions/4651373/...
ダニエルリトル

7
@AdamMoszczyński:Wikipediaから:LGPLを使用すると、開発者や企業は(強力なコピーレフトの条件で)独自のソフトウェアパーツのソースコードをリリースする必要なしに、LGPLソフトウェアを独自の(独自仕様の)ソフトウェアに統合することができます。
オリバー

34

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

私の一番のお気に入りは OpenHtmlToPdfです

このツールの利点:

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

テストされた他のツール:


これを+1して、PdfSharpのHtmlRendererをテストしましたが、改ページで多くの問題が発生しました。このプロジェクトでwkHtmlToPdfへの依存関係を維持できるため、このソリューションは素晴らしかった-HTMLを美しくレンダリングします。
jmdon 2017年

見た目は綺麗でしたが、すごく時間がかかりました。30秒、ブートストラップテーマなど、かなりシンプルなページですが、それでも変わりません。
ニコラスピーターセン

IronPDFのStephanieはこちら。これは、IronPDFを使用してhtmlをC#でPDFに変換する方法のコードサンプルです。詳細については、ウェブサイトのhtmlからpdfのチュートリアルをご覧ください。 using IronPdf; IronPdf.HtmlToPdf Renderer = new IronPdf.HtmlToPdf(); // Render an HTML document or snippet as a string Renderer.RenderHtmlAsPdf("<h1>Hello World</h1>").SaveAs("html-string.pdf");
ステファニー

iText pdfHtmlを使用しましたが、はサポートしていませんbackground-color。OpenHtmlToPdfは無料で完全に動作します。
Hp93

OpenHtmlToPdfの優位性に同意します。また、ILMergeとの.exeおよび.dllマージをサポートします。
saygley

30

最終更新日:2020年3月

これは、私がまとめた.NETでのHTMLからPDFへの変換のオプションのリストです(一部は無料で支払われます)

上記のどのオプションも役に立たない場合は、いつでもNuGetパッケージを検索できます https://www.nuget.org/packages?q=html+pdf


1
パフォーマンスをテストしましたか?現在の変換時間を改善することを目指しており、これらのパフォーマンス上の利点について他のライブラリを調査しています
frno

特に長いリストであるため、パフォーマンスの比較は行っていません。おそらく「PDF生成.netライブラリのパフォーマンスレビュー」などをすでに行っている可能性があります
Mauricio Gracia Gutierrez

28

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

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

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

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


35
ライブラリを購入する必要があるため、役に立ちません
d1jhoni1b 2013年

47
d1jhoni1b、これがどうして役に立たないのですか?それが有料ツールである場合、それは高価であると言われるかもしれませんが、その基準だけでは役に立たないわけではありません。
Don Rolling

3
それは本当のEOです。PDFはIEを使用しません。しかし、バックグラウンドでWebkitブラウザの32ビットインスタンスを生成するようです。プロセスリストを確認すると、EO.PDF dllを指すrundll32.exeインスタンスとして表示されます。ですから、私の意見ではまだ少しハックです。
マット

1
本当に苦痛なmedia = "print"には対応していません。
Marat Faskhiev、2015

15
650ドルの単一開発者ライセンス。それはコストがかかります。
Abhijeet Nagre 2015

25

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

使用例:

NuGet経由でインストールします。

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

免責事項:私は開発者ではなく、プロジェクトのファンです:)


3
確かにかなり便利に見えます。今日(05/10/15)の時点で、これはwkhtmtopdfの最もダウンロードされた.Netラッパーです(Nugetパッケージとして)。
ken2k 2015年

3
試してみましたが、残念ながらazureのWebページで機能させることができませんでした。
gabriel14 2015年

このライブラリを自分のマシンでローカルに実行すると問題なく動作しますが、ホスティングサーバーで次のエラーがランダムに表示されます。PDFが生成されることもありますが、次のエラーがスローされることがあります。「エラー。リクエストの処理中にエラーが発生しました
。PDFを

wkhtmtopdfはGDI +、またはMono / Linuxで実行している場合はxサーバーに依存します。したがって、これはサーバー環境には役立ちません...
nuzzolilo 2017

私のPDFで見た、それは良好で期待どおりに機能していますが、ビット品質の問題です。
Bharat 2017

13

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


4
最後にチェックしたとき、winnovativeはIE9と互換性がないことを覚えておいてください(IE9で削除されたIE GDIレンダリングエンジンを使用していたため)。したがって、使用しているマシンにIE9がインストールされている場合、変換は機能しません。これを読んだ時点で修正されている可能性がありますが、商用コンポーネントの多くはIEレンダリングエンジンを使用しており、IE9に行き詰まっているため、確認する価値があります。
fubaar 2011

Winnovativeはセットアップが最も簡単で、そのまま使用できました。ただし:1. Azure Webサイトでは機能せず、CloudAppでのみ機能します。2.遅い、Azure D1 VMでシンプルなPDFを生成するのに8秒かかる
jsgoupil

確認。本当に遅いです。wkhtmltopdfと比較しました。
Marat Faskhiev、2015

Winnovative Libraryは非常に高価です。開発者ライセンスは約650ドル、その他のライセンスは$ 1200。
Abhijeet Nagre 2015

Winnovative HTML to PDF ConverterはAzure Webサイトで機能し、コメントで提案されているようにIEに依存しません。:ウェブサイト上のAzureソリューションをPDFにWinnovative HTMLを確認してくださいwinnovative-software.com/html-to-pdf-converter-azure.aspx。変換時間を改善するには、HtmlToPdf.ConversionDelay = 0を設定します。コンバーターは、デフォルトの遅延を使用して、ページのロード後にコンテンツを更新するHTMLページを処理します。
EvoPdf 2015

9

Essential PDF、HTMLをPDF変換するために使用できます:C#サンプル。ここにリンクされているサンプルはASP.NETベースですが、ライブラリはWindowsフォーム、WPF、ASP.NET Webフォーム、およびASP.NET MVCから使用できます。ライブラリは、さまざまなHTMLレンダリングエンジンを使用するオプションを提供します:Internet Explorer(デフォルト)とWebKit(最高の出力)。

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

注:私はSyncfusionで働いています。


8

真の.Net PDFライブラリが本当に必要ない場合は、多数の無料のHTMLからPDFへのツールがあり、その多くはコマンドラインから実行できます。

1つの解決策は、それらの1つを選択して、その周りにC#で薄いラッパーを書き込むことです。たとえば、このチュートリアルで行ったように


このチュートリアルでは、存在しないWebサイトのコンポーネントを使用しています。
トムウィンター

7

私はExpertPDF Html To Pdf Converterを使用しました。まともな仕事をします。残念ながら無料ではありません。


ExpertPDfには、ドキュメントにウォーターマーキングするオプションがありますか?
user1799214 2013

@ user1799214-はい、ExpertPDFは透かしをサポートしています。サンプルコードはこちらをご覧ください。私は自分のWebサイトの1つで透かしを使用して正常に使用しました。
Theophilus

それは非常にうまく機能しますが、サポートの質問には回答しません。
Michael Freidgeim 16


7

2018年の更新、そして標準のHTML + CSS = PDF方程式を使用しましょう!

HTMLからPDFへの要求には朗報があります。この答えが示されW3C標準のCSS-ブレーク-3は、この問題を解決する ...それはテストの後、2017年または2018年に決定的な勧告に変身する計画との勧告候補です。

あまり標準的ではないため、print-css.rocksで示されているように、C#のプラグインを使用したソリューションがあります。


1
print-css.rocksによってリンクされたソリューションの価格は、PDFreactorが$ 2,950.00、Princeが$ 3800、Antenna House Formatter V7が$ 5,000.00です。そして、WeasyprintはPython用のようです。
MDave

6

Google Chromeのprint-to-pdf機能をヘッドレスモードから使用できます。これが最も簡単でありながら最も堅牢な方法であることがわかりました。

var url = "/programming/564650/convert-html-to-pdf-in-net";
var chromePath = @"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe";
var output = Path.Combine(Environment.CurrentDirectory, "printout.pdf");
using (var p = new Process())
    {
        p.StartInfo.FileName = chromePath;
        p.StartInfo.Arguments = $"--headless --disable-gpu --print-to-pdf={output} {url}";
        p.Start();
        p.WaitForExit();
    }

ねえ、これは所有サーバーとvpsにとって本当にクールです。共有いただきありがとうございます。
mjb

IISのASP.NETが外部プログラムを書き込みアクセス許可で実行できるようにするには、アプリケーションプール>詳細設定> ID> "LocalSystem"に設定
mjb

4

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

使用してお勧めします。

非常に優れたコンポーネントであり、Webページを画像のようなPDFに変換するだけでなく、テキスト、画像、フォーマットなどを実際に変換します...

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


10
私たちはこれを数年間使用しており、使用するのは非常に痛いことがわかりました。貧弱なサポート、IEレンダリングエンジンのラッパー、画像品質と圧縮の低下、高度な使用シナリオ(Cookieやリクエストヘッダーの提供など)を処理するために行われたリクエストをカスタマイズする機能が制限されているため、非常に厄介です。私はそれがどれだけうまく機能するかはあなたがそれをするために必要とするものに依存すると思います。
moribvndvs 2012年

3
ABCPdfの+1。以前のコメント者は、私が行ったのと同じサポート担当者と話してはいけません。彼らはいつも私に返信してくれ、私たちが抱えていた問題の解決策を常に持っていました。IEではなく、レンダリングエンジンとしてGeckoの使用をサポートするようになりました。実行時に必要なものを選択できます。ABCを使用すると、PDFでできることは文字通り何でもできます。
スティーブ

12
高すぎると貧弱なサポート。私はabcPDFをまったくお勧めしません。
Vivek 2012

私も過去6年間使用してきましたが、公平を期すために役立ちました。
toepoke.co.uk

この答えは、stackoverflow.com / a / 2182212/471213の別の繰り返しではありませんか?私は、され、他の男の平均提携例の数行のコードを提供しなかった、少なくともプログラムとを
USR-ローカル-ΕΨΗΕΛΩΝ

4

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

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

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

AzureでSaaS版を開発しました。WebApiや.Netアプリ、サービス、Azure Webサイト、Azure Webジョブなど、.Netを実行するものから簡単に使用できます。

http://www.rotativahq.com/

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


これはItextsharpに依存しているので、itextsharpを使用するにはライセンスが必要ですか?
Micah Armantrout、2016年

2
@MicahArmantroutいいえ、ありません。wkhtmltopdf.exeを使用してPDFファイルを作成します。ライセンスは必要ありません。
Giorgio Bozio 2016年

@ MicahArmantrout、iTextSharpもGNU GPLではないですか?gnu.org/licenses/agpl.html
Pranav Singh

技術的な理由と法的な理由の両方のために、iText(Sharp)5より前のバージョンの使用はお勧めしません。 stackoverflow.com/questions/8517776/itexsharp-license
Micah Armantrout

4

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

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();
}

iTextSharpはXHtmlで動作し、HTMLの品質に非常に敏感であることに注意してください。SelectPdfとHiqPdfが壊れない場所で壊れます。
サベージ

3

それはあなたが持っている他の要件に依存します。

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

編集:HTMLがXHtmlの場合、PDFizerを使用してジョブを実行できます。


3

PDFビジョンは良いです。ただし、それを使用するには完全な信頼が必要です。HTMLがサーバーで変換されない理由を既にメールで尋ねましたが、localhostでは問題なく動作しました。



2

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

コンパイルしたバイナリを販売している会社ですが、ソースからダウンロードしてコンパイルし、無料で使用できます。私はかなり最近のリビジョン(バージョン1.9用)をコンパイルし、数日でそれのバイナリインストーラーをリリースするつもりですので、興味があれば、投稿したらすぐにリンクを提供できます。

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


やあ、uがリンクし、C#asp.netのおかげでそれを使用する方法についてもガイドを提供することができます
user287745

static.persistedthoughts.com/htmldoc_1.9.1586-setup.exe これはコマンドラインプログラムであることに注意してください。これを機能させるには、アプリケーション内から実行する必要があります。第4章のeasysw.com/htmldoc/documentation.php
enriquein

これが現在どれほど役立つかはわかりませんが、それが役立つ場合は、dropbox.com
s

ウェブサイトはもう運営されていません。
トムウィンター

2

PDFで完璧なHTMLレンダリングが必要な場合は、商用ライブラリを使用する必要があります。

ExpertPdf Html To Pdf Converterは非常に使いやすく、最新の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ドキュメントをディスク上のファイルのストリームに直接保存する方法もあります。


PDFで完全なHTMLレンダリングが必要な場合は、商用ライブラリを使用する必要はありません
obayhan

私はこれを信じ始めています。私は5種類の景品を試しましたが、どれもが私のためにそれを台無しにするものを1つ持っています。窒息から単純なHello Worldを超えたページ、ひどい見た目まで-実際のコンバーターのためにいくらかお金を払わなければならないでしょう。各商用製品のサンプルは、実際にはPDFが期待どおりに機能するように機能します。
ハーブミーハン2015

@obayhan-私はあなたを信じたいです。多分あなたは私たちとあなたがとても良いと思うどんなツールへのリンクも共有することができます。
Peter Wone 2016

上部にある@PeterWoneには、簡単にわかるように、多くのオープンソースの選択肢があります。同じことを誰かに共有するように頼むことは、時間を盗むだけです。しかし、それらすべてを試してみて満足できない場合は、不満な点についてのコメントを共有し、知識を深めるのに役立つことを願っています。
オベイハン

@obayhan-なぜ他の人がすでに行ったことを繰り返すのですか?それらは3つのカテゴリに分類されます:wkhtmltopdfやIE9のような実際には無料ではない、許容できない依存関係、およびPDFSharpのHTMLレンダラー。PDF#のHRは純粋なC#で唯一のものであり、ページネーションの恐ろしい仕事をします-1つの長いページをレンダリングして切り取り、多くの場合、テキスト行を切り取ります。レンダラーを完全に書き換える時間が見つかれば、PDF#のHRは勝者になります。高速で、無料で、依存関係がありません。しかし、それはまったく新しいレンダラーになると思います。
Peter Wone 2016

2

これは無料のライブラリであり、非常に簡単に機能します: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


2

これまでのところ最高の無料の .NETソリューションは、wkhtmltopdfのラッパーであるTuesPechkinライブラリーのようです。ネイティブライブラリ。

シングルスレッドバージョンを使用して、数千のHTML文字列をPDFファイルに変換しました。マルチスレッド環境(IISなど)でも動作するはずですが、テストしていません。

また、wkhtmltopdfの最新バージョン(執筆時点では0.12.5)を使用したかったので、公式WebサイトからDLLをダウンロードし、それをプロジェクトルートにコピーし、copyをoutputにtrueに設定して、ライブラリを次のように初期化しました。そう:

var dllDir = AppDomain.CurrentDomain.BaseDirectory;
Converter = new StandardConverter(new PdfToolset(new StaticDeployment(dllDir)));

上記のコードは正確に探します「wkhtmltox.dll」ため、ファイル名を変更しないでください。DLLの64ビットバージョンを使用しました。

アプリのライフサイクルごとに一度だけ初期化する必要があるため、シングルスレッドなどに配置する必要があるため、マルチスレッド環境の手順を必ずお読みください。


1

これは pruizによるwkhtmltopdf.dllのラッパーです。

そしてラッパー Codaxyによってwkhtmltopdf.exeのための
-もnugetに


それらを使用するためのドキュメントやチュートリアルはありますか?ドキュメントは一切なく、ソースコードしかありません
Burjua

1
コードをダウンロードして、単体テストを見てください。これで、いくつかの良い使用例が得られます。
ガーフィールド

実際には役に立たない、実際にはpruizソリューションのテストを実行することすらできない。No tests are run because no tests are loaded or the selected tests are disabledグーグルでも役に立たないと言う
Burjua

@Burjuaこれは通常、使用しているテストランナーのバージョンに関連しています。しかし、私のGitHubのプロジェクトサイトでの問題を開いてみてください、私はあなたをお手伝いします。..
パブロ・ルイス・ガルシア

こんにちはこのラッパーは問題なく動作しますが、Googleの円グラフは表示されません。したがって、これを解決できるようになるまで、別の解決策を見つける必要があります。
Andre Lombaard、2013

1

私が見つけ、javascriptのPDFを生成するために使用した最高のツールは、レンダリングされたビューまたはHTMLページのスタイルがphantomJSです。

サンプルフォルダーのexeのルートにあるrasterize.js関数を使用して.exeファイルをダウンロードし、ソリューション内に配置します。

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

以下のコードはPDFファイルを生成します:

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;
}

完全なソースコードを共有できますか?私はC#を初めて使用するので、インポートについても行き詰まっています。
Sibi John、

1

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に変換する方法


Spireは単なる画像であるPDFファイルを生成します。ボールドフォントを無視するなど、一部のCSSは正しくありません。
サベージ

PDFを画像として生成することに関する私の質問への回答を参照してください:e-iceblue.com/forum/nuget-pdf-as-non-image-t6710.html
Savage

スパイアは、このページで試した4番目のものです。ありがとう。
MDave

1

HiQPdfソフトウェアの代表として、.NET用のHiQPdf HTMLからPDFへのコンバーターが最善の解決策だと思います。これには、市場で最も先進的なHTML5、CSS3、SVG、JavaScriptレンダリングエンジンが含まれています。HTMLからPDFへのライブラリの無料バージョンもあり、最大3つのPDFページを無料で作成できます。HTMLページからPDFをbyte []として生成するための最小限の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 to PDF Converterのサンプルリポジトリにあります


1
まともな結果を生成しますが、SelectPdfと同様に、ビルド時間とデプロイパッケージサイズに大きな影響を与える可能性があります。Visual Studioのビルド時間がほぼ2倍になりました。また、ページを埋めるのに苦労しました。HTMLが途中で小さすぎました。その点で、SelectPdfの方が優れていました。
サベージ

1
HTMLコンテンツでページを埋めることは、HtmlToPdf.BrowserWidthプロパティに依存します。デフォルトでは1200ピクセルですが、800ピクセルに設定でき、HTMLはPDFページ全体を非常によく埋めます。このライブデモとサンプルコードは、hiqpdf.com
demo / HtmlFittingAndScalingOptions.aspx

1
.NET Coreもサポートされていません。
テイラーブキャナン

1

ほとんどのプロジェクトでは、C#ソリューションを最初から実装するのではなく、C / C ++エンジンをラップします。Project Gotenbergをお試しください。

それをテストするには

docker run --rm -p 3000:3000 thecodingmachine/gotenberg:6

カールの例

curl --request POST \
    --url http://localhost:3000/convert/url \
    --header 'Content-Type: multipart/form-data' \
    --form remoteURL=https://brave.com \
    --form marginTop=0 \
    --form marginBottom=0 \
    --form marginLeft=0 \
    --form marginRight=0 \
    -o result.pdf

C#sample.cs

using System;
using System.Net.Http;
using System.Threading.Tasks;
using System.IO;
using static System.Console;

namespace HelloWorld
{
    class Program
    {
        public static async Task Main(string[] args)
        {
            try
            {
                var client = new HttpClient();            
                var formContent = new MultipartFormDataContent
                    {
                        {new StringContent("https://duckduckgo.com/"), "remoteURL"},
                        {new StringContent("0"), "marginTop" }
                    };
                var result = await client.PostAsync(new Uri("http://localhost:3000/convert/url"), formContent);
                await File.WriteAllBytesAsync("duckduck.com.pdf", await result.Content.ReadAsByteArrayAsync());
            }
            catch (Exception ex)
            {
                WriteLine(ex);
            }
        }
    }
}

コンパイルします

csc sample.cs -langversion:latest -reference:System.Net.Http.dll && mono ./sample.exe

0

追加のDLLを使用せずにASP.NETアプリケーションからHTMLを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


1
BitDefenderレポート:「マルウェアが検出されました!このページへのアクセスがブロックされました。」この報告が本物か偽陽性かについては、私には意見がありません。
GeoffM 2013

0

C#でHTMLをPDFに変換するには、ABCpdfを使用します

ABCpdfはGeckoまたはTridentレンダリングエンジンを利用できるため、HTMLテーブルはFireFoxおよびInternet Explorerに表示されるものと同じように見えます。

www.abcpdfeditor.comにABCpdfのオンラインデモがあります。これを使用して、ソフトウェアをダウンロードしてインストールする必要なく、最初にテーブルがどのようにレンダリングされるかを確認できます。

Webページ全体をレンダリングするには、AddImageUrl関数またはAddImageHtml関数が必要です。ただし、HTMLスタイルのテキストを追加するだけの場合は、次のようにAddHtml関数を試すことができます。

Doc theDoc = new Doc();
theDoc.FontSize = 72;
theDoc.AddHtml("<b>Some HTML styled text</b>");
theDoc.Save(Server.MapPath("docaddhtml.pdf"));
theDoc.Clear();

ABCpdfは商用ソフトウェアのタイトルですが、通常のエディションは特別オファーの下で無料で入手できることがよくあります。


91
あなたは本当にあなたがwebsupergooのために働いているすべてのあなたの答えを書くべきです。よくあるHowever, you must disclose your affiliation with the product in your answers. Also, if a huge percentage of your posts include a mention of your product, you're clearly here for the wrong reasons. 質問
jgauffin

12
痛い!ABCpdfは、私がよく知っているコンポーネントであるため、提案しました。私の投稿の大部分がPDFに関連している場合、それは私が関心のある領域以外のトピックに投稿することを控えているためです。謝罪。
AffineMesh 2012

ポスターの抗弁では、ウェブサイトは製品をかなり良いものにしています。
Tom Winter
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.