当我使用pdfCanvas对象时,我有一个MoveText方法,可以设置x和y坐标,但是在段落对象中看不到吗?第二件事是,为什么我需要矩形对象,我不添加任何矩形到pdf只是文本。在这里,我希望文本取整页宽度。如果我在centeredWidth中只有MoveText方法,那么我可以得到字体和文本的大小,然后计算MoveText和pdfCanvas吗?
for (int i = 1; i <= numberOfPages; i++)
{
PdfPage pdfPage = pdfDocument.GetPage(i);
iText.Kernel.Geom.Rectangle pageSizeWithRotation = pdfPage.GetPageSizeWithRotation();
float n2 = 15F;
float n3 = pageSizeWithRotation.GetHeight() - 10F;
float frontSize = 6.25f;
PdfCanvas pdfCanvas = new PdfCanvas(pdfPage);
iText.Kernel.Geom.Rectangle rectangle = new iText.Kernel.Geom.Rectangle(100, 100, 100, 100);
Canvas canvas = new Canvas(pdfCanvas, rectangle);
PdfFont font = PdfFontFactory.CreateFont("C:\\Windows\\Fonts\\ARIALN.TTF");
Paragraph p = new Paragraph()
.Add(disclaimerText)
.SetFont(font)
.SetFontSize(frontSize)
.SetTextAlignment(TextAlignment.CENTER);
canvas.Add(p);
canvas.Close();
//pdfCanvas.BeginText()
// .SetFillColorRgb(0, 0, 0)
// .SetFontAndSize(PdfFontFactory.CreateFont("C:\\Windows\\Fonts\\ARIALN.TTF"), frontSize)
// .MoveText(n2, n3)
// .ShowText(disclaimerText)
// .EndText();
}发布于 2022-03-16 19:57:41
首先,请注意,您使用的是iText API的不同部分,其中一边是PdfCanvas,另一边是Canvas:
PdfCanvas仅仅是写入PDF的指令的薄包装。在使用这个类时,您必须确定要从哪里开始文本行、在哪里拆分行、在字符、单词和行之间添加多少空间等等。
另一方面,Canvas (和Document)具有它自己的布局引擎,您只需要使用PdfCanvas来初始化它,以及您希望它操作的坐标范围,然后输入Canvas正确安排的段落、表等。
因此,您基本上可以选择,您最重要的是自己安排所有事情,还是最重要的是将该任务留给iText处理。
话虽如此,让我们看看你的问题:
--当我使用pdfCanvas对象时,我有一个
MoveText方法,可以设置x和y坐标,但是在段落对象中看不到吗?
Paragraph主要是由Canvas和Document为自动布局设计的。但是,您可以使用SetFixedPosition重载在给定的坐标下静态地排列它们。
第二件事是,为什么我需要矩形对象,我不添加任何矩形到pdf只是文本。
您需要矩形来告诉Canvas,在(理论上没完没了的) PdfCanvas坐标平面上,它应该安排给它的对象。
,在这里,我希望文本获得整个页面的宽度。
然后使用该页面的完整裁剪框,假设您指的是屏幕上页面的全部可见宽度或最终打印的产品。您可以使用PdfPage方法GetCropBox获得它。
如果您不确定有哪一个“页面的完整宽度”,请查看this answer。
,我可以得到字体和文本的大小,然后计算centeredWidth和centeredHeight,如果我在pdfCanvas中只有MoveText方法?
如果没有字体大小,就设置它(如代码中显示的那样使用SetFontAndSize )。您还可以设置字体。您设置的PdfFont对象具有很好的GetWidth重载功能,以确定使用该字体绘制的某些文本的宽度。结合上面提到的“裁剪”框和琐碎的数学,您可以计算出简单文本绘图所需的一切。
https://stackoverflow.com/questions/71499865
复制相似问题