JAVA如何生成pdf文件

发布时间:2022-11-14 09:52:14 作者:iii
来源:亿速云 阅读:191

JAVA如何生成PDF文件

在现代软件开发中,生成PDF文件是一个常见的需求。无论是生成报告、发票、合同,还是其他类型的文档,PDF格式因其跨平台兼容性和良好的排版效果而广受欢迎。Java作为一种广泛使用的编程语言,提供了多种生成PDF文件的解决方案。本文将详细介绍如何使用Java生成PDF文件,涵盖多种流行的库和工具,并提供详细的代码示例。

目录

  1. 引言
  2. 常见的Java生成PDF的库
  3. 使用iText生成PDF
  4. 使用Apache PDFBox生成PDF
  5. 使用Flying Saucer生成PDF
  6. 使用JasperReports生成PDF
  7. 总结

引言

PDF(Portable Document Format)是一种由Adobe Systems开发的文件格式,用于以独立于应用程序软件、硬件和操作系统的方式呈现文档。PDF文件可以包含文本、图像、表格、链接等多种元素,并且可以在不同的设备和操作系统上保持一致的显示效果。

在Java中生成PDF文件有多种方式,每种方式都有其优缺点。本文将介绍几种常见的Java库,包括iText、Apache PDFBox、Flying Saucer和JasperReports,并通过代码示例展示如何使用这些库生成PDF文件。

常见的Java生成PDF的库

iText

iText是一个功能强大的Java库,用于创建和操作PDF文档。它支持从简单的文本到复杂的表格、图像、表单等多种元素的生成。iText还提供了对PDF/A、PDF/X等标准的支持。

Apache PDFBox

Apache PDFBox是一个开源的Java库,用于创建、操作和提取PDF文档内容。PDFBox提供了丰富的API,可以用于生成PDF文件、提取文本、合并PDF文件等操作。

Flying Saucer

Flying Saucer是一个基于XHTML和CSS的Java库,用于将HTML文档转换为PDF文件。它特别适合那些已经熟悉HTML和CSS的开发者,可以通过简单的HTML和CSS代码生成复杂的PDF文档。

JasperReports

JasperReports是一个强大的Java报表引擎,可以生成多种格式的报表,包括PDF、Excel、HTML等。JasperReports支持从数据库、XML、Java对象等多种数据源生成报表,并且提供了丰富的报表设计工具。

使用iText生成PDF

iText简介

iText是一个广泛使用的Java库,用于创建和操作PDF文档。它支持从简单的文本到复杂的表格、图像、表单等多种元素的生成。iText还提供了对PDF/A、PDF/X等标准的支持。

iText的基本使用

要使用iText生成PDF文件,首先需要添加iText的依赖。如果你使用的是Maven项目,可以在pom.xml中添加以下依赖:

<dependency>
    <groupId>com.itextpdf</groupId>
    <artifactId>itextpdf</artifactId>
    <version>5.5.13.2</version>
</dependency>

接下来,我们可以编写一个简单的Java程序来生成一个包含“Hello, World!”文本的PDF文件:

import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.pdf.PdfWriter;

import java.io.FileOutputStream;
import java.io.IOException;

public class HelloWorldPDF {
    public static void main(String[] args) {
        Document document = new Document();
        try {
            PdfWriter.getInstance(document, new FileOutputStream("HelloWorld.pdf"));
            document.open();
            document.add(new Paragraph("Hello, World!"));
            document.close();
        } catch (DocumentException | IOException e) {
            e.printStackTrace();
        }
    }
}

在这个示例中,我们创建了一个Document对象,并使用PdfWriter将其写入到HelloWorld.pdf文件中。然后,我们向文档中添加了一个包含“Hello, World!”文本的段落,并关闭文档。

iText的高级功能

iText不仅支持简单的文本生成,还支持复杂的表格、图像、表单等元素的生成。以下是一个生成包含表格和图像的PDF文件的示例:

import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Image;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.pdf.PdfPTable;
import com.itextpdf.text.pdf.PdfWriter;

import java.io.FileOutputStream;
import java.io.IOException;

public class AdvancedPDF {
    public static void main(String[] args) {
        Document document = new Document();
        try {
            PdfWriter.getInstance(document, new FileOutputStream("AdvancedPDF.pdf"));
            document.open();

            // 添加段落
            document.add(new Paragraph("This is a sample PDF with a table and an image."));

            // 添加表格
            PdfPTable table = new PdfPTable(3);
            table.addCell("1");
            table.addCell("2");
            table.addCell("3");
            table.addCell("4");
            table.addCell("5");
            table.addCell("6");
            document.add(table);

            // 添加图像
            Image image = Image.getInstance("sample.jpg");
            document.add(image);

            document.close();
        } catch (DocumentException | IOException e) {
            e.printStackTrace();
        }
    }
}

在这个示例中,我们创建了一个包含3列的表格,并向其中添加了一些数据。然后,我们从本地文件系统中加载了一张图片,并将其添加到PDF文档中。

使用Apache PDFBox生成PDF

PDFBox简介

Apache PDFBox是一个开源的Java库,用于创建、操作和提取PDF文档内容。PDFBox提供了丰富的API,可以用于生成PDF文件、提取文本、合并PDF文件等操作。

PDFBox的基本使用

要使用PDFBox生成PDF文件,首先需要添加PDFBox的依赖。如果你使用的是Maven项目,可以在pom.xml中添加以下依赖:

<dependency>
    <groupId>org.apache.pdfbox</groupId>
    <artifactId>pdfbox</artifactId>
    <version>2.0.24</version>
</dependency>

接下来,我们可以编写一个简单的Java程序来生成一个包含“Hello, World!”文本的PDF文件:

import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.PDPageContentStream;
import org.apache.pdfbox.pdmodel.font.PDType1Font;

import java.io.IOException;

public class HelloWorldPDFBox {
    public static void main(String[] args) {
        try (PDDocument document = new PDDocument()) {
            PDPage page = new PDPage();
            document.addPage(page);

            PDPageContentStream contentStream = new PDPageContentStream(document, page);
            contentStream.beginText();
            contentStream.setFont(PDType1Font.HELVETICA_BOLD, 12);
            contentStream.newLineAtOffset(100, 700);
            contentStream.showText("Hello, World!");
            contentStream.endText();
            contentStream.close();

            document.save("HelloWorldPDFBox.pdf");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

在这个示例中,我们创建了一个PDDocument对象,并向其中添加了一个页面。然后,我们使用PDPageContentStream在页面上绘制了“Hello, World!”文本,并将文档保存为HelloWorldPDFBox.pdf

PDFBox的高级功能

PDFBox不仅支持简单的文本生成,还支持复杂的图形、图像、表单等元素的生成。以下是一个生成包含图像和表格的PDF文件的示例:

import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.PDPageContentStream;
import org.apache.pdfbox.pdmodel.font.PDType1Font;
import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject;

import java.io.IOException;

public class AdvancedPDFBox {
    public static void main(String[] args) {
        try (PDDocument document = new PDDocument()) {
            PDPage page = new PDPage();
            document.addPage(page);

            PDPageContentStream contentStream = new PDPageContentStream(document, page);

            // 添加文本
            contentStream.beginText();
            contentStream.setFont(PDType1Font.HELVETICA_BOLD, 12);
            contentStream.newLineAtOffset(100, 700);
            contentStream.showText("This is a sample PDF with an image and a table.");
            contentStream.endText();

            // 添加图像
            PDImageXObject image = PDImageXObject.createFromFile("sample.jpg", document);
            contentStream.drawImage(image, 100, 500, image.getWidth() / 2, image.getHeight() / 2);

            // 添加表格
            contentStream.setFont(PDType1Font.HELVETICA, 12);
            contentStream.beginText();
            contentStream.newLineAtOffset(100, 450);
            contentStream.showText("1");
            contentStream.newLineAtOffset(50, 0);
            contentStream.showText("2");
            contentStream.newLineAtOffset(50, 0);
            contentStream.showText("3");
            contentStream.newLineAtOffset(-100, -20);
            contentStream.showText("4");
            contentStream.newLineAtOffset(50, 0);
            contentStream.showText("5");
            contentStream.newLineAtOffset(50, 0);
            contentStream.showText("6");
            contentStream.endText();

            contentStream.close();

            document.save("AdvancedPDFBox.pdf");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

在这个示例中,我们创建了一个包含文本、图像和表格的PDF文件。我们使用PDImageXObject加载了一张图片,并使用PDPageContentStream在页面上绘制了文本和表格。

使用Flying Saucer生成PDF

Flying Saucer简介

Flying Saucer是一个基于XHTML和CSS的Java库,用于将HTML文档转换为PDF文件。它特别适合那些已经熟悉HTML和CSS的开发者,可以通过简单的HTML和CSS代码生成复杂的PDF文档。

Flying Saucer的基本使用

要使用Flying Saucer生成PDF文件,首先需要添加Flying Saucer的依赖。如果你使用的是Maven项目,可以在pom.xml中添加以下依赖:

<dependency>
    <groupId>org.xhtmlrenderer</groupId>
    <artifactId>flying-saucer-pdf</artifactId>
    <version>9.1.22</version>
</dependency>

接下来,我们可以编写一个简单的Java程序来生成一个包含“Hello, World!”文本的PDF文件:

import org.xhtmlrenderer.pdf.ITextRenderer;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;

public class HelloWorldFlyingSaucer {
    public static void main(String[] args) {
        String htmlContent = "<html><body><h1>Hello, World!</h1></body></html>";
        try (OutputStream os = new FileOutputStream("HelloWorldFlyingSaucer.pdf")) {
            ITextRenderer renderer = new ITextRenderer();
            renderer.setDocumentFromString(htmlContent);
            renderer.layout();
            renderer.createPDF(os);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

在这个示例中,我们创建了一个包含“Hello, World!”文本的HTML字符串,并使用ITextRenderer将其转换为PDF文件。

Flying Saucer的高级功能

Flying Saucer不仅支持简单的HTML转换,还支持复杂的CSS样式、图像、表格等元素的生成。以下是一个生成包含图像和表格的PDF文件的示例:

import org.xhtmlrenderer.pdf.ITextRenderer;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;

public class AdvancedFlyingSaucer {
    public static void main(String[] args) {
        String htmlContent = "<html><body>" +
                "<h1>This is a sample PDF with an image and a table.</h1>" +
                "<img src='sample.jpg' alt='Sample Image' width='200' height='100'/>" +
                "<table border='1'>" +
                "<tr><th>1</th><th>2</th><th>3</th></tr>" +
                "<tr><td>4</td><td>5</td><td>6</td></tr>" +
                "</table>" +
                "</body></html>";
        try (OutputStream os = new FileOutputStream("AdvancedFlyingSaucer.pdf")) {
            ITextRenderer renderer = new ITextRenderer();
            renderer.setDocumentFromString(htmlContent);
            renderer.layout();
            renderer.createPDF(os);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

在这个示例中,我们创建了一个包含图像和表格的HTML字符串,并使用ITextRenderer将其转换为PDF文件。

使用JasperReports生成PDF

JasperReports简介

JasperReports是一个强大的Java报表引擎,可以生成多种格式的报表,包括PDF、Excel、HTML等。JasperReports支持从数据库、XML、Java对象等多种数据源生成报表,并且提供了丰富的报表设计工具。

JasperReports的基本使用

要使用JasperReports生成PDF文件,首先需要添加JasperReports的依赖。如果你使用的是Maven项目,可以在pom.xml中添加以下依赖:

<dependency>
    <groupId>net.sf.jasperreports</groupId>
    <artifactId>jasperreports</artifactId>
    <version>6.17.0</version>
</dependency>

接下来,我们可以编写一个简单的Java程序来生成一个包含“Hello, World!”文本的PDF文件:

import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperExportManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.util.JRLoader;

import java.util.HashMap;

public class HelloWorldJasperReports {
    public static void main(String[] args) {
        try {
            // 加载JasperReport模板
            JasperReport jasperReport = (JasperReport) JRLoader.loadObjectFromFile("HelloWorld.jasper");

            // 填充报表
            JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, new HashMap<>(), new JREmptyDataSource());

            // 导出为PDF
            JasperExportManager.exportReportToPdfFile(jasperPrint, "HelloWorldJasperReports.pdf");
        } catch (JRException e) {
            e.printStackTrace();
        }
    }
}

在这个示例中,我们加载了一个JasperReport模板文件(HelloWorld.jasper),并使用JasperFillManager填充报表。然后,我们使用JasperExportManager将报表导出为PDF文件。

JasperReports的高级功能

JasperReports不仅支持简单的文本生成,还支持复杂的报表设计、数据源连接、图表生成等功能。以下是一个生成包含图表和表格的PDF文件的示例:

import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperExportManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
import net.sf.jasperreports.engine.util.JRLoader;

import java.util.Arrays;
import java.util.HashMap;
import java.util.List;

public class AdvancedJasperReports {
    public static void main(String[] args) {
        try {
            // 加载JasperReport模板
            JasperReport jasperReport = (JasperReport) JRLoader.loadObjectFromFile("AdvancedReport.jasper");

            // 准备数据源
            List<ReportData> data = Arrays.asList(
                    new ReportData("Item 1", 10),
                    new ReportData("Item 2", 20),
                    new ReportData("Item 3", 30)
            );
            JRBeanCollectionDataSource dataSource = new JRBeanCollectionDataSource(data);

            // 填充报表
            JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, new HashMap<>(), dataSource);

            // 导出为PDF
            JasperExportManager.exportReportToPdfFile(jasperPrint, "AdvancedJasperReports.pdf");
        } catch (JRException e) {
            e.printStackTrace();
        }
    }
}

class ReportData {
    private String item;
    private int value;

    public ReportData(String item, int value) {
        this.item = item;
        this.value = value;
    }

    public String getItem() {
        return item;
    }

    public int getValue() {
        return value;
    }
}

在这个示例中,我们加载了一个包含图表和表格的JasperReport模板文件(AdvancedReport.jasper),并使用JRBeanCollectionDataSource作为数据源填充报表。然后,我们使用JasperExportManager将报表导出为PDF文件。

总结

本文介绍了如何使用Java生成PDF文件,涵盖了iText、Apache PDFBox、Flying Saucer和JasperReports四种常见的Java库。每种库都有其独特的优势和适用场景,开发者可以根据具体需求选择合适的工具。通过本文的示例代码,读者可以快速上手并掌握这些库的基本使用方法,从而在实际项目中灵活应用。

无论是生成简单的文本文件,还是复杂的报表和图表,Java都提供了丰富的工具和库来满足各种需求。希望本文能够帮助读者更好地理解和掌握Java生成PDF文件的技术,为实际项目开发提供参考和帮助。

推荐阅读:
  1. 如何生成PDF
  2. 如何在java中利用富文本生成pdf文件

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

java pdf文件

上一篇:ECharts如何调用接口获取后端数据

下一篇:Vue3怎么实现文章内容中多个关键词标记高亮显示

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》