c# - 在 iText 7 中 - 具有相同坐标的段落和矩形不正确重叠

标签 c# itext itext7

我正在使用 C# 和 iText 7.2.1。

我想在矩形内绘制文本。我在文档中看到矩形和段落的定位 anchor 都是“左下角”。但是当我使用以下代码时,它们不在同一位置。看来他们对Y坐标的理解不同。

enter image description here

我的代码:

using iText.IO.Font;
using iText.IO.Font.Constants;
using iText.Kernel.Colors;
using iText.Kernel.Font;
using iText.Kernel.Pdf;
using iText.Kernel.Pdf.Canvas;
using iText.Layout;
using iText.Layout.Element;

namespace iTextTest
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            var str = "ABCD1234";
            var fontSize = 32;
            var x = 100;
            var y = 700;
            var writer = new PdfWriter("test.pdf");
            var pdfdoc = new PdfDocument(writer);
            var doc = new Document(pdfdoc);
            var font = PdfFontFactory.CreateFont(StandardFonts.HELVETICA);
            var width = font.GetWidth(str, fontSize);
            var height = fontSize;

            // Draw rectangle
            var pdfPage = pdfdoc.AddNewPage();
            var pdfCanvas = new PdfCanvas(pdfPage);
            pdfCanvas.SetFillColor(ColorConstants.YELLOW);
            pdfCanvas.Rectangle(x, y, width, height);
            pdfCanvas.Fill();

            // Draw text
            var p = new Paragraph().Add(str).SetFont(font);
            p.SetFontSize(fontSize).SetFontColor(ColorConstants.BLACK);
            p.SetFixedPosition(x, y, width);
            doc.Add(p);

            doc.Close();
            pdfdoc.Close();
            writer.Close();
        }
    }
}

最佳答案

段落的一行不需要字体大小的高度,而是需要行距。对于紧密设置的文本,前导可能等于字体大小(有时甚至小于字体大小),但对于易于阅读的文本,前导通常大于字体大小。

使用 iText 绘制段落时,多余的空格位于行的底部。这会导致您在输出中看到的行下方出现空白区域。

因此,为了使您的代码正常工作,您必须设置行距以匹配您的字体大小,即

// Draw text
var p = new Paragraph().Add(str).SetFont(font);
p.SetFontSize(fontSize).SetFontColor(ColorConstants.BLACK);
p.SetFixedPosition(x, y, width);
p.SetFixedLeading(fontSize); // <-- added
doc.Add(p);

( TextPosition 测试 TextAndPositionLikeLikeLandings)

结果:

screen shot

关于c# - 在 iText 7 中 - 具有相同坐标的段落和矩形不正确重叠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71446903/

相关文章:

c# - Amazon Simple Notification Service "push"可以通知到桌面客户端吗?

c# - 键盘按键捕获

java - iText 7 中的 PdfConcatenate(智能)

java - itext 7 (java) 在新页面上将图像添加到现有 pdf 文档的末尾

iText7 数字签名图像对齐

java - itext7 Java 为现有 pdf 中的标题创建 PdfExplicitDestination

c# - 将图像从工具条上的图像列表添加到按钮?

c# - .Net 框架 mscorpe.dll 错误

c# - 不是保存 pdf 文件,而是显示目录列表

java - 如何在使用 Flying Saucer 创建的 PDF 中设置元数据