2016-01-21 122 views
1

我使用PDFsharp生成一个从无到有的PDF文档中的文本。我正在尝试在渐变填充矩形的顶部写入文本。生成文档后,渐变显示在文本顶部,使文本完全隐藏。PDFsharp绘制在图形

using (var document = new PdfDocument()) 
{ 
    var page = document.AddPage(); 
    var graphics = XGraphics.FromPdfPage(page, XGraphicsPdfPageOptions.Append); 
    graphics.SmoothingMode = XSmoothingMode.HighQuality; 

    var bounds = new XRect(graphics.PageOrigin, graphics.PageSize); 
    graphics.DrawRectangle(
     new XLinearGradientBrush(
      bounds, 
      XColor.FromKnownColor(XKnownColor.Red), 
      XColor.FromKnownColor(XKnownColor.White), 
      XLinearGradientMode.ForwardDiagonal), 
     bounds); 
    graphics.DrawString(
     "Hello World!", 
     new XFont("Arial", 20), 
     XBrushes.Black, 
     bounds.Center, 
     XStringFormats.Center); 

    document.Save("test.pdf"); 
    document.Close(); 
} 

如何使文本呈现在矩形的顶部?

我发现我后来画任何图像将出现在矩形的顶部。这只是隐藏在后面的文字。

回答

1

试试这样说:

using (var document = new PdfDocument()) 
{ 
    var page = document.AddPage(); 
    var graphics = XGraphics.FromPdfPage(page, XGraphicsPdfPageOptions.Append); 
    graphics.SmoothingMode = XSmoothingMode.HighQuality; 

    var bounds = new XRect(graphics.PageOrigin, graphics.PageSize); 
    var state = graphics.Save(); 
    graphics.DrawRectangle(
     new XLinearGradientBrush(
      bounds, 
      XColor.FromKnownColor(XKnownColor.Red), 
      XColor.FromKnownColor(XKnownColor.White), 
      XLinearGradientMode.ForwardDiagonal), 
     bounds); 
    graphics.Restore(state); 
    graphics.DrawString(
     "Hello World!", 
     new XFont("Arial", 20), 
     XBrushes.Black, 
     bounds.Center, 
     XStringFormats.Center); 

    document.Save("test.pdf"); 
    document.Close(); 
} 

遗憾的是,根据this forum post在库的代码中的错误。 解决方法是SaveRestore操作之间的XGraphics对象的状态。

+0

太棒了!这也解决了我在使用alpha通道时遇到的问题。谢谢! –

+0

使用当前版本的PDFsharp(1.50,去年发布)时,不需要解决方法。那些想要坚持版本1.3x的人必须使用解决方法。 –

1

在第一篇文章中给出的代码中使用PDFsharp,1.50的当前版本时,工作正常。当使用PDFsharp版本1.3倍或更早需要

在以前的答案给出的解决方法。

+0

太棒了!当重建样品我只是用下面的NuGet包,我认为是最新的:https://www.nuget.org/packages/PdfSharp/ –

+1

添加的NuGet页面的顶部是一张纸条,上面有更新版本,并在该页面的底部是一个包含详细信息的列表。 –

+0

是在测试版v1.50? Visual Studio的NuGet Package Manager将1.32.2602作为2012年2月16日发布的最新稳定版本。 –