PDFsharp在图形下绘制文本 [英] PDFsharp draws text under graphics

查看:377
本文介绍了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(
界限,
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();
}

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



我发现后面绘制的任何图像都会显示在矩形的顶部。这只是隐藏在后面的文本。

解决方案

试试这样:

< pre $ 使用(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(
界限,
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();
}

不幸的是,根据此论坛帖子
解决方法是:保存还原 XGraphics 操作之间的对象状态。


I am using PDFsharp to generate a PDF document from scratch. I am trying to write text on top of a gradient filled rectangle. After generating the document, the gradient appears on top of the text rendering the text completely hidden.

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

How can I make the text render on top of the rectangle?

I find that any images I draw later will appear on top of the rectangle. It’s only text that hides behind.

解决方案

Try it like this:

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

Unfortunately, there is a bug in the library's code according to this forum post. The workaround is to Save and Restore the XGraphics object's state between operations.

这篇关于PDFsharp在图形下绘制文本的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆