iTextSharp - MVC / HTMLWorker одна строка для добавления в абзац
Я отправляю содержимое редактора Telerik MVC на контроллер, используя Ajax в качестве строки: I выходит как:
"<strong>Hello world!</strong> <object height="1" id="plugin0" style="position:absolute;z-index:1000;" type="application/x-dgnria" width="1"><param name="tabId" value="{84594B7B-865F-4AD7-A798-294A8B0EB376}" /></object>"
В контроллере я сохраняю строку в переменную сеанса, используя следующее:
string comments = HttpUtility.HtmlDecode(Text);
MySession.Current.pdfText = comments;
Я могу конвертировать его в PDF с помощью
.....
HTMLWorker parser = new HTMLWorker(document);
.......
Однако я не мог добавить никаких других абзацев на ту же страницу, это делает новую страницу.
Я попытался использовать следующее, Чтобы сделать новый абзац с помощью HTMLWORK:
string PDFText = MySession.Current.pdfText;
string PDFText1 = HTMLWorker.Parse(PDFText);
StringReader reader = new StringReader(PDFText1);
paragraph.Add(reader);
Я получил их. ошибки:
cannot convert from 'System.IO.StringReader' to 'string', and
The best overloaded method match for 'iTextSharp.text.html.simpleparser.HTMLWorker.Parse(System.IO.TextReader)' has some invalid arguments, and
The best overloaded method match for 'iTextSharp.text.Phrase.Add(string)' has some invalid arguments
Я был бы признателен за ваши предложения, заранее благодарю.1 ответ:
Я много работал над iTextSharp и обычно следую подходу создания таблицы или вложенных таблиц; при необходимости, с несколькими строками и столбцами и использованием colspan для распространения моего контента на странице.
PdfPTable table = new PdfPTable(1); //Create a new table with one column PdfPCell cell = new PdfPCell(); //Create an empty cell StyleSheet style = new StyleSheet(); //Declare a stylesheet style.LoadTagStyle("h1", "color", "red"); //Create styles for your html tags which you think will be there in PDFText ArrayList objects = HTMLWorker.ParseToList(new StringReader(PDFText),style); //This transforms your HTML to a list of PDF compatible objects for (int k = 0; k < objects.Count; ++k) { cell.AddElement((IElement)objects[k]); //Add these objects to cell one by one } table.AddCell(cell); //Add cell to table document.add(table) //Add table to the document
Попробуйте сделать это только с абзацем один раз, как вы пытались в вопросе. в противном случае этот подход определенно не приведет к новой странице.
Редактировать:
Пожалуйста, смотрите обновленный код
PdfPTable table = new PdfPTable(2); //Create a new table with one column PdfPCell cellLeft = new PdfPCell(); //Create an empty cell StyleSheet style = new StyleSheet(); //Declare a stylesheet style.LoadTagStyle("h1", "color", "red"); //Create styles for your html tags which you think will be there in PDFText List<IElement> objects = HTMLWorker.ParseToList(new StringReader(PDFText),style); //This transforms your HTML to a list of PDF compatible objects for (int k = 0; k < objects.Count; ++k) { cellLeft.AddElement((IElement)objects[k]); //Add these objects to cell one by one } table.AddCell(cellLeft); //Add cell to table string url = "http://localhost:1713/PDF/Images/sample.jpg"; //Image Path(can give local machine path for testing) PdfPCell cellRight = new PdfPCell(); Image jpg = Image.GetInstance(new Uri(url)); cellRight.AddElement(jpg); table.AddCell(cellRight); document.add(table);
Пожалуйста, google для заполнения, полей, границ и раскраски и т. д..