Java 动态生成 PDF 文件

简介:

每片文章前来首小诗:

    今日夕阳伴薄雾,印着雪墙笑开颜。我心仿佛出窗前,浮在半腰望西天。  --泥沙砖瓦浆木匠

需求:

项目里面有需要java动态生成 PDF 文件,提供下载。今天我找了下有关了,系统得学习了解下。

开源的 iText 库使得 PDF 的创建变得轻松易行。下面介绍下  

方案:

-----------------------

 iText V5.X.X 版

-----------------------

第一步学习:

了解下:

  • com.itextpdf.text.Document 是用于生成 PDF 文档的主要类。
  • com.itextpdf.text.pdf.PdfWriter 是一个 PDF 编写器。
  • 下面罗列下常用:
  • com.itextpdf.text.Paragraph:此类表示一个缩进的段落。
  • com.itextpdf.text.Chapter:此类表示 PDF 文档中的一章。使用 Paragraph 作为标题、int 作为章节编号来创建该类。
  • com.itextpdf.text.Font:此类包含一种字体的所有规范,比如字体集、字号、样式和颜色。各种字体都在此类中声明为静态常量。
  • com.itextpdf.text.List:此类表示一个列表,反过来,该列表又包含许多 ListItems
  • com.itextpdf.text.pdf.PDFPTable:这是一个表格,可放在一个绝对位置上,也可作为类 Table 添加到文档中。
  • com.itextpdf.text.Anchor:一个 Anchor 可能是一个引用,或是一个引用的目标。

这里我用的是这两个包,我分享下。

链接: http://pan.baidu.com/s/1koKaq 密码:q2vy

清单1. 实例化文档对象
Document document = new Document(PageSize.A4, 50, 50, 50, 50);

第 一个参数是页面大小。接下来的几个参数分别是左边距、右边距、上边距和下边距。此文档的类型还未定义。它依赖于您创建的编写器类型。对于我们的样例,我们 选择 com.itextpdf.text.pdf.PdfWriter。其他编写器包括 HtmlWriter、RtfWriter、XmlWriter 等。它们的名称说明了它们的实际用途。

清单2. 创建 PdfWriter 对象
PdfWriter writer = PdfWriter.getInstance(document, \

new FileOutputStream("C:\\Test.pdf"));

document.open();

 

第一个参数是文档对象的引用,第二个参数是输出将写入的文件的绝对名称。接下来,我们打开文档开始编写。

现 在,我们将在文档的第一页上添加一些文本。任何文本都借助 com.itextpdf.text.Paragraph 来进行添加。您可使用您的文本以及字体、颜色、字号等默认设置创建一个默认段落。否则,您可提供自己的字体。 在本文中,我们还将讨论 PDF 文档的定位符(链接)。在此 PDF 中,我们使用 backToTop 作为链接。当单击 backToTop 链接时,它会将您带到文档的第一页。您需要将该文本设置为第一页的定位目标。让我们看看如何将定位目标和字体设置到所添加的段落中。

 
清单3. 创建段落对象


Anchor anchorTarget = new Anchor("ccccccccccccccccc");
      anchorTarget.setName("bbbbbbbbbbbbbbbb");
      Paragraph paragraph1 = new Paragraph();

      paragraph1.setSpacingBefore(50);

      paragraph1.add(anchorTarget);
      document.add(paragraph1);

document.add(new Paragraph("aaaaaaaaaaaaaaaaaaaaaa", 

FontFactory.getFont(FontFactory.COURIER, 14, Font.BOLD,    new CMYKColor(0, 255, 0, 0))));

 显示了清单 3 中的代码的样例输出。要关闭文档,将 document.close(); 添加到清单 3 中的代码末尾。

 

这就是一个简单的pdf 生成了。

第二步学习:

细心的同学们,详细可以看帮助文档。

链接: http://pan.baidu.com/s/15n2BX 密码:kary

第三步学习:

再细心的同学,会问“干嘛用 aaaaaa bbbbbb cccccc”。中文呢?

这时候我们,需要解决。用帮助jar。我上面给你们分享了。

下面给个案例(超级简单)。

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

import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Font;
import com.itextpdf.text.PageSize;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.text.pdf.PdfWriter;

public class makePDF {

    /**
     * @param args
     * @throws DocumentException
     * @throws FileNotFoundException
     */
    public static void main(String[] args) throws FileNotFoundException,
            DocumentException {
        // TODO Auto-generated method stub
        Document document = new Document(PageSize.A4, 50, 50, 50, 50);// 是用于生成
        PdfWriter writer = PdfWriter.getInstance(document,
                new FileOutputStream("D:\\pdftest.pdf"));
        document.open();
        Paragraph par = new PDFParagraph("你好");// 此类表示段落。
        par.add("这是我们第一个pdftext。");
        document.add(par);
        document.close();
    }

}

class PDFParagraph extends Paragraph {
    /**
     * 
     */
    private static final long serialVersionUID = 1L;

    public PDFParagraph(String content) {
        super(content, getChineseFont());
    }

    private static final Font getChineseFont() {
        
        Font FontChinese = null;
        try {
            BaseFont bfChinese = BaseFont.createFont("STSong-Light",
                    "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
            FontChinese = new Font(bfChinese, 12, Font.NORMAL);
        } catch (DocumentException de) {
            System.err.println(de.getMessage());
        } catch (IOException ioe) {
            System.err.println(ioe.getMessage());
        }
        return FontChinese;
    }
}

下面仔细解释下:

 Paragraph par = new PDFParagraph("你好");// 此类表示一个缩进的段落。
-->调用方法:
PDFParagraph(String content)
-->
super(content, getChineseFont());//实现父类,成功创造出我们需要的 段落。
-->
getChineseFont()//中文帮助jar帮我们解决,中文显示。

总结:

  iText是一个非常著名的能够快速产生PDF文件的Java类库。支持文本,表格,图形的操作,可以方便的跟 Servlet 进行结合。
快去使用下。
相关文章
|
3月前
|
存储 JSON API
如何将 Swagger 文档导出为 PDF 文件
你会发现自己可能需要将 Swagger 文档导出为 PDF 或文件,以便于共享和存档。在这篇博文中,我们将指导你完成将 Swagger 文档导出为 PDF 格式的过程。
|
1月前
|
存储 Java 数据安全/隐私保护
Java技术栈揭秘:Base64加密和解密文件的实战案例
以上就是我们今天关于Java实现Base64编码和解码的实战案例介绍。希望能对你有所帮助。还有更多知识等待你去探索和学习,让我们一同努力,继续前行!
129 5
|
1月前
|
存储 安全 算法
Java 集合面试题 PDF 下载及高频考点解析
本文围绕Java集合面试题展开,详细解析了集合框架的基本概念、常见集合类的特点与应用场景。内容涵盖`ArrayList`与`LinkedList`的区别、`HashSet`与`TreeSet`的对比、`HashMap`与`ConcurrentHashMap`的线程安全性分析等。通过技术方案与应用实例,帮助读者深入理解集合类的特性和使用场景,提升解决实际开发问题的能力。文末附带资源链接,供进一步学习参考。
55 4
|
2月前
|
人工智能 算法 安全
使用CodeBuddy实现批量转换PPT、Excel、Word为PDF文件工具
通过 CodeBuddy 实现本地批量转换工具,让复杂的文档处理需求转化为 “需求描述→代码生成→一键运行” 的极简流程,真正实现 “技术为效率服务” 的目标。感兴趣的快来体验下把
97 10
|
1月前
|
网络协议 安全 Java
实现Java语言的文件断点续传功能的技术方案。
像这样,我们就完成了一项看似高科技、实则亲民的小工程。这样的技术实现不仅具备实用性,也能在面对网络不稳定的挑战时,稳稳地、不失乐趣地完成工作。
50 0
|
4月前
|
前端开发 Cloud Native Java
Java||Springboot读取本地目录的文件和文件结构,读取服务器文档目录数据供前端渲染的API实现
博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
Java||Springboot读取本地目录的文件和文件结构,读取服务器文档目录数据供前端渲染的API实现
|
5月前
|
人工智能 编解码 文字识别
OCRmyPDF:16.5K Star!快速将 PDF 文件转换为可搜索、可复制的文档的命令行工具
OCRmyPDF 是一款开源命令行工具,专为将扫描的 PDF 文件转换为可搜索、可复制的文档。支持多语言、图像优化和多核处理。
678 17
OCRmyPDF:16.5K Star!快速将 PDF 文件转换为可搜索、可复制的文档的命令行工具
|
5月前
|
文字识别 Serverless 开发工具
【全自动改PDF名】批量OCR识别提取PDF自定义指定区域内容保存到 Excel 以及根据PDF文件内容的标题来批量重命名
学校和教育机构常需处理成绩单、报名表等PDF文件。通过OCR技术,可自动提取学生信息并录入Excel,便于统计分析和存档管理。本文介绍使用阿里云服务实现批量OCR识别、内容提取、重命名及导出表格的完整步骤,包括开通相关服务、编写代码、部署函数计算和设置自动化触发器等。提供Python示例代码和详细操作指南,帮助用户高效处理PDF文件。 链接: - 百度网盘:[链接](https://pan.baidu.com/s/1mWsg7mDZq2pZ8xdKzdn5Hg?pwd=8866) - 腾讯网盘:[链接](https://share.weiyun.com/a77jklXK)
480 5
|
5月前
|
存储 算法 Java
解锁“分享文件”高效密码:探秘 Java 二叉搜索树算法
在信息爆炸的时代,文件分享至关重要。二叉搜索树(BST)以其高效的查找性能,为文件分享优化提供了新路径。本文聚焦Java环境下BST的应用,介绍其基础结构、实现示例及进阶优化。BST通过有序节点快速定位文件,结合自平衡树、多线程和权限管理,大幅提升文件分享效率与安全性。代码示例展示了文件插入与查找的基本操作,适用于大规模并发场景,确保分享过程流畅高效。掌握BST算法,助力文件分享创新发展。
|
5月前
|
Java API 数据处理
深潜数据海洋:Java文件读写全面解析与实战指南
通过本文的详细解析与实战示例,您可以系统地掌握Java中各种文件读写操作,从基本的读写到高效的NIO操作,再到文件复制、移动和删除。希望这些内容能够帮助您在实际项目中处理文件数据,提高开发效率和代码质量。
119 4

热门文章

最新文章