Создание PDF на основе HTML-кода (iTextSharp, PDFSharp?) - PullRequest
17 голосов
/ 29 сентября 2011

Может ли библиотека 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 ();

включено в соответствующую HTML-форму документа PDF, имеющего дело с объектом класса HTMLWorker .. так что с PDFSharp ? Имеет ли PDFSharp аналогичное решение ?

Ответы [ 9 ]

14 голосов
/ 15 июня 2013

Я знаю, что этот вопрос старый, но вот чистый способ сделать это ...

Вы можете использовать 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=0

6 голосов
/ 29 сентября 2011

Нет, PDFsharp в настоящее время не содержит код для разбора файлов HTML.

3 голосов
/ 29 июня 2015

Старый вопрос, но ни один из вышеперечисленных не работал для меня. Затем я попробовал generatepdf метод HtmlRenderer в комбинации pdfsharp . Надеюсь, поможет: Вы должны установить nuget с именем HtmlRenderer.pdfsharp.

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();
3 голосов
/ 30 сентября 2011

В проекте, который я разработал в прошлом году, я использовал wkhtmltopdf (http://wkhtmltopdf.org/), чтобы сгенерировать pdf из html, затем я прочитал файл и вернул его пользователю.

Он отлично работает для меняи это может быть для вас идеей ...

2 голосов
/ 14 октября 2015

Я знаю, что это действительно старый вопрос, но я понимаю, что никто не говорит, что на самом деле точный метод визуализации 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");
1 голос
/ 08 августа 2017

HTML Renderer для PDF с использованием PdfSharp может генерировать PDF из HTML

  1. в виде изображения или
  2. в виде текста

перед вставкой в ​​PDF.

Чтобы отобразить изображение, используйте код ответа Диего.

Чтобы отобразить текст, см. Код ниже:

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>
1 голос
/ 06 июня 2014

Если вам требуется простой анализ в вашем приложении и вы можете контролировать ввод html, вы можете написать для этого собственную библиотеку.

Я создал один в одном из моих проектов, но, к сожалению, он пока недоступен из-за пользовательских функций, связанных с конкретным приложением.

По сути, вам нужно следовать следующей логике для реализации базового HTML в PDF:

  1. Простой разбор HTML тегов
  2. Создайте логику для распознавания общих стилей, то есть полужирного, курсива, слева, по центру и т. Д., И создайте класс PDFSharp с этими свойствами и присвойте ему Para, который будет добавлен в качестве атрибутов стиля в HTML
  3. Обработка тегов таблицы и добавление строк и столбцов в PDF
  4. Теги абзаца для добавления абзацев.

Я дал очень широкий обзор логики здесь на основе моей реализации.

У вас может быть намного лучшая идея:)

Вы также можете обратиться: Запись содержимого таблицы HTML в документ PDF с помощью iTextSharp в asp.net

0 голосов
/ 14 апреля 2018

Я рекомендую вам NReco.PdfGenerator , потому что у вас есть бесплатная и платная лицензия и ее легко установить из nuget.

Главная страница: https://www.nrecosite.com/pdf_generator_net.aspx

Документация: https://www.nrecosite.com/doc/NReco.PdfGenerator/

Если вы хотите создать PDF из html файла, попробуйте:

String html = File.ReadAllText("main.html");
var htmlToPdf = new NReco.PdfGenerator.HtmlToPdfConverter();
htmlToPdf.GeneratePdf(html, null, "C:/Users/Tmp/Desktop/mapa.pdf");
0 голосов
/ 07 января 2017

Ребята, вы слышали о этом .Я мог бы ответить очень поздно, но я подумал, что это помогает.Это очень просто и хорошо работает.

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, и он сработал для меня, поэтому я почувствовал, что он может помочь кому-то, как я.

...