我正在使用 C# 和 iText 7.2.1。
我想在矩形内绘制文本。我在文档中看到矩形和段落的定位 anchor 都是“左下角”。但是当我使用以下代码时,它们不在同一位置。看来他们对Y坐标的理解不同。
我的代码:
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
)
结果:
关于c# - 在 iText 7 中 - 具有相同坐标的段落和矩形不正确重叠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71446903/