晕,
我一直在寻找一种使用java在文本文件中生成格式良好的报告的方法。
例如,我可能需要以下列格式打印报告
A Monthly Report A Report Name Page No: 1 A Date: YYYY-MM-DD A A Category Quantity Price A ----------------- ----------------- -------------------- B Pen 100 $100 B Paper 200 $400 A A ================= ==================== B Total $500 A ================= ====================
我曾尝试编写自己的程序,但我觉得它很乱!所以我想知道我是否可以使用任何现有的库,或者有一个很好的方法来实现它?
顺便说一下,我环顾四周,找到了一个类似于我想要的库 https://github.com/iNamik/Java-Text-Table-Formatter
只是想知道是否还有其他选择。谢谢你的帮助!!
=============================================== =====================
所以我制作了一个示例代码,我可能会用它来清理我的代码
StringBuilder sb = new StringBuilder();
sb.append(String.format("%s %50s%n", "A", "Monthly Report"));
sb.append(String.format("%s %48s%n", "A", "Report Name"));
sb.append(String.format("%s %n", "A"));
sb.append(String.format("%s %-20s %-20s %-20s%n", "A", "Category", "Quantity", "Price"));
sb.append(String.format("%s %-20s %-20s %-20s%n", "A", "--------------", "--------------", "--------------"));
sb.append(String.format("%s %-20s %-20s %-20s%n", "B", "Paper", 100, "$200"));
System.out.println(sb.toString());
StringBuilder sb = new StringBuilder();
sb.append(String.format("%s %50s%n", "A", "Monthly Report"));
sb.append(String.format("%s %48s%n", "A", "Report Name"));
sb.append(String.format("%s %n", "A"));
sb.append(String.format("%s %-20s %-20s %-20s%n", "A", "Category", "Quantity", "Price"));
sb.append(String.format("%s %-20s %-20s %-20s%n", "A", "--------------", "--------------", "--------------"));
sb.append(String.format("%s %-20s %-20s %-20s%n", "B", "Paper", 100, "$200"));
System.out.println(sb.toString());
输出:
A Monthly Report A Report Name A A Category Quantity Price A -------------- -------------- -------------- B Paper 100 $200
我在想如何在中心处设置“报告名称”,在右侧设置“页面编号:”而不对格式化程序的int参数进行硬编码(即%50s,没有50,是否可能)
答案 0 :(得分:4)
作为替代方案,这里是基于JDK的解决方案
public static void main(String[] args) throws Exception {
printRow("A", "Category", "Quantity", "Price");
printRow("A", "--------------", "--------------", "--------------");
printRow("B", "Paper", 100, 200);
}
private static void printRow(String c0, String c1, Object c2, Object c3 ) {
System.out.printf("%s %-20s %-20s %-20s%n", c0, c1, String.valueOf(c2), c3 instanceof Integer ? "$" + c3 : c3);
}
输出
A Category Quantity Price
A -------------- -------------- --------------
B Paper 100 $200
答案 1 :(得分:2)
Apache Velocity是用于文本格式化或模板化的好工具。它适用于纯文本,HTML,JSP,XML,SQL脚本等。这是一个很好的helloWorld tutorial。
基本步骤是:
像Latex这样的其他人更复杂但更强大。如果您只需报告格式,请查看JasperReports。
答案 2 :(得分:0)
尝试使用iText java库我已经用它来为我的应用程序生成账单。