我正在尝试从HTML页面中创建PDF。我正在使用的CMS是EPiServer。
到目前为止,这是我的代码:
protected void Button1_Click(object sender, EventArgs e)
{
naaflib.pdfDocument(CurrentPage);
}
public static void pdfDocument(PageData pd)
{
//Extract data from Page (pd).
string intro = pd["MainIntro"].ToString(); // Attribute
string mainBody = pd["MainBody"].ToString(); // Attribute
// makae ready HttpContext
HttpContext.Current.Response.Clear();
HttpContext.Current.Response.ContentType = "application/pdf";
// Create PDF document
Document pdfDocument = new Document(PageSize.A4, 80, 50, 30, 65);
//PdfWriter pw = PdfWriter.GetInstance(pdfDocument, HttpContext.Current.Response.OutputStream);
PdfWriter.GetInstance(pdfDocument, HttpContext.Current.Response.OutputStream);
pdfDocument.Open();
pdfDocument.Add(new Paragraph(pd.PageName));
pdfDocument.Add(new Paragraph(intro));
pdfDocument.Add(new Paragraph(mainBody));
pdfDocument.Close();
HttpContext.Current.Response.End();
}
这将输出文章名称,简介和主体的内容。 但它没有解析文章文本中的HTML,也没有布局。
我试过看http://itextsharp.sourceforge.net/tutorial/index.html而没有任何明智的想法。
非常感谢任何指向正确方向的指示:)
答案 0 :(得分:5)
对于更高版本的iTextSharp:
使用iTextSharp,您可以使用iTextSharp.text.html.simpleparser.HTMLWorker.ParseToList()
方法从HTML创建PDF。
ParseToList()
为其HTML源提供TextReader
(抽象类),这意味着您可以使用StringReader
或StreamReader
(两者都使用TextReader作为基础类型)。我使用了StringReader
并且能够通过简单的标记生成PDF。我试图使用从网页返回的HTML,并在除了简单页面之外的所有页面上都有错误。即使是我检索到的简化网页(http://black.ea.com/)也正在将页面的'head'标签内容呈现到PDF上,所以我认为HTMLWorker.ParseToList()
方法对于它解析的HTML的格式是挑剔的。 / p>
无论如何,如果您想在这里尝试我使用的测试代码:
// Download content from a very, very simple "Hello World" web page.
string download = new WebClient().DownloadString("http://black.ea.com/");
Document document = new Document(PageSize.A4, 80, 50, 30, 65);
try {
using (FileStream fs = new FileStream("TestOutput.pdf", FileMode.Create)) {
PdfWriter.GetInstance(document, fs);
using (StringReader stringReader = new StringReader(download)) {
ArrayList parsedList = HTMLWorker.ParseToList(stringReader, null);
document.Open();
foreach (object item in parsedList) {
document.Add((IElement)item);
}
document.Close();
}
}
} catch (Exception exc) {
Console.Error.WriteLine(exc.Message);
}
我找不到任何HTML构造HTMLWorker.ParseToList()
支持的文档;如果你这样做,请在这里发布。我相信很多人会对此感兴趣。
对于旧版本的iTextSharp:
您可以使用iTextSharp.text.html.HtmlParser.Parse
方法基于html创建PDF。
这是一个证明这一点的片段:
Document document = new Document(PageSize.A4, 80, 50, 30, 65);
try {
using (FileStream fs = new FileStream("TestOutput.pdf", FileMode.Create)) {
PdfWriter.GetInstance(document, fs);
HtmlParser.Parse(document, "YourHtmlDocument.html");
}
} catch(Exception exc) {
Console.Error.WriteLine(exc.Message);
}
一个(主要针对我)问题是HTML必须严格遵守XHTML。
祝你好运!