мне нужно знать, если есть возможность обеспечить готовым оказать HTML строку iTextSharp заголовка PDF (Существующее EVO дизайн принимает строку HTML и построить PDF), Вместо того, чтобы использовать PageEvents проектировать с PDFPTable и PDFPCell
Вы должны будете использовать страницу события рисовать заголовок или нижние колонтитулы, но нет никакой необходимости использовать PdfPTable
явно там. Фактически вы можете отображать html во время события страницы, например. например:
[Test]
public void CreatePdfWithHtmlHeader()
{
string htmlHeader = "<!DOCTYPE html><html><body><table style=\"width: 100%; border: 1px solid black;\"><tr><td>A</td><td>B</td></tr></table></body></html>";
using (FileStream output = new FileStream(@"C:\Temp\test-results\content\html-header.pdf", FileMode.Create, FileAccess.Write))
using (Document document = new Document(PageSize.A4))
{
PdfWriter writer = PdfWriter.GetInstance(document, output);
writer.PageEvent = new HtmlPageEventHelper(htmlHeader);
document.Open();
document.Add(new Paragraph("1"));
document.NewPage();
document.Add(new Paragraph("2"));
}
}
Использование следующих двух небольших вспомогательных классов.
HtmlPageEventHelper
- это прослушиватель событий страницы, нарисовавший данный html-sniplet в заголовке страницы. Очевидно, что это может альтернативно или дополнительно записать в колонтитул, просто используйте соответствующий столбец координаты
public class HtmlPageEventHelper : PdfPageEventHelper
{
public HtmlPageEventHelper(string html)
{
this.html = html;
}
public override void OnEndPage(PdfWriter writer, Document document)
{
base.OnEndPage(writer, document);
ColumnText ct = new ColumnText(writer.DirectContent);
XMLWorkerHelper.GetInstance().ParseXHtml(new ColumnTextElementHandler(ct), new StringReader(html));
ct.SetSimpleColumn(document.Left, document.Top, document.Right, document.GetTop(-20), 10, Element.ALIGN_MIDDLE);
ct.Go();
}
string html = null;
}
Для более сложного HTML sniplets вы можете захотеть заменить XMLWorkerHelper.GetInstance().ParseXHtml
вызов настроенного вызова парсера, представленными в @ ответ Skary в.
ColumnTextElementHandler
является IElementHandler
реализация, которая добавляет контент (созданный, например, путем разбора HTML) к ColumnText
public class ColumnTextElementHandler : IElementHandler
{
public ColumnTextElementHandler(ColumnText ct)
{
this.ct = ct;
}
ColumnText ct = null;
public void Add(IWritable w)
{
if (w is WritableElement)
{
foreach (IElement e in ((WritableElement)w).Elements())
{
ct.AddElement(e);
}
}
}
}
Кстати, тест выше производит PDF с этим содержанием:
...
...
Отказ от ответственности: Я в основном работаю с Java и не использовали XmlWorker
раньше. Таким образом, этот код может иметь значительный потенциал для улучшения.
Если ответ достаточно отвечает на вопрос, который вы разместили здесь, вы должны принять его (щелкнув по галочку в верхнем левом углу ответа). Если это не так, вы должны добавить комментарий, в котором вы описываете, каким образом он не может этого сделать. – mkl