java - 使用 iText 在 Java 中将多个表转为 PDF 报告

标签 java itext

我正在使用 iText 从表格数据生成 PDF 文件。实际上,我可以使用单个表格生成 PDF 文件。但我不知道如何在同一个 PDF 文件中生成第二个表格。当我尝试这样做时,第二个表将作为第一个表的一部分出现。

String date = DateUtils.getTimestamp().toString();
date = date.replace(" ", "_");
date = date.replace(":", "_");
date = "d:/CompareDeal_" + date + ".pdf" ;

Document my_pdf_report = new Document();
PdfWriter.getInstance(my_pdf_report, new FileOutputStream(date));
my_pdf_report.open();  

PdfPTable my_report_table = new PdfPTable(5); // CREATING TABLE rt
PdfPCell table_cell;
String blank_column = "";
table_cell=new PdfPCell(new Phrase(blank_column));
my_report_table.addCell(table_cell); // rt row 1 column 1

String deal1_plan="Deal1:Plan";
table_cell=new PdfPCell(new Phrase(deal1_plan));
my_report_table.addCell(table_cell); // rt row 1 column 2

String deal1_actual="Deal1:Actual";
table_cell=new PdfPCell(new Phrase(deal1_actual));
my_report_table.addCell(table_cell); // rt row 1 column 3

String deal2_plan="Deal2:Plan";
table_cell=new PdfPCell(new Phrase(deal2_plan));
my_report_table.addCell(table_cell); // rt row 1 column 4

String deal2_actual="Deal2:Actual";
table_cell=new PdfPCell(new Phrase(deal2_actual));
my_report_table.addCell(table_cell);  // rt row 1 column 5

table_cell=new PdfPCell(new Phrase("Revenue(M$)"));
my_report_table.addCell(table_cell); // rt row 2 column 1

String planRevenue1 = StringUtils.convertToString(StringUtils.formatForNull(model.getPlanRevenue1(), "-", ""));
table_cell=new PdfPCell(new Phrase(planRevenue1));
my_report_table.addCell(table_cell); // rt row 2 column 2

String actualRevenue1 = StringUtils.convertToString(StringUtils.formatForNull(model.getActualRevenue1(), "-", ""));
table_cell=new PdfPCell(new Phrase(actualRevenue1));
my_report_table.addCell(table_cell); // rt row 2 column 3

String planRevenue2 = StringUtils.convertToString(StringUtils.formatForNull(model.getPlanRevenue2(), "-", ""));
table_cell=new PdfPCell(new Phrase(planRevenue2));
my_report_table.addCell(table_cell); // rt row 2 column 4

String actualRevenue2 = StringUtils.convertToString(StringUtils.formatForNull(model.getActualRevenue2(), "-", ""));
table_cell=new PdfPCell(new Phrase(actualRevenue2));
my_report_table.addCell(table_cell); // rt row 2 column 5

table_cell=new PdfPCell(new Phrase("PPM"));
my_report_table.addCell(table_cell); // rt row 3 column 1

String planPpm1 = StringUtils.convertToString(StringUtils.convertToUSFormat(model.getPlanPpm1(),StringUtils.DEFAULT_EMPTY_STRING),StringUtils.DEFAULT_EMPTY_STRING);
table_cell=new PdfPCell(new Phrase(planPpm1));
my_report_table.addCell(table_cell); // rt row 3 column 2

String actualPpm1 = StringUtils.convertToString(StringUtils.convertToUSFormat(model.getActualPpm1(),StringUtils.DEFAULT_EMPTY_STRING),StringUtils.DEFAULT_EMPTY_STRING);
table_cell=new PdfPCell(new Phrase(actualPpm1));
my_report_table.addCell(table_cell); // rt row 3 column 3

String planPpm2 = StringUtils.convertToString(StringUtils.convertToUSFormat(model.getPlanPpm2(),StringUtils.DEFAULT_EMPTY_STRING),StringUtils.DEFAULT_EMPTY_STRING);
table_cell=new PdfPCell(new Phrase(planPpm2));
my_report_table.addCell(table_cell); // rt row 3 column 4

String actualPpm2 = StringUtils.convertToString(StringUtils.convertToUSFormat(model.getActualPpm2(),StringUtils.DEFAULT_EMPTY_STRING),StringUtils.DEFAULT_EMPTY_STRING);
table_cell=new PdfPCell(new Phrase(actualPpm2));
my_report_table.addCell(table_cell);// rt row 3 column 5

table_cell=new PdfPCell(new Phrase("Rev per FTE($)"));
my_report_table.addCell(table_cell); // rt row 4 column 1
String planFte1 = StringUtils.convertToString(StringUtils.formatForNull(model.getPlanFte1(), "-", ""));
table_cell=new PdfPCell(new Phrase(planFte1));
my_report_table.addCell(table_cell); // rt row 4 column 2

String actualFte1 = StringUtils.convertToString(StringUtils.formatForNull(model.getActualFte1(), "-", ""));
table_cell=new PdfPCell(new Phrase(actualFte1));
my_report_table.addCell(table_cell); // rt row 4 column 3

String planFte2 = StringUtils.convertToString(StringUtils.formatForNull(model.getPlanFte2(), "-", ""));
table_cell=new PdfPCell(new Phrase(planFte2));
my_report_table.addCell(table_cell); // rt row 4 column 4

String actualFte2 = StringUtils.convertToString(StringUtils.formatForNull(model.getActualFte2(), "-", ""));
table_cell=new PdfPCell(new Phrase(actualFte2));
my_report_table.addCell(table_cell); // rt row 4 column 5

my_pdf_report.add(my_report_table); // ADDING TABLE rt
PdfPTable my_report_table1 = new PdfPTable(5); // CREATING TABLE t1
PdfPCell table_cell1;
String blank_column1 = "";
table_cell1=new PdfPCell(new Phrase(blank_column1));
my_report_table1.addCell(table_cell1); // t2 row 1 column 1

String deal1_plan1="Deal1:Plan";
table_cell1=new PdfPCell(new Phrase(deal1_plan1));
my_report_table1.addCell(table_cell1); // t2 row 1 column 2

String deal1_actual1="Deal1:Actual";
table_cell1=new PdfPCell(new Phrase(deal1_actual1));
my_report_table1.addCell(table_cell1); // t2 row 1 column 3

String deal2_plan1="Deal2:Plan";
table_cell1=new PdfPCell(new Phrase(deal2_plan1));
my_report_table1.addCell(table_cell1); // t2 row 1 column 4

String deal2_actual1="Deal2:Actual";
table_cell1=new PdfPCell(new Phrase(deal2_actual1));
my_report_table1.addCell(table_cell1); // t2 row 1 column 5

my_pdf_report.add(my_report_table1); // ADDING TABLE r1
my_pdf_report.close();

到目前为止,这就是我所做的。

我们是否可以向生成的表格添加样式,例如字体大小和字体颜色?

最佳答案

一开始我没明白你的问题。我用一些注释更新了您的代码,以便我可以更好地了解您创建、填充和添加表的位置。我可以清楚地看到您添加了两个不同的表,但我不明白为什么您会声称第二个表是第一个表的一部分。您正在添加两个不同的表

但是,也许你的眼睛欺骗了你。也许您只看到一张表,因为我标记为 rt 的表和我标记为 t1 的表之间没有多余的空格。这可以很容易地解决,如下所示:

PdfPTable my_report_table = new PdfPTable(5);
my_report_table.setSpacingAfter(10);

这将在我用 rt 标记的表格后面添加一些额外的空间,更具体地说,rtt1 之间的距离将为 10用户单位(默认情况下约为 10 pt)。

另一个选项是在第二个表格之前添加一些额外的间距:

PdfPTable my_report_table1 = new PdfPTable(5);
my_report_table1.setSpacingBefore(10);

这会在第二个表之前添加 10 个用户单位的空间。

至于你的另一个疑问:我也有一个疑问。我怀疑您是否查阅过免费电子书 The Best iText Questions on StackOverflow 。在本书中,您将找到标题为“表”的一章和标题为“表事件”的另一章。在这些章节中,您将找到以下问题的答案:

你的第二个问题对于 StackOverflow 来说太宽泛了。请查阅文档,如果您在那里找不到答案,请发布更具体的问题。

关于java - 使用 iText 在 Java 中将多个表转为 PDF 报告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30525621/

相关文章:

java - 检索 pdf 中图像的页码 - IText

java - 使用 java.util.list 获取 Hibernate 映射异常

Java GUI 外观变化

java - 如何阻止方法run()?

java - 如何解决使用eclipse进行android编程时只读文件系统错误

javascript - 打印在 iTextSharp 中创建的 PDF,然后将控制权返回给浏览器

Java:通过将应用程序升级为 Web 服务来测量应用程序的性能

java - Neo4j-OGM 关系未加载

java - 从 java servlet 将 'success' 响应发送回 Acrobat Reader

itext - 使用 iText 将复选框添加到 PDF 文档