Ecco quello che ero in grado di ottenere lavorando sulla versione 5.4.2 (dalla NuGet installazione) per restituire una risposta PDF da un mvc asp.net controller. Potrebbe essere modificato per usare un FileStream invece di MemoryStream per l'output se è ciò che è necessario.
ho posto qui perché è un esempio completo di utilizzo iTextSharp corrente per l'html -> conversione PDF (immagini trascurando, non ho guardato in quel dato che il mio utilizzo non lo richiede)
E ' usa iTextSharp's XmlWorkerHelper, quindi l'hmtl in entrata deve essere XHTML valido, quindi potrebbe essere necessario eseguire qualche correzione a seconda dell'input.
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");
}
}
}
}
fonte
2013-07-11 19:39:54
Probabilmente non si vuole scrivere l'output su un percorso fisso come si sta facendo con un'app web. Otterrai contesa di risorse contro quel singolo file sotto carico. Usa un MemoryStream o un file temporaneo ceduto dal sistema operativo (assicurati di eliminare il file temporaneo quando hai finito con esso). Come creare un file temporaneo: http://msdn.microsoft.com/en-us/library/system.io.path.gettempfilename.aspx – ntcolonel
Riferimento oggetto non impostato su un'istanza di un oggetto. alla lista htmlarraylist = HTMLWorker.ParseToList (new StringReader (htmlText), null); –
viento
ciao @Kyle ti prego di aiutarmi: http: //stackoverflow.com/questions/20950236/how-to-insert-html-markup-using-itextsharp-for-creating-pdf-using-c –