如何使用java导出pdf中的列表

时间:2011-01-02 09:49:12

标签: java jsf arraylist

对于Web应用程序我需要实现一个允许以pdf格式导出列表的函数吗?

我该怎么办?  有一个允许它的课程?

或者如果您有任何建议吗?

提前谢谢

5 个答案:

答案 0 :(得分:3)

有一个名为iText的免费库,您可以使用它来生成PDF(将其动态写入HTTP响应,或作为批处理)。对于简单的事情,它很容易使用,虽然在线文档几乎不存在 - 相反,您通过购买书籍iText in Action来支持该项目(其中一个选项是购买包含PDF电子书的纸质副本,所以你不是在等待帖子。)

答案 1 :(得分:1)

您可以使用iText(其最新版本在GNU Affero GPLv3许可下)。请查看this教程,了解您的需求。

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