本教程演示如何将嵌入文件添加到 PDF 文档。

Maven 依赖项

我们使用 Apache Maven 来管理我们的项目依赖项。确保以下依赖项驻留在类路径中。

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

Apache PDFBox 将嵌入文件添加到 PDF 文档

首先我们创建一个PDComplexFileSpecification保存嵌入文件的 . 为了保持简单,我们创建了一个带有一些基本文本输入的虚拟文件流。我们创建了PDEmbeddedFile包含虚拟文件的文件,我们可以使用它来设置一些可选参数。嵌入文件存储在一个命名的树类PDEmbeddedFilesNameTreeNode中。最后,我们将树添加到文档目录中。

package com.memorynotfound.pdf.pdfbox;import org.apache.pdfbox.pdmodel.*;
import org.apache.pdfbox.pdmodel.common.filespecification.PDComplexFileSpecification;
import org.apache.pdfbox.pdmodel.common.filespecification.PDEmbeddedFile;
import org.apache.pdfbox.pdmodel.font.PDType1Font;import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.IOException;
import java.util.*;public class AddEmbeddedFiles {public static void main(String[] args) throws Exception{try (final PDDocument doc = new PDDocument()){PDPage page = new PDPage();doc.addPage(page);PDPageContentStream contentStream = new PDPageContentStream(doc, page);contentStream.beginText();contentStream.setFont(PDType1Font.HELVETICA, 12);contentStream.newLineAtOffset(100, 700);contentStream.showText("Go to Document -> File Attachments to View Embedded Files");contentStream.endText();contentStream.close();// embedded files are stored in a named treePDEmbeddedFilesNameTreeNode efTree = new PDEmbeddedFilesNameTreeNode();// first create the file specification, which holds the embedded filePDComplexFileSpecification fs = new PDComplexFileSpecification();fs.setFile("example-document.txt");// create a dummy file stream, this would probably normally be a FileInputStreambyte[] data = "This is the contents of the embedded file".getBytes("ISO-8859-1");ByteArrayInputStream fakeFile = new ByteArrayInputStream(data);// now lets some of the optional parametersPDEmbeddedFile ef = new PDEmbeddedFile(doc, fakeFile);ef.setSubtype("text/plain");ef.setSize(data.length);ef.setCreationDate(Calendar.getInstance());fs.setEmbeddedFile(ef);// create a new tree node and add the embedded filePDEmbeddedFilesNameTreeNode treeNode = new PDEmbeddedFilesNameTreeNode();treeNode.setNames(Collections.singletonMap("My first attachment",  fs));// add the new node as kid to the root nodeList<PDEmbeddedFilesNameTreeNode> kids = new ArrayList<PDEmbeddedFilesNameTreeNode>();kids.add(treeNode);efTree.setKids(kids);// add the tree to the document catalogPDDocumentNameDictionary names = new PDDocumentNameDictionary(doc.getDocumentCatalog());names.setEmbeddedFiles(efTree);doc.getDocumentCatalog().setNames(names);doc.save(new File("/tmp/embedded-file.pdf"));} catch (IOException e){System.err.println("Exception while trying to create pdf document - " + e);}}}

输出

当我们运行这个应用程序时,会生成一个 PDF 文档。如果我们使用 Acrobat Reader 打开文档,我们可以在左栏中看到该文档现在是嵌入文件的骄傲所有者。

参考

Apache PDFBox 将嵌入文件添加到 PDF 文档相关推荐

  1. Apache PdfBox 2.0.X 版本解析PDF文档(文字和图片)

    最近项目开发过程涉及到了pdf文件的内容的解析和和内容的提取入库操作,其中pdf的解析采用了开源的apache pdfbox 插件,版本选用的是最新版本的2.0.8版本,现将简单的读取解析的步骤记录如 ...

  2. 使用PDF24 将mathmatica 的.nb文件转化为PDF文档

    使用PDF24 将mathmatica 的.nb文件转化为PDF文档 对于mathematica保存后的.nb文档,如果电脑上没有mathematica 软件无法打开,更改为.docx无法打开,用MA ...

  3. PDF怎么插入页?将页面添加到 PDF 文档的 3 种简单方法

    得益于现代技术,我们现在可以轻松地合并.创建.编辑 PDF 并执行更多操作.使用专业的PDF程序在PDF文档中插入一页问题不大.这篇文章将介绍如何使用 奇客PDF编辑 和其他四个桌面和在线程序向 PD ...

  4. PDF文件简介及PDF文档加密方法

    PDF文件的认识: Adobe Reader 关于PDF的图标PDF全称Portable Document Format,译为可移植文档格式,是一种电子文件格式.这种文件格式与操作系统平台无关,也就是 ...

  5. itextsharp php,将页码添加到pdf文档(itextsharp)

    您必须使用iTextSharp打开PDF并自行添加页码.我曾经做过这样的事情,这是我的功能可能会给你一个开始. 该功能将当前页面添加到左下角,因此您可能必须将其放置在符合您需要的其他位置. publi ...

  6. 【PDFBox】PDFBox操作PDF文档之添加本地图片、添加网络图片、图片宽高自适应、图片水平垂直居中对齐

    这篇文章,主要介绍PDFBox操作PDF文档之添加本地图片.添加网络图片.图片宽高自适应.图片水平垂直居中对齐. 目录 一.PDFBox操作图片 1.1.添加本地图片 (1)案例代码 (2)运行效果 ...

  7. IEEE论文Word 转 PDF文件的字体嵌入(embedded font)和pdf 文档去除链接

    word 2010 选择 文件-> 发布pdf 确认PDF是否字体都嵌入: pdf文件双击文件->属性->字体,查看是否都嵌入,如图: PDF文档删除链接: "高级---文 ...

  8. linux 分割pdf,PDFBox分割PDF文档

    在前一章中,我们已经看到了如何将JavaScript添加到PDF文档. 现在来学习如何将给定的PDF文档分成多个文档. 分割PDF文档中的页面 可以使用Splitter类将给定的PDF文档分割为多个P ...

  9. matlab使用pdfbox,PDFBox编写PDF文档

    本文概述 PDF文档是纸质文档的流行替代品.它们在每个平台上具有相同的外观.与纸质文档一样, 某些PDF文档是机密的.我们可以使用密码保护来保护PDF文档.我们还可以在PDF文档中指定权限和加密类型. ...

最新文章

  1. 首次在观测中证实霍金黑洞面积定理!他们从引力波中算出黑洞真实面积
  2. 【数据结构与算法】之深入解析“UTF-8编码验证”的求解思路与算法示例
  3. 数据采集串口通信系统verilog设计和仿真
  4. OpenCL用于计算机领域的13个经典案例
  5. 德国力挺华为:建5G网络不排除任何设备厂商
  6. 为什么不懂技术的人可以做产品经理?
  7. 多媒体计算机的关键技术有哪些,多媒体计算机的定义分类和关键技术
  8. 西门子修复因使用第三方组件引起的90多个漏洞
  9. 【OpenCV学习笔记】【函数学习】一(MFC+OpenCV2.4.7读取摄像头之cvCaptureFromCAM()的索引问题
  10. 安卓rom制作教程_MIUI官改篇对比分析-极光ROM-台湾W大-星空未来-其他官改官网
  11. 运动会管理系统(JAVA,JSP,SERVLET,SQLSERVER)
  12. 【WPS技能】xlsx表格根据单元格的值改变行背景色
  13. k8s集群外部域名dns解析问题
  14. 调度工具之Azkaban 介绍
  15. 论文阅读-Detecting Deepfakes with Self-Blended Images (利用自混合图像检测深度伪造)
  16. java涂色_【LeetCode(Java) - 276】栅栏涂色
  17. 掌上医院:手机生活助手
  18. [2016 NUIST 程序设计竞赛] D. 达朗贝尔的台阶
  19. Python在cmd下pip快速下载安装包的国内安装镜像
  20. (第六天)学习Python的元组,字典,集合,公共操作

热门文章

  1. 众筹模式融资报告发布
  2. 电工(海波)口录(自用/长期更新)
  3. Python中无限循环需要什么条件
  4. 计算机和机器人专业哪个好初中生,成都初中生参加这些竞赛,不管是直升还是签约,拿了奖项都备受重视!...
  5. 压力变送器的定义、分类、原理、特点和作用
  6. 网页部分内容显示不全
  7. 水布垭水电站溢洪道闸门电气控制系统改造项目顺利验收
  8. React Leaflet Esri 聚集要素
  9. Ubuntu 18.04 Intel RealSense D435i 相机标定教程
  10. Flutter进阶学习