我目前正在使用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,但没有在上面的代码片段中提及它,因为我认为这是不必要的。
答案 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,而不仅仅是代码段。