J'utilisais le module ItextSharp pour convertir le code HTML ci-dessous dans une page pdf.
<div style="font-size: 18pt; font-weight: bold;">
mma<br>mmar</div><br> <br>
<div style="font-size: 14pt;">Click to View Pricing
</div>
<br>
<div>
<table>
<tr><td> <a href="http://www.mma.com/fci" style="color: Blue; font-size: 10pt; text-decoration: underline;"> FCI</a>:</td>
<td><a href="http://www.mma.com/access/?pn=78211-014" style="color: Blue; font-size: 10pt; text-decoration: underline;"> 78211-014</a></td></tr><tr><td></td> <td>
<a href="http://www.mma.com/access/?pn=78211-009"
style="color: Blue; font-size: 10pt; text-decoration: underline;">78211-009</td></tr><tr><td></td> <td>
<a href="http://www.mma.com/access/?pn=78211-006"
style="color: Blue; font-size: 10pt; text-decoration: underline;">78211-006</td></tr><tr><td></td> <td>
<a href="http://www.mma.com/access/?pn=78211-007"
style="color: Blue; font-size: 10pt; text-decoration: underline;">78211-007</td></tr><tr><td></td> <td>
<a href="http://www.mma.com/access/?pn=78211-003"
style="color: Blue; font-size: 10pt; text-decoration: underline;">78211-003</td></tr><tr><td></td> <td>
<a href="http://www.mma.com/access/?pn=78211-005"
style="color: Blue; font-size: 10pt; text-decoration: underline;">78211-005</td></tr><tr><td></td> <td>
<a href="http://www.mma.com/access/?pn=78211-008"
style="color: Blue; font-size: 10pt; text-decoration: underline;">78211-008</td></tr><tr><td></td> <td>
<a href="http://www.mma.com/access/?pn=78211-004"
style="color: Blue; font-size: 10pt; text-decoration: underline;">78211-004</td></tr><tr><td></td> <td>
<a href="http://www.mma.com/access/?pn=78211-012"
style="color: Blue; font-size: 10pt; text-decoration: underline;">78211-012</td></tr><tr><td></td> <td>
<a href="http://www.mma.com/access/?pn=78211-007LF"
style="color: Blue; font-size: 10pt; text-decoration: underline;">78211-007LF</td></tr><tr><td></td> <td>
<a href="http://www.mma.com/access/?pn=78211-015LF"
style="color: Blue; font-size: 10pt; text-decoration: underline;">78211-015LF</td></tr><tr><td></td> <td>
<a href="http://www.mma.com/access/?pn=78211-003LF"
style="color: Blue; font-size: 10pt; text-decoration: underline;">78211-003LF</td></tr><tr><td></td> <td>
<a href="http://www.mma.com/access/?pn=78211-009LF"
style="color: Blue; font-size: 10pt; text-decoration:
underline;">78211-009LF</td></tr><tr><td></td> <td>
<a href="http://www.mma.com/access/?pn=78211-005LF"
style="color: Blue; font-size: 10pt; text-decoration: underline;">78211-005LF</td></tr><tr><td></td> <td>
<a href="http://www.mma.com/access/?pn=78211-010LF"
style="color: Blue; font-size: 10pt; text-decoration: underline;">78211-010LF</td></tr><tr><td></td> <td>
<a href="http://www.mma.com/access/?pn=78211-006LF"
style="color: Blue; font-size: 10pt; text-decoration: underline;">78211-006LF</td></tr><tr><td></td> <td>
<a href="http://www.mma.com/access/?pn=78211-014LF"
style="color: Blue; font-size: 10pt; text-decoration: underline;">78211-014LF</td></tr><tr><td></td> <td>
<a href="http://www.mma.com/access/?pn=78211-004LF"
style="color: Blue; font-size: 10pt; text-decoration: underline;">78211-004LF</td></tr><tr><td></td> <td>
<a href="http://www.mma.com/access/?pn=78211-012LF"
style="color: Blue; font-size: 10pt; text-decoration: underline;">78211-012LF</td></tr><tr><td></td> <td>
<a href="http://www.mma.com/access/?pn=78211-008LF"
style="color: Blue; font-size: 10pt; text-decoration: underline;">78211-008LF</td></tr><tr><td></td> <td>
<a href="http://www.mma.com/access/?pn=78211-011LF"
style="color: Blue; font-size: 10pt; text-decoration: underline;">78211-011LF</td></tr><tr><td></td> <td><a href="http://www.mma.com/access/?pn=78211-013LF"
style="color: Blue; font-size: 10pt; text-decoration: underline;">78211-013LF</td></tr><tr><td></td> <td><a href="http://www.mma.com/access/?pn=78211-010" style="color: Blue; font-size: 10pt; text-decoration: underline;">78211-010</td></tr><tr><td></td>
<td><a href="http://www.mma.com/access/?pn=78211-015"
style="color: Blue; font-size: 10pt; text-decoration: underline;">78211-015</td></tr><tr><td>
<a href="http://www.mma.com/souriau"
style="color: Blue; font-size: 10pt; text-decoration: underline;"> Souriau</a>:</td>
<td><a href="http://www.mma.com/access/?pn=24JR124-3" style="color: Blue; font-size: 10pt; text-decoration: underline;"> 24JR124-3</a></td></tr></table></div>
Code C # pour générer le code HTML ci-dessus:
var html = new StringBuilder(@"<div style=""font-size: 18pt; font-weight: bold;"">Authorized Distributor</div><br> <br><div style=""font-size: 14pt;"">Click to View Pricing, Inventory, Delivery & Lifecycle Information:</div><br>");
List<MfrBrandView> mfrBrands = MfrBrandView.Load(fileId);
var uniquesuppliers = mfrBrands.GroupBy(t => new {t.Manufacturer,t.SupplierVirtualDirectory}).Select(g => g.First());
html.Append("<div><table>");
foreach (var uniquesupplier in uniquesuppliers)
{
var mfrPartNums =
mfrBrands.Where(t => t.ManufacturerId == uniquesupplier.ManufacturerId).Select(
t => t.ManufacturerPartNumber).ToList();
html.AppendFormat(@"<tr><td> <a href=""http://www.mma.com/{0}"" style=""color: Blue; font-size: 10pt; text-decoration: underline;""> {1}</a>:</td> <td><a href=""http://www.mma.com/access/?pn={2}"" style=""color: Blue; font-size: 10pt; text-decoration: underline;""> {2}</a></td></tr>", uniquesupplier.SupplierVirtualDirectory, uniquesupplier.MouserizationLabel, mfrPartNums[0]);
for (int i = 1; i < mfrPartNums.Count(); i++)
{
html.AppendFormat(
@"<tr><td></td> <td><a href=""http://www.mma.com/access/?pn={0}"" style=""color: Blue; font-size: 10pt; text-decoration: underline;"">{0}</td></tr>",
mfrPartNums[i]);
}
}
html.Append("</table></div>");
return html.ToString();
Code pour générer la page après la création de HTML:
PdfWriter writer = null;
PdfDocument doc = null;
//PdfReader reader = new PdfReader(content);
// reader.Info["Title"]
try
{
doc = new PdfDocument();
doc.SetPageSize(PageSize.LETTER);
writer = PdfWriter.GetInstance(doc, content);
writer.CloseStream = false;
doc.Open();
doc.NewPage();
foreach (IElement element in iTextSharp.text.html.simpleparser.HTMLWorker.ParseToList(new StringReader(html), null))
{
doc.Add(element);
}
}
ci-dessous se trouve une exception disant "Impossible de convertir un objet de type'iTextSharp.text.html.simpleparser.CellWrapper' pour saisir 'iTextSharp.text.Paragraph'. "iTextSharp.text.html.simpleparser.HTMLWorker.ParseToList(new StringReader(html), null)
Y at-il quelque chose de mal avec le code HTML que j'essaye d'analyser? Existe-t-il une meilleure façon de le faire? Merci beaucoup d'avance pour votre aide. C'est très apprécié.
`HTMLWorker ' est déconseillé en faveur de XMLWorker . Voici un exemple de travail testé avec un extrait de code HTML comme vous l'avez utilisé ci-dessus:
StringReader html = new StringReader(@"
<div style='font-size: 18pt; font-weight: bold;'>
Mouser Electronics <br />Authorized Distributor</div><br /> <br />
<div style='font-size: 14pt;'>Click to View Pricing, Inventory, Delivery & Lifecycle Information:
</div>
<br />
<div>
<table>
<tr><td></td><td>
<a href='http://www.mouser.com/access/?pn=78211-009'
style='color: Blue; font-size: 10pt; text-decoration: underline;'>78211-009</a></td></tr>
</table></div>
");
using (Document document = new Document()) {
PdfWriter writer = PdfWriter.GetInstance(document, STREAM);
document.Open();
XMLWorkerHelper.GetInstance().ParseXHtml(
writer, document, html
);
}
Lorsque vous utilisez XMLWorker
, vous devez utiliser du code HTML bien formé - c’est un analyseur XML, après tout. L'échantillon HTML
de votre question ci-dessus n'a pas de balises <a>
ou <br>
de fermeture. Un analyseur HTML
comme HtmlAgilityPack résoudra ces problèmes, et transformera ceci:
<div><img src='a.gif'><br><hr></div>
dans ceci:
<div><img src='a.gif' /><br /><hr /></div>
avec seulement quelques lignes de code:
var hDocument = new HtmlDocument()
{
OptionWriteEmptyNodes = true,
OptionAutoCloseOnEnd = true
};
hDocument.LoadHtml("<div><img src='a.gif'><br><hr></div>");
var closedTags = hDocument.DocumentNode.WriteTo();
XMLWorker
est disponible sous forme de paquet de nuget ou sous forme de téléchargement séparé sur sourceforge .
Voir ici pour une utilisation plus avancée of XMLWorker
.
Essayez le code suivant
<a href="http://www.abcd.com"></a>
Ici, nous remplaçons <avec <
; et> avec >
; alors mon devient <a>
et devient </a>
.
Voici l'étape que vous devez faire
1- Installer itext sharp et XMLWorker à partir d’Itextsharp à partir de nuget
2-Ensuite, mettez votre conception en HTML (ici Invoice.html) avec CSS en ligne
3-Assurez-vous que tous les tags sont terminés correctement comme breakpoint ou td (ici j'ai eu une erreur plus tôt)
4-here image ne s'afficherait pas localement, donc sans perdre de temps, j'ai chargé l'image sur le serveur et lui ai donné le chemin d'accès à Image.U peut effectuer davantage de recherches pour l'exécuter localement.
Document doc = new Document();
PdfPTable tableLayout = new PdfPTable(4);
PdfWriter writer= PdfWriter.GetInstance(doc, new FileStream(Server.MapPath("~/Admin/T13.pdf"), FileMode.Create));
doc.Open();
string contents = File.ReadAllText(Server.MapPath("~/Admin/invoice.html"));
StringReader sr = new StringReader(contents);
XMLWorkerHelper.GetInstance().ParseXHtml(writer, doc, sr);
doc.Close();