PDFsharp在图形

时间:2016-01-21 22:07:04

标签: c# text graphics z-index pdfsharp

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

如何在矩形顶部渲染文字?

我发现之后绘制的任何图像都会出现在矩形的顶部。这是唯一隐藏的文字。

2 个答案:

答案 0 :(得分: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对象在操作之间的状态。

答案 1 :(得分:1)

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

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