Вот что я смог работать на версии 5.4.2 (от NuGet установки), чтобы возвращать ответ в формате PDF из ASP.NET MVC контроллер. Модифицировать можно, используя FileStream вместо MemoryStream для вывода, если это то, что необходимо.
я его здесь, потому что это полный пример текущего использования iTextSharp для HTML -> преобразования PDF (без учета изображения, я не смотрел на это, так как мое использование не требует этого)
Это использует XmlWorkerHelper iTextSharp, поэтому входящий 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");
}
}
}
}
Вы, вероятно, не хотите написать свой выход к фиксированному пути, как вы делаете с веб-приложение. Вы получите конфликт ресурсов с этим единственным файлом под нагрузкой. Используйте MemoryStream или временный файл, предоставленный ОС (обязательно удалите временный файл, когда вы закончите с ним). Как создать временный файл: http://msdn.microsoft.com/en-us/library/system.io.path.gettempfilename.aspx – ntcolonel
Ссылка на объект не установлена в экземпляр объекта. в списке htmlarraylist = HTMLWorker.ParseToList (новый StringReader (htmlText), null); –
viento
привет, @Kyle, пожалуйста, помогите мне: http: //stackoverflow.com/questions/20950236/how-to-insert-html-markup-using-itextsharp-for-creating-pdf-using-c –