PDFsharp在图形下绘制文字

PDFsharp draws text under graphics

我正在使用 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();
}

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

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

像这样尝试:

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

第一个 post 中给出的代码在使用当前版本的 PDFsharp 1.50 时工作正常。

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