【问题标题】:PDFsharp draws text under graphicsPDFsharp 在图形下绘制文本
【发布时间】:2016-01-21 22:07:03
【问题描述】:

我正在使用 PDFsharp 从头开始​​生成 PDF 文档。我正在尝试在渐变填充矩形上写文本。生成文档后,渐变出现在文本顶部,使文本完全隐藏。

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

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

我发现我以后绘制的任何图像都会出现在矩形的顶部。只是隐藏在背后的文字。

【问题讨论】:

    标签: c# text graphics z-index pdfsharp


    【解决方案1】:

    使用当前版本的 PDFsharp 1.50 时,第一篇文章中给出的代码可以正常工作。

    使用 PDFsharp 1.3x 或更早版本时,需要使用上一个答案中给出的解决方法。

    【讨论】:

    • 太棒了!在重新创建示例时,我只使用了以下我认为是最新的 nuget 包:nuget.org/packages/PdfSharp
    • 添加 NuGet 页面顶部是有更新版本的注释,页面底部是包含详细信息的列表。
    • v1.50 是测试版吗? Visual Studio 的 NuGet 包管理器将 1.32.2602 显示为 2012 年 2 月 16 日发布的最新稳定版本。
    • PDFsharp 1.50 目前被列为“测试版”,它是您可以获得的最好的 PDFsharp,它是我们在生产版本中使用的 PDFsharp。
    【解决方案2】:

    试试这样:

    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 对象在操作之间的状态。

    【讨论】:

    • 太棒了!这也解决了我在 alpha 通道粘连时遇到的问题。谢谢!
    • 使用当前版本的 PDFsharp(1.50,去年发布)时不需要该解决方法。那些想坚持使用 1.3x 版本的人必须使用解决方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多