Gerar PDF com base no código HTML (iTextSharp, PDFSharp?)

A Biblioteca PDFSharp pode ser iTextSharp - gerar ficheiros PDF * ter em conta a formatação em HTML * ? (negrito (forte), espaçamento (br), etc.)

anteriormente utilizava iTextSharp e lidava de tal forma (código abaixo):

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

incorporado no formulário HTML apropriado para um documento PDF tratado com o objeto de classe HTMLWorker .. então, o que se passa com o PDFSharp ? tem PDFSharp semelhante solução?

Author: TomashUfx, 2011-09-29

9 answers

Sei que esta pergunta é antiga, mas há uma forma limpa de o fazer...

Pode usar Htmlrender combinado com PDFSharp para conseguir isto:

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();
Algumas pessoas relatam que a imagem final parece um pouco desfocada, aparentemente devido ao anti-aliasing automático. Aqui está uma mensagem de post sobre como corrigir isso: http://forum.pdfsharp.com/viewtopic.php?f=2&t=1811&start=0
 14
Author: Diego, 2017-03-07 18:04:58

Não, o PDFsharp não inclui actualmente o código para processar ficheiros HTML.

 5
Author: The sky is the limit, 2011-09-29 12:39:47

Velha pergunta, mas nenhum dos acima trabalhou para mim. Depois tentei generatepdf o método de Htmlrender {[6] } em combinação com pdfsharp . Espero que ajude.: Tem de instalar um nuget chamado 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
Author: Rohit Arora, 2015-06-29 07:24:02

Num projecto que desenvolvi no ano passado, usei o wkhtmltopdf ( http://wkhtmltopdf.org/) para gerar pdf a partir de html, Então eu li O arquivo e voltar para o usuário.

Funciona bem para mim e pode ser uma ideia para ti...
 3
Author: wahrheit, 2016-07-05 08:56:56

Eu sei que há uma pergunta realmente antiga, mas eu percebo que não há ninguém dizendo realmente um método preciso para tornar um HTML em um PDF. Com base no meu teste, descobri que precisas do seguinte código para o fazeres com sucesso.

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");
Há outra forma de o fazer, mas pode ter problemas com o tamanho.
PdfDocument pdf = PdfGenerator.GeneratePdf(text, PageSize.A4);
pdf.Save("test.pdf");
 2
Author: Ezequiel, 2015-10-13 22:42:02

Se necessitar de uma análise simples na sua aplicação e tiver controlo sobre a entrada em html, poderá escrever a sua própria biblioteca para este efeito.

Eu criei um em um dos meus projetos, mas infelizmente ainda não pode ser compartilhado devido a características personalizadas relacionadas com a aplicação específica.

Basicamente, você precisa seguir a seguinte lógica para implementar HTML básico para PDF:

  1. análise HTML simples das marcas
  2. criar lógica para reconhecer estilos comuns, isto é, negrito, itálico, esquerdo, centro etc e criar uma classe PDFSharp com estas propriedades e atribuir Ao Para, que será adicionado como atributos de estilo no HTML
  3. manipular as marcas da tabela e adicionar linhas e colunas em PDF
  4. marcas de parágrafos para adicionar parágrafos.

Dei aqui uma visão muito ampla da lógica com base na minha implementação.

Podes estar a ter uma ideia muito melhor:)

Também pode referir : escrevendo o conteúdo da tabela HTML em PDF doc usando iTextSharp em asp.net

 1
Author: Tejasvi Hegde, 2017-05-23 12:09:33

Renderizador de HTML para PDF usando PdfSharp pode gerar um PDF a partir de um HTML

  1. como uma imagem, ou
  2. como texto

Antes de inserir no PDF.

Para renderizar como uma imagem, por favor consulte o código da resposta de Diego.

Para renderizar como texto, por favor veja o código abaixo:

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

Código HTML

<html>
    <head>
        <title></title>
        <link rel="Stylesheet" href="StyleSheet" />      
    </head>
    <body>
        <h1>Images
            <img src="ImageIcon" />
        </h1>
    </body>
</html>
 1
Author: sanme98, 2017-08-08 07:43:26
Já ouviram falar disto? Posso estar a responder muito tarde, mas achei que ajudava. É muito simples e funciona bem.
var htmlContent = String.Format("<body>Hello world: {0}</body>", 
        DateTime.Now);
var htmlToPdf = new NReco.PdfGenerator.HtmlToPdfConverter();
var pdfBytes = htmlToPdf.GeneratePdf(htmlContent);

Edit: eu vim aqui com a questão da conversão de código HTML para PDF usando 'PDFSharp" e descobri que 'PDFSharp' não pode fazer isso, então eu descobri sobre NReco e ele trabalhou para mim, então eu senti que poderia ajudar alguém, assim como eu.

 -1
Author: Murali Krishna, 2017-01-09 14:52:32
Vou recomendar-te o NReco.PdfGenerator porque tem licença gratuita e paga e é fácil de instalar a partir de nuget.

Página Principal: https://www.nrecosite.com/pdf_generator_net.aspx

Documentação: https://www.nrecosite.com/doc/NReco.PdfGenerator/

Se quiser criar PDF a partir de ficheiro html tente:

String html = File.ReadAllText("main.html");
var htmlToPdf = new NReco.PdfGenerator.HtmlToPdfConverter();
htmlToPdf.GeneratePdf(html, null, "C:/Users/Tmp/Desktop/mapa.pdf");
 -1
Author: Kevin Santacruz, 2018-04-13 21:26:12