对于Web应用程序我需要实现一个允许以pdf格式导出列表的函数吗?
我该怎么办? 有一个允许它的课程?
或者如果您有任何建议吗?
提前谢谢
答案 0 :(得分:3)
有一个名为iText的免费库,您可以使用它来生成PDF(将其动态写入HTTP响应,或作为批处理)。对于简单的事情,它很容易使用,虽然在线文档几乎不存在 - 相反,您通过购买书籍iText in Action来支持该项目(其中一个选项是购买包含PDF电子书的纸质副本,所以你不是在等待帖子。)
答案 1 :(得分:1)
答案 2 :(得分:1)
Java的一个简单解决方案是PDFBox,它具有创建PDF的功能(以及其他功能)。由于听起来您的用例非常简单(将列表输出到PDF),因此您可能需要在PDFBox中使用预先编写的实用程序TextToPDF。
答案 3 :(得分:1)
我认为免费应用程序报告的最佳解决方案是JasperReports。
您与PDF无关,只需定义数据(POJOS列表,如果需要),字段,布局和创建输出。 PDF是受支持的格式之一(基于iText)。
答案 4 :(得分:0)
我使用其他答案中提到的Apache Pdf Box,但是我试图显示具体的代码示例,因为没有答案表明&新手可能会因为在线esp上的文档而苦苦挣扎。围绕坐标系和行的创建。
下面是我拥有的实用程序方法。 valuesToExport
是我希望一一写入pdf的行,而filePath
是要向其中写入数据的pdf文件。
我从多种导出中调用此方法(即当我具有不同类型的POJO的列表时)。我首先将要写入pdf的每个pojo字段转换为String[]
并放入列表中。 String[]
的每个元素代表一列。
您可以根据需要更改多个常量,尤其是。每pdf页面行数。我在示例代码中每页使用了10行。
import java.util.List;
import java.nio.file.Path;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.PDPageContentStream;
import org.apache.pdfbox.pdmodel.font.PDFont;
import org.apache.pdfbox.pdmodel.font.PDType1Font;
public static void writeToPdf(List<String[]> valuesToExport, Path filePath) {
try (PDDocument doc = new PDDocument()) {
PDFont font = PDType1Font.HELVETICA;
PDPage page = new PDPage();
doc.addPage(page);
PDPageContentStream content = new PDPageContentStream(doc, page);
content.setFont(font, 12);
int lines = 1;
float pageHeight = page.getMediaBox().getHeight();
for (String[] row : valuesToExport) {
int startX = 0;
for (String column : row) {
content.beginText();
content.newLineAtOffset(startX, pageHeight - 50 * lines);
startX += startX + 100;
content.showText(column);
content.endText();
}
++lines;
if (lines > 10) {
page = new PDPage();
doc.addPage(page);
content.close();
content = new PDPageContentStream(doc, page);
content.setFont(font, 12);
}
}
content.close();
doc.save(filePath.toFile());
} catch (IOException ex) {
//either log exception or rethrow it
}
}