在PdfSharp中更改文本颜色

在PdfSharp中更改文本颜色,pdf,pdfsharp,Pdf,Pdfsharp,我目前正在用PdfSharp创建一个PDF,它主要由文本和一些图像组成。 文本元素有不同的颜色。我的问题是,一旦我使用的颜色与我开始使用的颜色不同,文本在生成的PDF中就不可见(例如,我从黑色文本开始,切换到红色文本,红色文本不可见)。所有文本元素都在生成的PDF中(我可以选择它们),但红色元素不可见 下面是代码: // Create a new PDF document with one page var document = new PdfDocument(); var page = doc

我目前正在用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);
我想有更好的解决办法,但我还没找到

编辑


正如本文所建议的,我想创建一个SSCCE。在创建过程中,我发现了实际的bug。我没有使用XBrush.Red,而是使用了自己定义的XBrush,但在上面的代码段中没有提到它,因为我认为它是不必要的。

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

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

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

另请参见:

正如问题的最后一部分所提到的,我使用了自己定义的画笔,而不是
XBrushes.Red

我对它的定义如下:

XBrush redBrush = new XSolidBrush(new XColor {R = 207, G = 0, B = 44});
这样,画笔只有在我处理了图形对象并创建了一个新对象之后才能工作。但在谷歌搜索之后,我找到了定义画笔的正确方法:

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

谢谢你的建议,我认为代码片段已经足够了,但是你证明我错了。在创建SSCCE的过程中,我发现了错误。我将发布解决方案作为答案。
XColor.FromArgb(207,0,44)
初始化XColor的所有成员并创建不透明颜色
newxcolor{R=207,G=0,B=44}
仅初始化R、G和B,但将Alpha保留为0,其他一些成员也未初始化。