HTMLコンテンツを関数に渡してPDFを生成したい。私はこれにiTextSharpを使用しましたが、テーブルに遭遇し、レイアウトが乱雑になるとうまく機能しません。
もっと良い方法はありますか?
HTMLコンテンツを関数に渡してPDFを生成したい。私はこれにiTextSharpを使用しましたが、テーブルに遭遇し、レイアウトが乱雑になるとうまく機能しません。
もっと良い方法はありますか?
回答:
編集: PdfSharpを使用したPDF用の新しい提案HTMLレンダラー
(wkhtmltopdfを試し、それを回避するよう提案した後)
HtmlRenderer.PdfSharpは、100%完全にC#で管理されたコードで、使いやすく、スレッドセーフであり、最も重要なのは無料 (新しいBSDライセンス)ソリューションです。
使用法
メソッド例を使用します。
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の使用を避けます-ベース、次の理由により、ホステッドエンタープライズアプリケーションでのソリューションのます。
--- PREセクションを編集---
より単純なアプリケーション/環境でhtmlからpdfを生成したい人のために、私は古い投稿を提案として残します。
https://www.nuget.org/packages/TuesPechkin/
または特にMVC Webアプリケーションの場合 (ただし、.netアプリケーションで使用できます)
https://www.nuget.org/packages/Rotativa/
どちらもwkhtmtopdfバイナリを使用して、 htmlをpdfに変換します。これは、ページのレンダリングにWebkitエンジンを使用して、CSSスタイルシートも解析できるようにします。
C#とのシームレスな統合を簡単に使用できます。
Rotativaは、任意のRazorビューから直接PDFを生成することもできます。
さらに、実際のWebアプリケーションでは、スレッドの安全性なども管理します...
更新:wkhtmltopdfよりもPupeteerSharpをお勧めします。
wkhtmtopdfを試してください。それは私がこれまでに見つけた最高のツールです。
.NETの場合、この小さなライブラリを使用して、wkhtmtopdfコマンドラインユーティリティを簡単に呼び出すことができます。
最近、HTMLからPDFへの変換に関してPoCを実行し、自分の結果を共有したいと思いました。
私の一番のお気に入りは OpenHtmlToPdfです
このツールの利点:
テストされた他のツール:
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");
background-color
。OpenHtmlToPdfは無料で完全に動作します。
最終更新日:2020年3月
これは、私がまとめた.NETでのHTMLからPDFへの変換のオプションのリストです(一部は無料で支払われます)
GemBox.Document
PDF変身.Net
HtmlRenderer.PdfSharp
操り人形師
EO.Pdf
WnvHtmlToPdf_x64
IronPdf
Spire.PDF
無料のSpire.PDF for .NET(コミュニティバージョン)
Aspose.Html
EvoPDF
ExpertPdfHtmlToPdf
Zetpdf
PDFtron
WkHtmlToXSharp
SelectPDF
上記のどのオプションも役に立たない場合は、いつでもNuGetパッケージを検索できます https://www.nuget.org/packages?q=html+pdf
ほとんどのHTMLからPDFへのコンバーターはIEに依存してHTMLの解析とレンダリングを行います。これは、ユーザーがIEを更新すると壊れる可能性があります。ここにはIEに依存しないものです。
コードは次のようなものです:
EO.Pdf.HtmlToPdf.ConvertHtml(htmlText, pdfFileName);
他の多くのコンバーターと同様に、テキスト、ファイル名、またはURLを渡すことができます。結果はファイルまたはストリームに保存できます。
私は真剣にNRecoを強くお勧めします。無料版と有料版があり、本当に価値があります。バックグラウンドでwkhtmtopdfを使用しますが、必要なアセンブリは1つだけです。素晴らしい。
使用例:
NuGet経由でインストールします。
var htmlContent = String.Format("<body>Hello world: {0}</body>", DateTime.Now);
var pdfBytes = (new NReco.PdfGenerator.HtmlToPdfConverter()).GeneratePdf(htmlContent);
免責事項:私は開発者ではなく、プロジェクトのファンです:)
Winnovativeは、HTML入力をサポートする.Net PDFライブラリを提供します。彼らは無制限の無料トライアルを提供しています。プロジェクトのデプロイ方法によっては、これで十分な場合があります。
Essential PDFは、HTMLをPDFに変換するために使用できます:C#サンプル。ここにリンクされているサンプルはASP.NETベースですが、ライブラリはWindowsフォーム、WPF、ASP.NET Webフォーム、およびASP.NET MVCから使用できます。ライブラリは、さまざまなHTMLレンダリングエンジンを使用するオプションを提供します:Internet Explorer(デフォルト)とWebKit(最高の出力)。
資格があれば、コミュニティライセンスプログラムを通じて、コントロールのスイート全体を無料で(商用アプリケーションも)利用できます。コミュニティライセンスは、制限や透かしのない完全な製品です。
注:私はSyncfusionで働いています。
真の.Net PDFライブラリが本当に必要ない場合は、多数の無料のHTMLからPDFへのツールがあり、その多くはコマンドラインから実行できます。
1つの解決策は、それらの1つを選択して、その周りにC#で薄いラッパーを書き込むことです。たとえば、このチュートリアルで行ったように。
私はExpertPDF Html To Pdf Converterを使用しました。まともな仕事をします。残念ながら無料ではありません。
新しいWebベースのドキュメント生成アプリDocRaptor.comもあります。使いやすいようで、無料のオプションがあります。
HTMLからPDFへの要求には朗報があります。この答えが示され、W3C標準のCSS-ブレーク-3は、この問題を解決する ...それはテストの後、2017年または2018年に決定的な勧告に変身する計画との勧告候補です。
あまり標準的ではないため、print-css.rocksで示されているように、C#のプラグインを使用したソリューションがあります。
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();
}
ABCpdf.NET(http://www.websupergoo.com/abcpdf-5.htm)
使用してお勧めします。
非常に優れたコンポーネントであり、Webページを画像のようなPDFに変換するだけでなく、テキスト、画像、フォーマットなどを実際に変換します...
無料ではありませんが、安価です。
私はRotativaパッケージの作者です。かみそりのビューから直接PDFファイルを作成することができます:
https://www.nuget.org/packages/Rotativa/
ModelコンテナとViewBagコンテナのデータでかみそりビューを使用できるため、使用するのは簡単で、レイアウトを完全に制御できます。
AzureでSaaS版を開発しました。WebApiや.Netアプリ、サービス、Azure Webサイト、Azure Webジョブなど、.Netを実行するものから簡単に使用できます。
利用可能な無料アカウント。
以下は、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();
}
それはあなたが持っている他の要件に依存します。
本当にシンプルだが簡単に展開できないソリューションは、WebBrowserコントロールを使用してHTMLをロードし、次にローカルにインストールされたPDFプリンターに印刷するPrintメソッドを使用することです。いくつかの無料のPDFプリンターが利用可能で、WebBrowserコントロールは.Netフレームワークの一部です。
編集:HTMLがXHtmlの場合、PDFizerを使用してジョブを実行できます。
htmlからpdfへの変換には、次のライブラリがより効果的であることがわかりました。
nuget:https : //www.nuget.org/packages/Select.HtmlToPdf/
しばらく前にもこれを探していました。私はHTMLDOC http://www.easysw.com/htmldoc/に出くわしました。これは、HTMLファイルを引数として取り、そこからPDFを出力する無料のオープンソースコマンドラインアプリです。私のサイドプロジェクトではかなりうまくいきましたが、実際に何が必要かによって異なります。
コンパイルしたバイナリを販売している会社ですが、ソースからダウンロードしてコンパイルし、無料で使用できます。私はかなり最近のリビジョン(バージョン1.9用)をコンパイルし、数日でそれのバイナリインストーラーをリリースするつもりですので、興味があれば、投稿したらすぐにリンクを提供できます。
編集(2014年2月25日):ドキュメントとサイトがhttp://www.msweet.org/projects.php?Z1に移動したようです
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ドキュメントをディスク上のファイルのストリームに直接保存する方法もあります。
これは無料のライブラリであり、非常に簡単に機能します: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
これまでのところ最高の無料の .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ビットバージョンを使用しました。
アプリのライフサイクルごとに一度だけ初期化する必要があるため、シングルスレッドなどに配置する必要があるため、マルチスレッド環境の手順を必ずお読みください。
No tests are run because no tests are loaded or the selected tests are disabled
グーグルでも役に立たないと言う
私が見つけ、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;
}
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に変換する方法
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のサンプルリポジトリにあります。
ほとんどのプロジェクトでは、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
追加の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
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は商用ソフトウェアのタイトルですが、通常のエディションは特別オファーの下で無料で入手できることがよくあります。
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.
質問