Ich habe das ItextSharp-Modul verwendet, um den unten aufgeführten HTML-Code in eine PDF-Seite umzuwandeln.
<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>
C # -Code zum Erzeugen des obigen HTML:
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 zum Generieren der Seite, nachdem HTML erstellt wurde:
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);
}
}
unten ist, wo ich eine Ausnahme mit der Aussage "Kann nicht Objekt des Typs 'iTextSharp.text.html.simpleparser.CellWrapper" zu Typ "iTextSharp.text.Paragraph' ". " iTextSharp.text.html.simpleparser.HTMLWorker.ParseToList(new StringReader(html), null)
Ist etwas falsch mit dem HTML, das ich versuche zu analysieren? Gibt es einen besseren Weg, dies zu tun? Vielen Dank im Voraus für Ihre Hilfe. Es ist sehr geschätzt.
`HTMLWorker ' wurde zugunsten von XMLWorker veraltet . Hier ist ein funktionierendes Beispiel, das mit einem HTML-Snippet wie oben beschrieben getestet wurde:
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
);
}
Wenn Sie XMLWorker
, müssen Sie wohlgeformtes HTML verwenden - schließlich ist es ein XML-Parser. Der Beispiel- HTML
aus Ihrer Frage enthält keine abschließenden <a>
oder <br>
-Tags. Ein HTML
Parser wie HtmlAgilityPack behebt diese Probleme und macht folgendes:
<div><img src='a.gif'><br><hr></div>
das mögen:
<div><img src='a.gif' /><br /><hr /></div>
mit nur ein paar Zeilen 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
ist als nugget-Paket oder als separater Download bei sourceforge erhältlich .
Hier finden Sie eine erweiterte Nutzung von XMLWorker
.
Hier sind die Schritte, die Sie tun müssen
1- Installieren Sie itext sharp und XMLWorker von Itextsharp aus nuget
2-Dann legen Sie Ihr Design in HTML (hier Invoice.html) mit Inline-CSS
3-Stellen Sie sicher, dass alle Tags korrekt beendet sind, wie Breakpoint oder td (hier habe ich früher einen Fehler bekommen)
4-here Bild würde nicht lokal angezeigt, also ohne Zeit zu verschwenden, lud ich das Bild auf dem Server hoch und gab dem Server Pfad, um auf Image zuzugreifen.U kann mehr recherchieren, um es lokal auszuführen.
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();