ItextSharp Erreur en essayant de l'analyser html pour la conversion en pdf
J'ai été en utilisant le ItextSharp module pour convertir la liste figure ci-dessous le code html 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>
De 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 le html est formé:
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 est là que j'obtiens une exception en disant "Impossible de convertir l'objet de type 'iTextSharp.texte.html.simpleparser.CellWrapper' de type 'iTextSharp.texte.Paragraphe"."
iTextSharp.text.html.simpleparser.HTMLWorker.ParseToList(new StringReader(html), null)
Il ya quelque chose de mal avec le html, je suis en train de l'analyser? Est-il une meilleure manière de faire ceci?
Merci beaucoup d'avance pour votre aide. Il est très apprécié.
Eh bien..je suppose que c'est la ItextSharp Analyseur qui est d'essayer de le faire. Je ne sais pas si certains éléments html ne sont pas autorisés, tout en essayant de convertir html en PDF à l'aide de Itextsharp
Itextsharp ne marche pas comme ça, j'ai mis mon <a> balises à l'intérieur de la <td> balises. Ressemble qui est la question.
ça fonctionne maintenant?
oui....mais pas de la manière dont j'ai exactement le concevait.J'ai dû mettre tous les <a> tag dans un <div>. Et a dû faire quelques compromis en termes de la façon dont je voulais que ma mise en forme de la page, parce que je ne pouvais pas régler tous les <a> balises dans un tableau tel que requis.
OriginalL'auteur karry | 2012-08-24
Vous devez vous connecter pour publier un commentaire.
`HTMLWorker' a été désapprouvée en faveur de XMLWorker. Voici un exemple de travail d'un essai avec un extrait de code HTML comme vous avez utilisé ci-dessus:
Lors de l'utilisation de
XMLWorker
vous devez utiliser bien formé HTML - c'est un analyseur XML, après tout. L'échantillonHTML
de votre question ci-dessus n'a pas de clôture<a>
ou<br>
balises. UnHTML
analyseur comme HtmlAgilityPack va résoudre ces problèmes, et de transformer ceci:dans cette:
avec seulement quelques lignes de code:
XMLWorker
est disponible en package nuget, ou en tant que distincte de téléchargement à sourceforge.Voir ici pour des utilisations plus avancées de
XMLWorker
.est-il efficace solution pour cela? Je faisais des lignes et des lignes de html pour le faire...en fait de mettre tous les "liens" dans les balises div.Cette modifications prévues à l'origine formatage des fichiers.
XMLWorker
est un téléchargement distinct, mais il est utilisé avec iTextSharp. Vous pouvez ainsi utiliser votre mise en forme d'origine (<table>
tags) au lieu d'envelopper les liens hypertexte dans<div>
balises comme dans l'exemple de code fourni ci-dessus. Je ne suis pas sûr de ce que tu veux dire par recours à un efficace solution - si vous regardez le premier lien que j'ai cité au-dessus de la iText liste de diffusion, il mentionne que quelque part la fin de la 4.xx succursale ou dans le 5.xx direction des hyperliens dans les cellules de tableau se sont rompus, et que le iText de l'équipe de développement n'a pas l'intention de faire de plus amples développement surHTMLWorker
.Désolé j'ai mal compris! Je pensais que tu parlais d'un outil totalement différent. Je reçois ce que vous dites.
Ce code a travaillé avec succès, mais des caractères turcs ne sont pas visibles au document PDF. Comment définir l'encodage de ce code?
OriginalL'auteur kuujinbo
Essayez le code suivant
Ici on remplace < avec
<
; et > avec>
; mon devient<a>
et devient</a>
.OriginalL'auteur PQubeTechnologies
Voici l'étape ce que vous devez faire
1 - Installer la bibliothèque itext forte et XMLWorker de Itextsharp de nuget
2-Ensuite mettez ur design en html(ici Invoice.html) avec du CSS
3-assurez-vous que tous les tag sont terminés correctement comme point d'arrêt ou de td(ici je suis d'erreur plus tôt)
4-ici, l'image ne montre pas en local, donc sans perdre de temps, j'ai téléchargé l'image dans le serveur et a donné Chemin d'accès au serveur pour accéder à l'Image.U peut de recherche en plus de l'exécuter localement.
OriginalL'auteur saktiprasad swain