Come aggiungere una ricca Textbox (HTML) ad una cella di tabella?

Ho una casella di testo ricca denominata: “DocumentContent” che ho intenzione di aggiungere il suo contenuto in pdf utilizzando il seguente codice:

iTextSharp.text.Font font = FontFactory.GetFont(@"C:\Windows\Fonts\arial.ttf", BaseFont.IDENTITY_H, BaseFont.EMBEDDED, 12f, Font.NORMAL, BaseColor.BLACK); DocumentContent = System.Web.HttpUtility.HtmlDecode(DocumentContent); Chunk chunkContent = new Chunk(DocumentContent); chunkContent.Font = font; Phrase PhraseContent = new Phrase(chunkContent); PhraseContent.Font = font; PdfPTable table = new PdfPTable(2); table.WidthPercentage = 100; PdfPCell cell; cell = new PdfPCell(new Phrase(PhraseContent)); cell.Border = Rectangle.NO_BORDER; table.AddCell(cell); 

Il problema è quando apro il file PDF il contenuto appare come HTML e non un testo come di seguito:

 

Overview  line1

Overview  line2

Overview  line3

Overview  line4

Overview  line4

Overview  line5 

Ma dovrebbe apparire come sotto

 Overview line1 Overview line2 Overview line3 Overview line4 Overview line4 Overview line5 

Quello che farò è di mantenere tutto lo stile che l’utente applica al rich text e semplicemente cambiare la famiglia di font in Arial.

Posso cambiare la famiglia di caratteri, ma ho bisogno di decodificare questo contenuto da HTML a testo.

Potresti gentilmente avvisare? Grazie

Si prega di dare un’occhiata all’esempio HtmlContentForCell .

In questo esempio, abbiamo l’HTML che menzioni:

 public static final String HTML = "

Overview line1

" + "

Overview line2

Overview line3

" + "

Overview line4

Overview line4

" + "

Overview line5 

";

Creiamo anche un carattere per il tag

:

 public static final String CSS = "p { font-family: Cardo; }"; 

Nel tuo caso, potresti voler sostituire Cardo con Arial .

Si noti che abbiamo registrato la versione normale del font Cardo :

 FontFactory.register("resources/fonts/Cardo-Regular.ttf"); 

Se hai bisogno di grassetto, corsivo e grassetto-corsivo, devi anche registrare quei font della stessa famiglia Cardo . (In caso di arial, dovresti registrare arial.ttf, arialbd.ttf, ariali.ttf e arialbi.ttf).

Ora possiamo analizzare questo HTML e CSS in un elenco di oggetti Element con il metodo parseToElementList() . Possiamo usare questi oggetti all’interno di una cella:

 PdfPTable table = new PdfPTable(2); table.addCell("Some rich text:"); PdfPCell cell = new PdfPCell(); for (Element e : XMLWorkerHelper.parseToElementList(HTML, CSS)) { cell.addElement(e); } table.addCell(cell); document.add(table); 

Vedi html_in_cell.pdf per il PDF risultante.

Non ho il tempo / le competenze per fornire questo esempio in iTextSharp, ma dovrebbe essere molto facile portarlo in C #.

Finalmente scrivo questo codice in c # che funziona perfettamente, grazie a Bruno che mi ha aiutato a capire XMLWorker.

Ecco un esempio che utilizza XMLWorker in C #.

Ho usato un esempio di HTML come di seguito:

 public static string HTML = "

Overview line1âââŵẅẃŷûâàêÿýỳîïíìôöóòêëéèẁẃẅŵùúúüûàáäâ

" + "

Overview line2

Overview line3

" + "

Overview line4

Overview line4

" + "

Overview line5 

";

Ho creato il file Test.css e l’ho salvato nella libreria di stili di SharePoint. (per questo test l’ho salvato nel drive D per mantenerlo semplice) Ecco il contenuto del mio file css test: p {font-family: arial; }

Quindi utilizzando il codice c # seguente ho salvato il file PDF nell’unità D. (In SharePoint ho usato Memorystream. Mantengo questo esempio molto semplice da capire)

 string fileName = @"D:\Test.pdf"; var css = @"D:\Test.css"; using (var ActionStream = new MemoryStream(UTF8Encoding.UTF8.GetBytes(HTML))) { using (FileStream cssFile = new FileStream(css, FileMode.Open)) { var document = new Document(PageSize.A4, 30, 30, 10, 10); var worker = XMLWorkerHelper.GetInstance(); var writer = PdfWriter.GetInstance(document, new FileStream(fileName, FileMode.Create)); document.Open(); worker.ParseXHtml(writer, document, ActionStream, cssFile); writer.CloseStream = false; document.Close(); } } 

Crea un file Test.pdf aggiungendo il mio HTML con Font Family: Arial. Quindi tutti i personaggi gallesi possono essere salvati in un file PDF.

Nota: Ho aggiunto iTextSharp.dll v: 5.5.3 e XMLworker.dll v: 5.5.3 al mio progetto.

 using iTextSharp.text; using iTextSharp.text.html; using iTextSharp.text.pdf; using iTextSharp.tool.xml; using iTextSharp.tool.xml.css; using iTextSharp.tool.xml.html; using iTextSharp.tool.xml.parser; using iTextSharp.tool.xml.pipeline; 

Spero che questo possa essere utile.

Kate