Java以文本文件格式生成格式化报告

时间:2012-12-11 03:38:19

标签: java text format report

晕,

我一直在寻找一种使用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,是否可能)

3 个答案:

答案 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

基本步骤是:

  1. 撰写文字模板。
  2. 初始化Velocity Engine。
  3. 插入您需要的上下文。
  4. 并渲染它。
  5. Latex这样的其他人更复杂但更强大。如果您只需报告格式,请查看JasperReports

答案 2 :(得分:0)

尝试使用iText java库我已经用它来为我的应用程序生成账单。