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 4

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 для заполнения, полей, границ и раскраски и т. д..