2012-06-15 6 views
10

Sto usando l'iTextSharp.dll con il seguente codice:iTextSharp - È possibile impostare un colore di carattere diverso per la stessa cella e riga?

var Title = "This is title"; 
var Description = "This is description"; 

Innertable.AddCell(new PdfPCell(new Phrase(string.Format("{0} {1}", Title, Description.Trim()), listTextFont)) { BackgroundColor = new BaseColor(233, 244, 249), BorderWidth = 0, PaddingTop = 4, PaddingLeft = -240, PaddingBottom = 5, HorizontalAlignment = Element.ALIGN_LEFT }); 

possiamo impostare diversi colori per titolo e la descrizione dei caratteri, ma solo utilizzando singola cella (cioè senza la creazione di una nuova tabella)?

Qualsiasi aiuto in questa materia sarebbe molto apprezzato.

risposta

16

Quello che si vuole fare è creare 2 oggetti Chunk e combinarli in 1 Phrase che si aggiungerà alla cella.

var blackListTextFont = FontFactory.GetFont("Arial", 28, Color.BLACK); 
var redListTextFont = FontFactory.GetFont("Arial", 28, Color.RED); 

var titleChunk = new Chunk("Title", blackListTextFont); 
var descriptionChunk = new Chunk("Description", redListTextFont); 

var phrase = new Phrase(titleChunk); 
phrase.Add(descriptionChunk); 

table.AddCell(new PdfPCell(phrase)); 

Dai un'occhiata alla http://www.mikesdotnetting.com/Article/82/iTextSharp-Adding-Text-with-Chunks-Phrases-and-Paragraphs

+0

soluzione di cui sopra sembra buono, ma non funziona. In questo caso, entrambi i tipi di carattere sono risultati uguali: var titleChunk = new Chunk ("UPRN:", _fntHeading9); var descriptionChunk = new Chunk (keyPropertyId.ToString(), _fntNormal9); var phrase = new Phrase (titleChunk); phrase.Add (descriptionChunk); table.AddCell (new PdfPCell (frase)); –

+0

Il codice funziona sicuramente, forse gli oggetti font puntano allo stesso carattere? Oppure c'è un altro problema in gioco. – TimS

+4

Sicuramente non ha funzionato. Gli oggetti font sono diversi. Uno è grassetto, l'altro è normale. Questo codice ha funzionato: font statico pubblico _fntNormal9 = FontFactory.GetFont ("Arial", 9, Font.NORMAL); Font statico pubblico _fntHeading9 = FontFactory.GetFont ("Arial", 9, Font.BOLD); var phrase = new Phrase(); phrase.Add (new Phrase ("UPRN:", _fntHeading9)); phrase.Add (new Phrase (keyPropertyId.ToString(), _fntNormal9)); table.AddCell (new PdfPCell (frase)); –

3

Prova in questo modo per impostare un diverso colore di primo piano in una cella pdf:

var FontColour = new BaseColor(35, 31, 32); 
var Calibri8 = FontFactory.GetFont("Calibri", 8, FontColour); 

PdfPCell R3C2 = new PdfPCell(new Paragraph("Hello", Calibri8)); 
R3C2.BorderWidth = 0f; 
R3C2.HorizontalAlignment = PdfPCell.ALIGN_RIGHT; 
table.AddCell(R3C2); 
0

Per VB.net utilizzare la seguente funzione

Public Function CreateFont(size As Integer, Optional style As Integer = iTextSharp.text.Font.BOLD) As iTextSharp.text.Font 
     Dim FontColour = New BaseColor(193, 36, 67) 'Color code 
     Return New iTextSharp.text.Font(iTextSharp.text.Font.FontFamily.TIMES_ROMAN, size, style, FontColour) 
End Function 


Dim p As New Paragraph 
p.Add(New Paragraph("Your Sentence Here", CreateFont(12, iTextSharp.text.Font.BOLDITALIC))) 
pdfDoc.Add(p) 
+0

bello. Grazie !! –

0

Il trucco è creare frasi (NON blocchi) con caratteri diversi e aggiungerli a un pa frase di affitto. Per quanto posso dire se si creano blocchi con diversi tipi di carattere e li si aggiunge a una frase, tutto il testo nella frase finale viene visualizzato con lo stesso carattere.

Ecco un esempio che funziona per me:

// create the font we'll use 
var fNormal = FontFactory.GetFont("Helvetica", 10f); 
fNormal.SetColor(0, 0, 0); 

// add phrase containing link 
var pFooter = new Phrase(); 

// add phrase to this containing text only 
var footerStart = new Phrase("Visit "); 
footerStart.Font = fNormal; 
pFooter.Add(footerStart); 

// now create anchor and add with different font 
string wolSiteUrl = "http://www.whateveryoulike.com"; 
Anchor wolWebSiteLink = new Anchor(wolSiteUrl, fNormal); 
wolWebSiteLink.Reference = wolSiteUrl; 
wolWebSiteLink.Font = fNormal; 
wolWebSiteLink.Font.SetColor(242, 132, 0); 
pFooter.Add(wolWebSiteLink); 

// add text to go after this link 
var footerEnd = new Phrase(" to view these results online."); 
footerEnd.Font = fNormal; 
pFooter.Add(footerEnd); 
var paraFooter = new Paragraph(pFooter); 

// add the phrase we've built up containing lots of little phrases to document 
// (assume you have one of these ...) 
doc.Add(paraFooter);