在PdfSharp中更改文本颜色

时间:2014-05-29 11:28:29

标签: pdf pdfsharp

我目前正在使用PdfSharp创建PDF,其主要包含文本和一些图像。 文本元素具有不同的颜色。我的问题是,只要我使用与我开始使用的颜色不同的颜色,文本就不会在生成的PDF中显示(例如,我从黑色文本开始,切换到红色文本,红色文本不可见)。所有文本元素都在生成的PDF中(我可以选择它们),但红色元素是不可见的。

所以这是代码:

// Create a new PDF document with one page
var document = new PdfDocument();
var page = document.AddPage();
page.Width = 800;
page.Height = 600;
var defaultFont = new XFont("Arial", 12, XFontStyle.Regular, new XPdfFontOptions(PdfFontEmbedding.Always));
var gfx = XGraphics.FromPdfPage(page);

// black text
gfx.DrawString("black", defaultFont, XBrushes.Black, new XRect(x, y, width, height), XStringFormats.Center);

// red text
gfx.DrawString("red", defaultFont, XBrushes.Red, new XRect(x2, y2, width2, height2), XStringFormats.Center);

我已经找到了一个解决方案(重新创建XGraphics对象),但它很安静,因为它需要在每次换色后调用:

// ...

// black text
gfx.DrawString("black", defaultFont, XBrushes.Black, new XRect(x, y, width, height), XStringFormats.Center);

// disposing the old graphics context and creating a new one seems to help
gfx.Dispose();
gfx = XGraphics.FromPdfPage(page);

// red text
gfx.DrawString("red", defaultFont, XBrushes.Red, new XRect(x2, y2, width2, height2), XStringFormats.Center);

我想有一个更好的解决方案,但我还找不到一个。

修改

正如本answer所述,我想创建一个SSCCE。在创作过程中,我发现了实际的错误。而不是XBrushes.Red我使用了自己定义的XBrush,但没有在上面的代码片段中提及它,因为我认为这是不必要的。

2 个答案:

答案 0 :(得分:11)

正如在问题的最后一节中已经提到的,我使用了自己定义的画笔而不是XBrushes.Red

我用以下方式定义:

XBrush redBrush = new XSolidBrush(new XColor {R = 207, G = 0, B = 44});

这样刷子只在处理完图形对象并创建一个新图形对象后才起作用。但经过一些谷歌搜索后,我找到了定义画笔的正确方法:

XBrush redBrush = new XSolidBrush(XColor.FromArgb(207, 0, 44));

答案 1 :(得分:0)

我尝试使用您的代码段和PDFsharp版本1.32来复制您的问题。我使用VS Express 2013自动将所有项目转换为.NET 4.5。

我尝试了两种版本(GDI +和WPF),所有颜色都适合我。

因此,您应该提供SSCCE,而不仅仅是代码段。

另见:
http://forum.pdfsharp.net/viewtopic.php?p=2094#p2094