我想知道ITextSharp是否有能力将HTML转换成PDF。我要转换的所有内容都是纯文本的,但不幸的是,关于ITextSharp的文档很少甚至没有,所以我不能确定这是否对我来说是一个可行的解决方案。
如果它不能做到这一点,谁能给我一些好的,免费的.net库,可以接受一个简单的纯文本HTML文档并将其转换为pdf?
蒂娅。
发布于 2010-05-13 06:32:56
在做了一些挖掘之后,我发现了一个用ITextSharp完成我所需要的东西的好方法。
以下是一些示例代码,如果它将来对其他人有帮助的话:
protected void Page_Load(object sender, EventArgs e)
{
Document document = new Document();
try
{
PdfWriter.GetInstance(document, new FileStream("c:\\my.pdf", FileMode.Create));
document.Open();
WebClient wc = new WebClient();
string htmlText = wc.DownloadString("http://localhost:59500/my.html");
Response.Write(htmlText);
List<IElement> htmlarraylist = HTMLWorker.ParseToList(new StringReader(htmlText), null);
for (int k = 0; k < htmlarraylist.Count; k++)
{
document.Add((IElement)htmlarraylist[k]);
}
document.Close();
}
catch
{
}
}
发布于 2010-05-14 23:16:15
几周前我遇到了同样的问题,这是我发现的结果。此方法可将HTML快速转储为PDF。文档很可能需要对格式进行一些调整。
private MemoryStream createPDF(string html)
{
MemoryStream msOutput = new MemoryStream();
TextReader reader = new StringReader(html);
// step 1: creation of a document-object
Document document = new Document(PageSize.A4, 30, 30, 30, 30);
// step 2:
// we create a writer that listens to the document
// and directs a XML-stream to a file
PdfWriter writer = PdfWriter.GetInstance(document, msOutput);
// step 3: we create a worker parse the document
HTMLWorker worker = new HTMLWorker(document);
// step 4: we open document and start the worker on the document
document.Open();
worker.StartDocument();
// step 5: parse the html into the document
worker.Parse(reader);
// step 6: close the document and the worker
worker.EndDocument();
worker.Close();
document.Close();
return msOutput;
}
发布于 2013-07-12 03:39:54
下面是我在版本5.4.2 (来自nuget install)上所做的工作,以便从asp.net mvc控制器返回pdf响应。如果需要的话,可以修改为使用FileStream而不是MemoryStream作为输出。
我之所以把它贴在这里,是因为它是当前用于html -> pdf转换的iTextSharp使用情况的完整示例(忽略图像,我没有看过它,因为我的使用不需要它)。
它使用iTextSharp的XmlWorkerHelper,因此传入的hmtl必须是有效的XHTML,因此您可能需要根据您的输入做一些修正。
using iTextSharp.text.pdf;
using iTextSharp.tool.xml;
using System.IO;
using System.Web.Mvc;
namespace Sample.Web.Controllers
{
public class PdfConverterController : Controller
{
[ValidateInput(false)]
[HttpPost]
public ActionResult HtmlToPdf(string html)
{
html = @"<?xml version=""1.0"" encoding=""UTF-8""?>
<!DOCTYPE html
PUBLIC ""-//W3C//DTD XHTML 1.0 Strict//EN""
""http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"">
<html xmlns=""http://www.w3.org/1999/xhtml"" xml:lang=""en"" lang=""en"">
<head>
<title>Minimal XHTML 1.0 Document with W3C DTD</title>
</head>
<body>
" + html + "</body></html>";
var bytes = System.Text.Encoding.UTF8.GetBytes(html);
using (var input = new MemoryStream(bytes))
{
var output = new MemoryStream(); // this MemoryStream is closed by FileStreamResult
var document = new iTextSharp.text.Document(iTextSharp.text.PageSize.LETTER, 50, 50, 50, 50);
var writer = PdfWriter.GetInstance(document, output);
writer.CloseStream = false;
document.Open();
var xmlWorker = XMLWorkerHelper.GetInstance();
xmlWorker.ParseXHtml(writer, document, input, null);
document.Close();
output.Position = 0;
return new FileStreamResult(output, "application/pdf");
}
}
}
}
https://stackoverflow.com/questions/2822843
复制相似问题