设为首页收藏本站
网站公告 | 这是第一条公告
     

 找回密码
 立即注册
缓存时间23 现在时间23 缓存数据 荣耀也罢,屈辱也罢,都要以平和的心态去面对,少一些无奈与感慨,多一份从容和淡然。晚安!

荣耀也罢,屈辱也罢,都要以平和的心态去面对,少一些无奈与感慨,多一份从容和淡然。晚安!

查看: 918|回复: 1

Java生成PDF文档两个超实用的库( iText和Apache PDFBox)

[复制链接]

  离线 

TA的专栏

  • 打卡等级:热心大叔
  • 打卡总天数:240
  • 打卡月天数:1
  • 打卡总奖励:3573
  • 最近打卡:2025-12-14 07:36:21
等级头衔

等級:晓枫资讯-上等兵

在线时间
0 小时

积分成就
威望
0
贡献
422
主题
385
精华
0
金钱
4835
积分
890
注册时间
2023-1-3
最后登录
2025-12-14

发表于 2025-2-17 19:26:31 | 显示全部楼层 |阅读模式
目录
  • 前言
  • 用 iText 库生成 PDF
    • 思路
    • 代码解释及使用说明
    • Maven 依赖
  • 用 Apache PDFBox 库生成 PDF
    • 思路
    • 代码解释及使用说明
    • Maven 依赖
  • 总结

    前言

    在 Java 里实现 PDF 文档生成那可真是个挺有意思的事儿,今儿个就来好好唠唠这个。咱有不少好用的库可以选择,下面就给你详细讲讲其中两个超实用的库,一个是 iText,另一个是 Apache PDFBox。

    用 iText 库生成 PDF

    思路

    • 先把 iText 库给引入进来,这就好比给咱的 Java 项目装上了一个生成 PDF 的“神器”。

    • 创建一个 

      1. Document
      复制代码
       对象,这个对象就像是一张白纸,咱要在上面绘制 PDF 的内容。

    • 把这张“白纸”打开,同时设置好字体啥的,就像准备好画笔和颜料。

    • 往 

      1. Document
      复制代码
       里添加各种内容,比如段落、表格这些,就像在白纸上画画。

    • 最后把“白纸”合上,PDF 就生成啦。

    代码示例

    1. import com.itextpdf.text.Document;
    2. import com.itextpdf.text.DocumentException;
    3. import com.itextpdf.text.Paragraph;
    4. import com.itextpdf.text.pdf.PdfWriter;
    5. import java.io.FileNotFoundException;
    6. import java.io.FileOutputStream;
    7. public class ITextPdfGenerator {
    8. public static void main(String[] args) {
    9. // 创建 Document 对象,就像准备好一张白纸
    10. Document document = new Document();
    11. try {
    12. // 把这张“白纸”和一个文件输出流关联起来,指定生成的 PDF 文件路径
    13. PdfWriter.getInstance(document, new FileOutputStream("itext_example.pdf"));
    14. // 打开这张“白纸”,准备画画
    15. document.open();
    16. // 在“白纸”上添加一个段落内容
    17. document.add(new Paragraph("嘿,这是用 iText 生成的 PDF 文档哦,是不是很神奇!"));
    18. } catch (DocumentException | FileNotFoundException e) {
    19. e.printStackTrace();
    20. } finally {
    21. // 合上“白纸”,完成 PDF 生成
    22. if (document.isOpen()) {
    23. document.close();
    24. }
    25. }
    26. }
    27. }
    复制代码

    代码解释及使用说明

    • 首先咱创建了一个 

      1. Document
      复制代码
       对象,它就代表了整个 PDF 文档,就像一张白纸。

    • 用 

      1. PdfWriter.getInstance
      复制代码
       方法把 
      1. Document
      复制代码
       和一个文件输出流关联起来,这里指定生成的 PDF 文件叫 
      1. itext_example.pdf
      复制代码

    • 调用 

      1. document.open()
      复制代码
       把“白纸”打开,这样就能往里面添加内容啦。

    • 用 

      1. document.add(new Paragraph("..."))
      复制代码
       往文档里添加一个段落,就像在白纸上写了一句话。

    • 最后在 

      1. finally
      复制代码
       块里调用 
      1. document.close()
      复制代码
       把“白纸”合上,确保资源都正确释放。

    Maven 依赖

    1. <dependency>
    2. <groupId>com.itextpdf</groupId>
    3. <artifactId>itextpdf</artifactId>
    4. <version>5.5.13.3</version>
    5. </dependency>
    复制代码

    用 Apache PDFBox 库生成 PDF

    思路

    • 先把 Apache PDFBox 库引入进来,这也是一个生成 PDF 的厉害工具。

    • 创建一个 

      1. PDDocument
      复制代码
       对象,这个对象就像是一个 PDF 的容器。

    • 创建一个 

      1. PDPage
      复制代码
       表示页面,然后把它添加到 
      1. PDDocument
      复制代码
       里,就像给容器里放了一张纸。

    • 获取 

      1. PDPageContentStream
      复制代码
       来绘制内容,就像拿起笔在纸上画画。

    • 最后关闭 

      1. PDPageContentStream
      复制代码
       和 
      1. PDDocument
      复制代码
      ,PDF 就生成好啦。

    代码示例

    1. import org.apache.pdfbox.pdmodel.PDDocument;
    2. import org.apache.pdfbox.pdmodel.PDPage;
    3. import org.apache.pdfbox.pdmodel.PDPageContentStream;
    4. import org.apache.pdfbox.pdmodel.font.PDType1Font;
    5. import java.io.IOException;
    6. public class PdfBoxPdfGenerator {
    7. public static void main(String[] args) {
    8. // 创建 PDDocument 对象,就像准备一个 PDF 容器
    9. PDDocument document = new PDDocument();
    10. try {
    11. // 创建一个页面,就像准备一张纸
    12. PDPage page = new PDPage();
    13. // 把这张纸放到 PDF 容器里
    14. document.addPage(page);
    15. // 获取页面内容流,就像拿起笔准备画画
    16. PDPageContentStream contentStream = new PDPageContentStream(document, page);
    17. // 设置字体和字号,就像选择画笔的粗细和样式
    18. contentStream.setFont(PDType1Font.HELVETICA_BOLD, 12);
    19. // 开始新的一行,准备写字
    20. contentStream.beginText();
    21. // 设置文本位置,就像确定在纸上的写字位置
    22. contentStream.newLineAtOffset(100, 700);
    23. // 写入文本,在纸上写下内容
    24. contentStream.showText("嘿,这是用 Apache PDFBox 生成的 PDF 文档,很酷吧!");
    25. // 结束文本操作,写完了
    26. contentStream.endText();
    27. // 把笔放下,关闭内容流
    28. contentStream.close();
    29. // 保存这个 PDF 文档
    30. document.save("pdfbox_example.pdf");
    31. } catch (IOException e) {
    32. e.printStackTrace();
    33. } finally {
    34. // 把 PDF 容器关上,完成操作
    35. try {
    36. if (document != null) {
    37. document.close();
    38. }
    39. } catch (IOException e) {
    40. e.printStackTrace();
    41. }
    42. }
    43. }
    44. }
    复制代码

    代码解释及使用说明

    • 创建 

      1. PDDocument
      复制代码
       对象,它代表整个 PDF 文档,就像一个容器。

    • 创建 

      1. PDPage
      复制代码
       表示一个页面,用 
      1. document.addPage(page)
      复制代码
       把页面添加到文档里,就像把纸放到容器里。

    • 用 

      1. PDPageContentStream
      复制代码
       来向页面里绘制内容,通过 
      1. setFont
      复制代码
       方法设置字体和字号,
      1. beginText
      复制代码
       开始文本操作,
      1. newLineAtOffset
      复制代码
       设置文本位置,
      1. showText
      复制代码
       写入文本,
      1. endText
      复制代码
       结束文本操作。

    • 调用 

      1. contentStream.close()
      复制代码
       关闭内容流,就像把笔放下。

    • 最后调用 

      1. document.save("pdfbox_example.pdf")
      复制代码
       保存文档,在 
      1. finally
      复制代码
       块里关闭 
      1. PDDocument
      复制代码
      ,把容器关上。

    Maven 依赖

    1. <dependency>
    2. <groupId>org.apache.pdfbox</groupId>
    3. <artifactId>pdfbox</artifactId>
    4. <version>2.0.24</version>
    5. </dependency>
    复制代码

    嘿,朋友,这下你知道怎么用 Java 生成 PDF 文档了吧!这两个库都挺好用的,你可以根据自己的需求选择哦。赶紧动手试试吧!

    总结

    到此这篇关于Java生成PDF文档的文章就介绍到这了,更多相关Java生成PDF文档内容请搜索晓枫资讯以前的文章或继续浏览下面的相关文章希望大家以后多多支持晓枫资讯!


    免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
    晓枫资讯-科技资讯社区-免责声明
    免责声明:以上内容为本网站转自其它媒体,相关信息仅为传递更多信息之目的,不代表本网观点,亦不代表本网站赞同其观点或证实其内容的真实性。
          1、注册用户在本社区发表、转载的任何作品仅代表其个人观点,不代表本社区认同其观点。
          2、管理员及版主有权在不事先通知或不经作者准许的情况下删除其在本社区所发表的文章。
          3、本社区的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,举报反馈:点击这里给我发消息进行删除处理。
          4、本社区一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
          5、以上声明内容的最终解释权归《晓枫资讯-科技资讯社区》所有。
    http://bbs.yzwlo.com 晓枫资讯--游戏IT新闻资讯~~~

      离线 

    TA的专栏

    等级头衔

    等級:晓枫资讯-列兵

    在线时间
    0 小时

    积分成就
    威望
    0
    贡献
    0
    主题
    0
    精华
    0
    金钱
    17
    积分
    14
    注册时间
    2022-12-30
    最后登录
    2022-12-30

    发表于 2025-8-18 15:28:40 | 显示全部楼层
    路过,支持一下
    http://bbs.yzwlo.com 晓枫资讯--游戏IT新闻资讯~~~
    严禁发布广告,淫秽、色情、赌博、暴力、凶杀、恐怖、间谍及其他违反国家法律法规的内容。!晓枫资讯-社区
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    1楼
    2楼

    手机版|晓枫资讯--科技资讯社区 本站已运行

    CopyRight © 2022-2025 晓枫资讯--科技资讯社区 ( BBS.yzwlo.com ) . All Rights Reserved .

    晓枫资讯--科技资讯社区

    本站内容由用户自主分享和转载自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。

    如有侵权、违反国家法律政策行为,请联系我们,我们会第一时间及时清除和处理! 举报反馈邮箱:点击这里给我发消息

    Powered by Discuz! X3.5

    快速回复 返回顶部 返回列表