c# iText7 如何设置段落左上角的位置

c# iText7 how to set the position of the top left corner of a paragraph

提问人:zhusp 提问时间:11/16/2023 最后编辑:zhusp 更新时间:11/23/2023 访问量:76

问:

我不想在pdf文件中写一个段落,以便段落的左上角正好位于页面100,100的左上角。

var targetPdfPath = "100x100.pdf";
using (PdfDocument pdfDoc = new PdfDocument(new PdfWriter(targetPdfPath)))
{
    Document document = new Document(pdfDoc);
    var page = pdfDoc.AddNewPage(PageSize.A4);
    Paragraph paragraph = new Paragraph("Must be at (100,100)");
    PdfFont FontHELVETICA = PdfFontFactory.CreateFont(StandardFonts.HELVETICA);
    paragraph.SetFontSize(20f);
    var pageHeight = PageSize.A4.GetHeight();
    PdfCanvas pdfCanvas = new PdfCanvas(page);
    var rectHeight = 200f;
    var rectWidth = 200f;
    pdfCanvas.SetLineWidth(0.5f);
    pdfCanvas.Rectangle(100, pageHeight - 100 - rectHeight, 200, 200);//It is easy to place the rectangle in the position of (100,100)pt
    pdfCanvas.Stroke();

    Canvas canvas = new Canvas(pdfCanvas, PageSize.A4);
    var paragraphHeight = 0f;//How to get it??
    paragraph.SetFixedPosition(100, pageHeight - 100f - paragraphHeight, 200);//It is difficult to place paragraphs in the position of (100,100)pt
    canvas.Add(paragraph);
}

无论我测试多少,我都无法获得正确的结果。我该怎么办?100x100.pdf enter image description here

C# net-6.0 itext7

评论

0赞 mkl 11/16/2023
您的代码结果在哪些方面不符合预期?
0赞 Pac0 11/17/2023
如果你希望它为(100,100),为什么它写在代码(100,pageHeight - 100)中?
0赞 zhusp 11/17/2023
原点位于左上角corner.@Pac0
0赞 zhusp 11/17/2023
[100x100.pdf]docdro.id/UwUy0gO

答:

1赞 mkl 11/17/2023 #1

您已经使用了 .将区域设置为左上角位于 (100, 100) 并让 iText 完成布局工作怎么样:CanvasCanvas

Canvas canvas = new Canvas(pdfCanvas, PageSize.A4.ApplyMargins(100, 0, 0, 100, false));
canvas.Add(paragraph);

在添加之前,您可能需要将段落边距和填充设置为 0:

paragraph.SetMarginTop(0);
paragraph.SetPaddingTop(0);

PositionParagraph 测试PositionParagraphAt100_100

(我没有 Adobe Illustrator,所以我无法检查这是否符合 Illustrator 对文本左上角的想法。

0赞 zhusp 11/20/2023 #2

不幸的是,该段落没有放在 (100100),但边框是enter image description here

评论

0赞 K J 11/20/2023
离答案有多近 docdro.id/LFcKl5P
0赞 K J 11/20/2023 #3

您可以在对象中看到为什么这可能是解释中的问题。

给定的 20 点字体所需的 M 是
paragraph.SetFixedPosition(98.6, pageHeight -114.6f, 200);

enter image description here

您可以看到文本的位置与 PDF 应用单位的位置完全相同,因此页面顶部为 842,文本需要为 742(低 8.85 个单位)100 750.85

让我们在那里试试,是的,我们现在可以看到它更好了。

因此,需要 2 次更正:字母需要向下移动它们的 msize,并且 M 大小需要是一种字体,其中 M 是 em 宽。

enter image description here

那么,什么可以得到答案呢?嗯,它大约是(-114.6)。98.6 727.4

enter image description here