ライブラリはPDFSharpできます-のようにiTextSharp-生成PDFファイル*HTMLフォーマットを考慮に入れます*?(太字(強い)、間隔(br)など)
以前、私はiTextSharpを使用し、そのような方法で大まかに処理しました(以下のコード):
string encodingMetaTag = "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />";
string htmlCode = "text <div> <b> bold </ b> or <u> underlined </ u> <div/>";
var sr = new StringReader (encodingMetaTag + htmlCode);
var pdfDoc = new Document (PageSize.A4, 10f, 10f, 10f, 0f);
var = new HTMLWorker htmlparser (pdfDoc);
PdfWriter.GetInstance (pdfDoc, HttpContext.Current.Response.OutputStream);
pdfDoc.Open ();
htmlparser.Parse (sr);
pdfDoc.Close ();
PDFクラスオブジェクトを扱うドキュメントHTMLWorker..)に適切なHTMLフォームに組み込まれているため、PDFSharp?PDFSharp同様のソリューションがあります?
私はこの質問が古いことを知っていますが、ここにそれを行うためのきれいな方法があります...
HtmlRenderer を PDFSharp と組み合わせて使用すると、これを実現できます。
Bitmap bitmap = new Bitmap(1200, 1800);
Graphics g = Graphics.FromImage(bitmap);
HtmlRenderer.HtmlContainer c = new HtmlRenderer.HtmlContainer();
c.SetHtml("<html><body style='font-size:20px'>Whatever</body></html>");
c.PerformPaint(g);
PdfDocument doc = new PdfDocument();
PdfPage page = new PdfPage();
XImage img = XImage.FromGdiPlusImage(bitmap);
doc.Pages.Add(page);
XGraphics xgr = XGraphics.FromPdfPage(doc.Pages[0]);
xgr.DrawImage(img, 0, 0);
doc.Save(@"C:\test.pdf");
doc.Close();
どうやら自動アンチエイリアスが原因で、最終的な画像が少しぼやけていると報告する人もいます。これを修正する方法についての投稿メッセージは次のとおりです: http://forum.pdfsharp.com/viewtopic.php?f=2&t=1811&start=
いいえ、現在PDFsharpにはHTMLファイルを解析するためのコードは含まれていません。
古い質問ですが、上記のどれもうまくいきませんでした。次に、_ HtmlRenderer のgeneratepdf
メソッドを pdfsharp と組み合わせて試しました。それが役に立てば幸い:HtmlRenderer.pdfsharp
という名前のnugetをインストールする必要があります。
var doc = TheArtOfDev.HtmlRenderer.PdfSharp.PdfGenerator.GeneratePdf("Your html in a string",PageSize.A4);
PdfPage page = new PdfPage();
XImage img = XImage.FromGdiPlusImage(bitmap);
doc.Pages.Add(page);
XGraphics xgr = XGraphics.FromPdfPage(doc.Pages[0]);
xgr.DrawImage(img, 0, 0);
doc.Save(Server.MapPath("test.pdf"));
doc.Close();
昨年開発したプロジェクトで、wkhtmltopdf( http://wkhtmltopdf.org/ )を使用してhtmlからpdfを生成し、ファイルを読み取ってユーザーに返しました。
それは私にとってはうまくいき、あなたにとってはアイディアかもしれません...
私は本当に古い質問があることを知っていますが、HTMLをPDFにレンダリングする正確な方法を実際に言う人がいないことを理解しています。私のテストに基づいて、正常に実行するには次のコードが必要であることがわかりました。
Bitmap bitmap = new Bitmap(790, 1800);
Graphics g = Graphics.FromImage(bitmap);
XGraphics xg = XGraphics.FromGraphics(g, new XSize(bitmap.Width, bitmap.Height));
TheArtOfDev.HtmlRenderer.PdfSharp.HtmlContainer c = new TheArtOfDev.HtmlRenderer.PdfSharp.HtmlContainer();
c.SetHtml("Your html in a string here");
PdfDocument pdf = new PdfDocument();
PdfPage page = new PdfPage();
XImage img = XImage.FromGdiPlusImage(bitmap);
pdf.Pages.Add(page);
XGraphics xgr = XGraphics.FromPdfPage(pdf.Pages[0]);
c.PerformLayout(xgr);
c.PerformPaint(xgr);
xgr.DrawImage(img, 0, 0);
pdf.Save("test.pdf");
別の方法がありますが、サイズに問題がある可能性があります。
PdfDocument pdf = PdfGenerator.GeneratePdf(text, PageSize.A4);
pdf.Save("test.pdf");
特定のHTML文字列のみをPDFに書き込み、残りは不要にする場合は、HtmlContainer
from TheArtOfDev HtmlRenderer を使用できます。このスニペットでは、 V 1.5.1
using PdfSharp.Pdf;
using PdfSharp;
using PdfSharp.Drawing;
using TheArtOfDev.HtmlRenderer.PdfSharp;
//create a pdf document
using (PdfDocument doc = new PdfDocument())
{
doc.Info.Title = "StackOverflow Demo PDF";
//add a page
PdfPage page = doc.AddPage();
page.Size = PageSize.A4;
//fonts and styles
XFont font = new XFont("Arial", 10, XFontStyle.Regular);
XSolidBrush brush = new XSolidBrush(XColor.FromArgb(0, 0, 0));
using (XGraphics gfx = XGraphics.FromPdfPage(page))
{
//write a normal string
gfx.DrawString("A normal string written to the PDF.", font, brush, new XRect(15, 15, page.Width, page.Height), XStringFormats.TopLeft);
//write the html string to the pdf
using (var container = new HtmlContainer())
{
var pageSize = new XSize(page.Width, page.Height);
container.Location = new XPoint(15, 45);
container.MaxSize = pageSize;
container.PageSize = pageSize;
container.SetHtml("This is a <b>HTML</b> string <u>written</u> to the <font color=\"red\">PDF</font>.<br><br><a href=\"http://www.google.nl\">www.google.nl</a>");
using (var measure = XGraphics.CreateMeasureContext(pageSize, XGraphicsUnit.Point, XPageDirection.Downwards))
{
container.PerformLayout(measure);
}
gfx.IntersectClip(new XRect(0, 0, page.Width, page.Height));
container.PerformPaint(gfx);
}
}
//write the pdf to a byte array to serve as download, attach to an email etc.
byte[] bin;
using (MemoryStream stream = new MemoryStream())
{
doc.Save(stream, false);
bin = stream.ToArray();
}
}
アプリで簡単な解析が必要で、HTML入力を制御できる場合は、独自のライブラリを作成できます。
プロジェクトの1つで作成しましたが、特定のアプリケーションに関連するカスタム機能のため、残念ながらまだ共有できません。
基本的に、基本的なHTMLからPDFを実装するには、次のロジックに従う必要があります。
ここでは、実装に基づいてロジックの非常に広範な概要を説明しました。
あなたははるかに良いアイデアを持っているかもしれません:)
参照することもできます: HTMLテーブルのコンテンツをPDF asp.netでiTextSharpを使用してドキュメント化
HTMLレンダラーPDF PdfSharpを使用 は、HTMLからPDFを生成できます
pDFに挿入する前。
画像としてレンダリングするには、Diego回答のコードを参照してください。
テキストとしてレンダリングするには、以下のコードを参照してください:
static void Main(string[] args)
{
string html = File.ReadAllText(@"C:\Temp\Test.html");
PdfDocument pdf = PdfGenerator.GeneratePdf(html, PageSize.A4, 20, null, OnStylesheetLoad, OnImageLoadPdfSharp);
pdf.Save(@"C:\Temp\Test.pdf");
}
public static void OnImageLoadPdfSharp(object sender, HtmlImageLoadEventArgs e)
{
var imgObj = Image.FromFile(@"C:\Temp\Test.png");
e.Callback(XImage.FromGdiPlusImage(imgObj));
}
public static void OnStylesheetLoad(object sender, HtmlStylesheetLoadEventArgs e)
{
e.SetStyleSheet = @"h1, h2, h3 { color: navy; font-weight:normal; }";
}
HTMLコード
<html>
<head>
<title></title>
<link rel="Stylesheet" href="StyleSheet" />
</head>
<body>
<h1>Images
<img src="ImageIcon" />
</h1>
</body>
</html>
this について聞いたことがありますか。私は非常に遅く答えるかもしれませんが、私はそれが役立つと思いました。それは非常にシンプルでうまく機能します。
var htmlContent = String.Format("<body>Hello world: {0}</body>",
DateTime.Now);
var htmlToPdf = new NReco.PdfGenerator.HtmlToPdfConverter();
var pdfBytes = htmlToPdf.GeneratePdf(htmlContent);
編集:HTMLコードをPDF 'PDFSharp'を使用して変換することについて質問があり、そのことがわかりましたPDFSharpはそれを行うことができません。それからNRecoについて知り、それが私のために働いたので、それが私のような誰かを助けるかもしれないと感じました。