gpt4 book ai didi

java - 如何使用 PDFBox drawString 插入换行符

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:02:10 25 4
gpt4 key购买 nike

我必须制作一个带有表格的 PDF。到目前为止它工作正常,但现在我想添加一个包装功能。所以我需要插入一个换行符。

contentStream.beginText();  
contentStream.moveTextPositionByAmount(x, y);
contentStream.drawString("Some text to insert into a table.");
contentStream.endText();

我想在“插入”之前添加一个“\n”。我尝试了“\u000A”,这是换行符的十六进制值,但 Eclipse 显示错误。

是否可以使用 drawString 添加换行?

最佳答案

PDF 格式允许换行,但 PDFBox 没有内置换行功能。

要在 PDF 中使用换行符,您必须定义要与 TL 运算符一起使用的行距。 T* 运算符换行。 ' 运算符将给定的文本写入下一行。 (有关更多详细信息,请参阅 PDF 规范,“文本”一章。没那么多。)

这里有两个代码片段。两者的作用相同,但第一个片段使用 ',第二个片段使用 T*

private void printMultipleLines(
PDPageContentStream contentStream,
List<String> lines,
float x,
float y) throws IOException {
if (lines.size() == 0) {
return;
}
final int numberOfLines = lines.size();
final float fontHeight = getFontHeight();

contentStream.beginText();
contentStream.appendRawCommands(fontHeight + " TL\n");
contentStream.moveTextPositionByAmount(x, y);
contentStream.drawString(lines.get(0));
for (int i = 1; i < numberOfLines; i++) {
contentStream.appendRawCommands(escapeString(lines.get(i)));
contentStream.appendRawCommands(" \'\n");
}
contentStream.endText();
}

private String escapeString(String text) throws IOException {
try {
COSString string = new COSString(text);
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
string.writePDF(buffer);
return new String(buffer.toByteArray(), "ISO-8859-1");
} catch (UnsupportedEncodingException e) {
// every JVM must know ISO-8859-1
throw new RuntimeException(e);
}
}

使用T* 换行:

private void printMultipleLines(
PDPageContentStream contentStream,
List<String> lines,
float x,
float y) throws IOException {
if (lines.size() == 0) {
return;
}
final int numberOfLines = lines.size();
final float fontHeight = getFontHeight();

contentStream.beginText();
contentStream.appendRawCommands(fontHeight + " TL\n");
contentStream.moveTextPositionByAmount( x, y);
for (int i = 0; i < numberOfLines; i++) {
contentStream.drawString(lines.get(i));
if (i < numberOfLines - 1) {
contentStream.appendRawCommands("T*\n");
}
}
contentStream.endText();
}

要获取字体的高度,您可以使用此命令:

fontHeight = font.getFontDescriptor().getFontBoundingBox().getHeight() / 1000 * fontSize;

您可能想将它乘以一些线距因子。

关于java - 如何使用 PDFBox drawString 插入换行符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7598099/

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