【发布时间】:2013-04-15 17:24:52
【问题描述】:
我正在使用 iTextSharp 版本。 5.4.1。我正在尝试从 HTML 生成 PDF。下面粘贴的代码行给出了一个错误名称“标记”在当前上下文中不存在。这适用于 itextSharp ver 5.2.1。有人可以告诉 标记 属于 5.4.1 版中的哪个类。
document.Add(new Header(**Markup**.HTML_ATTR_STYLESHEET, string.Empty));
代码:
/// <summary>
/// Renders the PDF to an array of bytes
/// </summary>
public byte[] RenderPdf()
{
//Document is inbuilt class, available in iTextSharp
MemoryStream file = new MemoryStream();
Document document = new Document(this.PageSize);
PdfWriter writer = PdfWriter.GetInstance(document, file);
//allow modifications of the document
if (this.BeforeRender is RenderEvent)
{
this.BeforeRender(writer, document);
}
//header
document.Add(new Header(Markup.HTML_ATTR_STYLESHEET, string.Empty));
document.Open();
//render each page that has been added
foreach (HtmlPdfPage page in this._Pages)
{
document.NewPage();
//generate this page of text
MemoryStream output = new MemoryStream();
StreamWriter html = new StreamWriter(output, Encoding.UTF8);
//get the page output
html.Write(string.Concat(HtmlToPdfBuilder.DOCUMENT_HTML_START, page._Html.ToString(), HtmlToPdfBuilder.DOCUMENT_HTML_END));
html.Close();
html.Dispose();
//read the created stream
MemoryStream generate = new MemoryStream(output.ToArray());
StreamReader reader = new StreamReader(generate);
foreach (var item in (IEnumerable)HTMLWorker.ParseToList(reader, this._Styles))
{
document.Add((IElement)item);
}
//cleanup these streams
html.Dispose();
reader.Dispose();
output.Dispose();
generate.Dispose();
}
//after rendering
if (this.AfterRender is RenderEvent)
{
this.AfterRender(writer, document);
}
//return the rendered PDF
document.Close();
return file.ToArray();
}
【问题讨论】:
-
标记类在很久以前就被移除了,还有 HtmlWriter。您是在尝试创建 HTML 吗???
-
是的。我正在尝试在 .net MVC 中生成 pdf,并遇到了 Hugo Bonacci 的这段代码。能否请您指导一种更好的方法来在 MVC 应用程序中从 HTML 生成 pdf。
-
我不认识 Hugo Bonacci,但如果他告诉您您需要 Markup 类来执行此操作,那他就错了。例如,您可以阅读 rgagnon.com/javadetails/java-html-to-pdf-using-itext.html
-
谢谢。您能否指导我找到在 .net MVC 应用程序中生成 PDF 的最佳方法。
-
@BumbleBee 你有没有找到解决这个问题的方法?我自己也遇到了这个问题。
标签: itextsharp