gpt4 book ai didi

java - iTextPDF 7 在绝对位置添加文本

转载 作者:行者123 更新时间:2023-12-02 03:04:37 25 4
gpt4 key购买 nike

我有一个旧的 Perl 脚本,它生成一个 .pdf 文件,可以打印在穿孔卡片上(如 Avery 模板 28878)。我正在将此脚本转换为 Java,并选择使用 iTextPDF 7。到目前为止,我可以毫无问题地生成 10 张“卡片”(使用绝对位置)。

我试图在绝对位置向每个“卡片”添加文本,并根据字体大小的宽度设置该文本的字体大小。

至于字体大小部分,我在旧的 Perl 脚本中执行以下操作,它与 PDF::API2 配合得很好

# Font size 16 width = 184.832
$nameText->font($fonts->{'times'}, $nameFontSize);
while(int($nameText->advancewidth($name)) > 185){
$nameFontSize--;
$nameText->font($fonts->{'times'}, $nameFontSize);
}

为了实际设置绝对位置,我在 Perl 中执行以下操作

my $nameText = $pdfPage->text();
$nameText->translate(($xCoord + 151), ($yCoord + 73));
$nameText->text_center($name);

我一直无法弄清楚如何使用 iTextPDF 7 将其转换为 Java。

那么,我该如何使用 iTextPDF 7将文本设置为绝对位置?

获取该文本对象的当前宽度?

最佳答案

我给你的代码既是非常高级的,也是低级的。它是高级别的,因为它允许设置非常高级的属性,如单词/字符间距、对齐方式、使用复杂的脚本等,而无需修改字体大小计算的方法。另一方面,它是低级别的,因为您将执行大量手动布局工作,这些工作通常在幕后完成。

请注意,这只是您想要实现的目标的一种方法。我至少还能想到另外两个。您可以去寻找iText7示例来寻找灵感。

PdfDocument pdfDocument = new PdfDocument(new PdfWriter("..."));
pdfDocument.addNewPage();
int pageNumber = 1;
PdfPage page = pdfDocument.getPage(pageNumber);

String text = "Hello World! This is an answer to a SO question";
Paragraph paragraph = new Paragraph(text).
setMargin(0).
setMultipliedLeading(1).
setFont(PdfFontFactory.createFont(FontConstants.TIMES_ROMAN));

float fontSize = 50;
paragraph.setFontSize(fontSize);
paragraph.setBackgroundColor(Color.RED); // Just to see that text is aligned correctly
float allowedWidth = 185;

Canvas canvas = new Canvas(new PdfCanvas(page), pdfDocument, page.getMediaBox());
RootRenderer canvasRenderer = canvas.getRenderer();
while (paragraph.createRendererSubTree().setParent(canvasRenderer).layout(new LayoutContext(new LayoutArea(pageNumber, new Rectangle(allowedWidth, fontSize * 2)))).getStatus() != LayoutResult.FULL) {
paragraph.setFontSize(--fontSize);
}
float xCoord = 151;
float yCoord = 73;

paragraph.setWidth(allowedWidth);
canvas.showTextAligned(paragraph, xCoord, yCoord, TextAlignment.CENTER);
canvas.close();
pdfDocument.close();

输出如下:enter image description here请注意,我们添加了红色背景以确保文本居中。

关于java - iTextPDF 7 在绝对位置添加文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41913211/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com