gpt4 book ai didi

java - 使用 PDFBox 的表格/报告格式

转载 作者:行者123 更新时间:2023-11-29 07:50:04 25 4
gpt4 key购买 nike

我在使用 PDF Box 时遇到格式问题。我的目标是以表格样式格式打印 PDF 作为报告。内容格式将类似于

Name Code Description Value

我检索了我的数据库结果集并有一个 Java 对象列表。我提取所需的信息并将它们格式化为字符串列表,如下所示。我循环遍历对象,构造一个字符串并添加到 arrayList。我的想法是创建一个长度/样式完全相同的字符串列表,以在 pdf 中强制格式化。

Code Reference

for(MyObject obj: dbresults){
//format as below and add to list
}
StringBuilder sb = new StringBuilder();
Formatter formatter = new Formatter(sb);
formatter.format("%-25.25s", "This is some text with more than 25 characters.");

formatter.format("%-25.25s", "Some text with less.");

formatter.format("%-25.25s", "Some other text.");

System.out.println(formatter.toString());

输出:

|This is some text with mo|Some text with less.     |Some other text.         |

我在屏幕上多次打印出这个列表 :) 并且通过 System.out 或记录器,格式完全符合我的预期,甚至是 block 。

但是,当我发送到 PDFBox 打印文件时,格式会“损坏”并且“表格格式”不可用。我将 100 和 700 作为 x,y 坐标传递。

Code Reference

    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 时,格式不可用

Tom Thumb         555-ddd   Good     23
Tom Thumb 666-ggg Good 45
CHARLES DICKENS 777-jjj Good 32
CHARLES DICKENS 666-hhh Bad 11
W Yeats 888-hhh Ok 12
R Whitely 444-999 Terrible 44

PDF 输出看起来像

Tom Thumb         555-ddd   Good     23
Tom Thumb 666-ggg Good 45
CHARLES DICKENS 777-jjj Good 32
CHARLES DICKENS 666-hhh Bad 11
W Yeats 888-hhh Ok 12
R Whitely 444-999 Terrible 44

非常感谢任何帮助!

最佳答案

您是否在 PDF 中使用等宽字体(如 Courier)?它将解释您在控制台中获得了良好的输出而在 PDF 中获得了错误的输出

问候

关于java - 使用 PDFBox 的表格/报告格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21826945/

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