当前位置: 首页 > 知识库问答 >
问题:

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

颜博达
2023-03-14

我使用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();

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

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

共有1个答案

鲁涵映
2023-03-14

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

然而,也许你的眼睛在愚弄你。可能您只看到一个表,因为标记为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个用户单位的空间。

至于你的另一个疑惑:我也有一个疑惑。我怀疑你已经查阅了免费电子书《StackOverflow上的最佳iText问题》。在这本书中,你会发现一章名为“表格”,另一章名为“表格事件”。在这些章节中,您将找到以下问题的答案:

  • C#在一个单元格中使用多种字体

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

 类似资料:
  • 将html文件转换为pdf文件。我有html文件,css文件和js文件在一个文件夹,我如何转换index.html创建pdf使用Java的itext。有谁能帮我解决这个问题。有没有样本项目?

  • 我想用iText将带有图像的html文件转换成pdf格式。我在这里提供我的消息来源。 请帮助我如何使用iText将带有图像的html文件转换为pdf格式。如果没有图像或者硬编码图像路径,我可以转换html文件。提前致谢

  • 我正在尝试将HTML转换为PDF。首先,我从下面的链接将我的HTML代码转换为XHTML。http://www.cruto.com/resources/code-generators/code-converters/html-to-xhtml.asp 然后,为了测试它,我用生成的XHTML代码创建了一个HTML文件,并成功地显示在浏览器上。之后,我尝试用下面的java代码将HTML文件转换为PDF

  • 我想使用itext 2.1.7将一个html页面转换为pdf。我已经使用HTMLWorker来转换html文件,但它没有采用我在html中使用的内联css。下面是我的代码片段。谁能帮助解决这个问题… 提前道谢!

  • 问题内容: 我们正在构建一个与其他系统部分交互的应用程序。我们正在从另一个系统中提取一些数据,这些数据作为RTF文档返回。但是我们必须防止用户编辑此文件,因此我们考虑将其与iText转换为PDF。程式码片段: 创建了Pdf,但是字体大小错误,样式错误并且编码错误。也许您有类似的问题,并且您已经解决了一些问题?也许有更好的解决方案? 问题答案: 根据这篇文章, itext正在放弃RTF 。我使用的一

  • 我已经搜索了这些问题,但没有找到解决我的具体问题的方法。我需要做的是将包含图像和CSS样式的HTML文件转换为PDF。我正在使用iText5,并且已经能够将样式包含到生成的PDF中。但是,包括图像在内,我还在挣扎。我在下面包含了我的代码。具有绝对路径的图像包含在生成的PDF中,具有相对路径的图像不包含在生成的PDF中。我知道我需要实现AbstractImageProvider,但我不知道如何实现。