C# iTextSharp - 是否可以为相同的单元格和行设置不同的字体颜色?

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/11045731/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-09 16:14:45  来源:igfitidea点击:

iTextSharp - Is it possible to set a different font color for the same cell and row?

c#asp.netpdfitextsharp

提问by Nick K

I am using the iTextSharp.dll with the following code:

我将 iTextSharp.dll 与以下代码一起使用:

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

Can we set different font colors for title and description, but only using single cell (ie without creating a new table)?

我们可以为标题和描述设置不同的字体颜色,但只使用单个单元格(即不创建新表格)吗?

Any help in this matter would be greatly appreciated.

在这方面的任何帮助将不胜感激。

采纳答案by TimS

What you want to do is create 2 Chunkobjects, and then combine these into 1 Phrasewhich you will add to the cell.

您想要做的是创建 2 个Chunk对象,然后将它们组合成 1 个Phrase,然后将其添加到单元格中。

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

Have a look at http://www.mikesdotnetting.com/Article/82/iTextSharp-Adding-Text-with-Chunks-Phrases-and-Paragraphs

看看http://www.mikesdotnetting.com/Article/82/iTextSharp-Adding-Text-with-Chunks-Phrases-and-Paragraphs

回答by Nalan Madheswaran

Try like this to set a different foreground color in a pdf cell:

尝试这样在 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);

回答by Johnbosco Adam

For VB.net Use the following function

对于 VB.net 使用以下函数

 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)

回答by Andy Brown

The trick is to create phrases (NOT chunks) with different fonts and add these to a parent phrase. As far as I can tell if you create chunks with different fonts and add these to a phrase, all of the text in the final phrase displays with the same font.

诀窍是创建具有不同字体的短语(不是块)并将它们添加到父短语中。据我所知,如果您使用不同的字体创建块并将它们添加到一个短语中,最终短语中的所有文本都以相同的字体显示。

Here's an example which works for 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);