6

光环,

我一直在寻找一种使用 java 在文本文件中生成格式良好的报告的方法。

例如,我可能需要打印以下格式的报告

月度报告
A 报告名称 页码:1
A 日期:YYYY-MM-DD              
一种
A 类别 数量 价格
一种  -  -  -  -  -  -  -  - -  -  -  -  -  -  -  -  - -  -  -  -  -  -  -  - - -----
B 笔 100 $100
B 纸 200 $400
一种
一个=====================================
B 总计 500 美元
一个=====================================

我曾尝试编写自己的程序,但我只是觉得它一团糟!!!所以我想知道是否有任何现有的库可以使用,或者有没有好的方法来实现它?

顺便说一句,我环顾四周,发现了一个类似于我想要的库 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());

输出:

月度报告
报告名称
一种
A 类别 数量 价格               
一种  -  -  -  -  -  -  -   -  -  -  -  -  -  -   -  -  -  -  -  -  -      
B 纸 100 $200                


我在想如何在不硬编码格式化程序的 int 参数的情况下在中心制作“报告名称”和在右侧制作“页码:”(即 %50s,没有 50,是否可能)

4

3 回答 3

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                
于 2012-12-11T05:49:41.327 回答
2

Apache Velocity是一个很好的文本格式化或模板工具。它适用于纯文本、HTML、JSP、XML、SQL 脚本等。这是一个很好的 helloWorld教程

基本步骤是:

  1. 编写您的文本模板。
  2. 初始化速度引擎。
  3. 插入您需要的上下文。
  4. 并渲染它。

Latex这样的其他产品更复杂,但功能更强大。如果您只需要报告格式,请查看JasperReports 。

于 2012-12-11T07:15:39.627 回答
0

试试 iText java 库,我用它来为我的应用程序生成账单。

于 2012-12-11T03:45:33.113 回答