2012-06-15 97 views
10

estoy usando el iTextSharp.dll con el siguiente código:iTextSharp: ¿es posible establecer un color de fuente diferente para la misma celda y fila?

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 }); 

¿Podemos establecer diferentes colores de fuente para el título y la descripción, pero sólo utilizando una sola célula (es decir, sin necesidad de crear una nueva tabla)?

Cualquier ayuda en esta materia sería muy apreciada.

Respuesta

16

Lo que quiere hacer es crear 2 Chunk objetos, y luego combinarlos en 1 Phrase que agregará a la celda.

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)); 

Tenga una mirada en http://www.mikesdotnetting.com/Article/82/iTextSharp-Adding-Text-with-Chunks-Phrases-and-Paragraphs

+0

solución anterior se ve bien, pero no funciona. En este caso, ambas fuentes salieron igual: var titleChunk = new Chunk ("UPRN:", _fntHeading9); var descriptionChunk = new Chunk (keyPropertyId.ToString(), _fntNormal9); var phrase = new Phrase (titleChunk); phrase.Add (descriptionChunk); table.AddCell (nuevo PdfPCell (frase)); –

+0

El código definitivamente funciona, ¿quizás los objetos de fuentes apuntan a la misma fuente? O hay otro problema en juego. – TimS

+4

Definitivamente no funcionó. Los objetos de fuente son diferentes. Uno es Negrita, el otro es Normal. Este código funcionó: public static Font _fntNormal9 = FontFactory.GetFont ("Arial", 9, Font.NORMAL); public static Fuente _fntHeading9 = FontFactory.GetFont ("Arial", 9, Font.BOLD); var phrase = new Phrase(); phrase.Add (nueva frase ("UPRN:", _fntHeading9)); phrase.Add (new Phrase (keyPropertyId.ToString(), _fntNormal9)); table.AddCell (nuevo PdfPCell (frase)); –

3

Trate como este para establecer un color de primer plano diferente en una célula 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

Para VB.net utilizar la siguiente función

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

agradable. Gracias !! –

0

El truco es crear frases (NO fragmentos) con diferentes fuentes y agregarlas a un pa frase de alquiler Por lo que puedo decir si crea fragmentos con diferentes fuentes y los agrega a una frase, todo el texto en la frase final se muestra con la misma fuente.

Aquí hay un ejemplo que funciona para mí:

// 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); 
Cuestiones relacionadas