提问人:zhusp 提问时间:11/16/2023 最后编辑:zhusp 更新时间:11/23/2023 访问量:76
c# iText7 如何设置段落左上角的位置
c# iText7 how to set the position of the top left corner of a paragraph
问:
我不想在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
答:
1赞
mkl
11/17/2023
#1
您已经使用了 .将区域设置为左上角位于 (100, 100) 并让 iText 完成布局工作怎么样:Canvas
Canvas
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
评论
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);
您可以看到文本的位置与 PDF 应用单位的位置完全相同,因此页面顶部为 842,文本需要为 742(低 8.85 个单位)100 750.85
让我们在那里试试,是的,我们现在可以看到它更好了。
因此,需要 2 次更正:字母需要向下移动它们的 msize,并且 M 大小需要是一种字体,其中 M 是 em 宽。
那么,什么可以得到答案呢?嗯,它大约是(-114.6)。98.6 727.4
评论