Est-ce que la bibliothèque PDFSharp peut - comme iTextSharp - générer des PDF fichiers * prend en compte le formatage HTML *? (gras (fort), espacement (br), etc.)
Auparavant, j'utilisais iTextSharp et je le manipulais grossièrement (code ci-dessous):
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 ();
incorporé dans le formulaire HTML approprié à un document PDF traité avec l'objet de classe HTMLWorker .. alors, qu'en est-il de PDFSharp?La solution PDFSharp est-elle similaire?
Je sais que cette question est ancienne, mais voici une façon propre de le faire ...
Vous pouvez utiliser HtmlRenderer combiné avec PDFSharp pour ce faire:
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();
Certaines personnes signalent que l'image finale est un peu floue, apparemment à cause de l'anti-aliasing automatique. Voici un message sur comment résoudre ce problème: http://forum.pdfsharp.com/viewtopic.php?f=2&t=1811&start=0
Non, PDFsharp n'inclut pas actuellement de code pour analyser les fichiers HTML.
Ancienne question, mais aucune des réponses ci-dessus n’a fonctionné pour moi. Ensuite, j'ai essayé la méthode generatepdf
de HtmlRenderer en combinaison de pdfsharp . J'espère que cela vous aidera: Vous devez installer un nuget nommé 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();
Dans un projet que j'ai développé l'année dernière, j'ai utilisé wkhtmltopdf ( http://wkhtmltopdf.org/ ) pour générer un fichier pdf à partir de HTML, puis j'ai lu le fichier et renvoyé le à l'utilisateur.
Cela fonctionne bien pour moi et cela pourrait être une idée pour vous ...
Je sais que la question est très ancienne, mais je me rends compte que personne ne dit en réalité de méthode précise pour convertir un code HTML en fichier PDF. Sur la base de mon test, j'ai découvert que vous aviez besoin du code suivant pour réussir.
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");
Il y a une autre façon de faire mais vous pourriez avoir des problèmes avec la taille.
PdfDocument pdf = PdfGenerator.GeneratePdf(text, PageSize.A4);
pdf.Save("test.pdf");
Si vous avez besoin d'une analyse simple dans votre application et que vous avez le contrôle sur l'entrée HTML, vous pouvez écrire votre propre bibliothèque pour cela.
J'en ai créé un dans l'un de mes projets, mais malheureusement, il ne peut pas encore être partagé en raison de fonctionnalités personnalisées liées à une application spécifique.
Fondamentalement, vous devez suivre la logique suivante pour implémenter du HTML au PDF de base:
J'ai donné un très large aperçu de la logique ici basée sur ma mise en œuvre.
Vous avez peut-être une bien meilleure idée :)
Vous pouvez également vous référer à: Écrire le contenu du tableau HTML dans PDF doc en utilisant iTextSharp dans asp.net
HTML Renderer for PDF utilisant PdfSharp peut générer un PDF à partir d'un fichier HTML
avant d'insérer au format PDF.
Pour rendre une image, veuillez vous référer au code de Diego answer.
Pour rendre le texte, référez-vous au code ci-dessous:
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; }";
}
Code HTML
<html>
<head>
<title></title>
<link rel="Stylesheet" href="StyleSheet" />
</head>
<body>
<h1>Images
<img src="ImageIcon" />
</h1>
</body>
</html>