在PDF文档中,附件是用于展示关联信息的文件。在文档中插入附件,可以起到补充和丰富文件内容的作用。一般来说,附件的文档类型可以是常见的,如Word、Excel、PPT等,也可是其他文件类型。除此之外,附件在文档中有两种存在形式,一种是普通的文件附件,另一种则是注释附件。本文将通过使用Java程序来演示如何在PDF文档中添加和删除以上两种附件形式。
方法1:通过 官网 下载获取jar包。解压后将lib文件夹下的Spire.Pdf.jar文件导入Java程序。(如下图)
方法2:通过maven仓库安装导入。具体安装教程参见 此网页 。
import com.spire.pdf.PdfDocument; import com.spire.pdf.attachments.PdfAttachment; public class AddAttachments { public static void main(String[] args) { //创建PdfDocument对象 PdfDocument doc = new PdfDocument(); //加载PDF文档 doc.loadFromFile("C://Users//Test1//Desktop//Sample.pdf"); //添加附件到PDF PdfAttachment attachment = new PdfAttachment("C://Users//Test1//Desktop//注意事项说明书.docx"); doc.getAttachments().add(attachment); //保存文档 doc.saveToFile("output/Attachments.pdf"); } }
import com.spire.pdf.PdfDocument; import com.spire.pdf.annotations.*; import com.spire.pdf.graphics.*; import java.awt.*; import java.awt.geom.Dimension2D; import java.awt.geom.Rectangle2D; import java.io.File; import java.io.FileInputStream; import java.io.IOException; public class AddAnnotationAttachment { public static void main(String[] args) throws IOException { //创建PdfDocument对象 PdfDocument doc = new PdfDocument(); //加载PDF文档 doc.loadFromFile("C://Users//Test1//Desktop//Sample.pdf"); //绘制标签 String label = "财务报表.xlsx"; PdfTrueTypeFont font = new PdfTrueTypeFont(new Font("Arial Unicode MS",Font.PLAIN,12),true); double x = 35; double y = doc.getPages().get(0).getActualSize().getHeight() - 200; doc.getPages().get(0).getCanvas().drawString(label, font, PdfBrushes.getOrange(), x, y); //添加注释附件到PDF String filePath = "C://Users//Test1//Desktop//财务报表.xlsx"; byte[] data = toByteArray(filePath); Dimension2D size = font.measureString(label); Rectangle2D bound = new Rectangle2D.Float((float) (x + size.getWidth() + 2), (float) y, 10, 15); PdfAttachmentAnnotation annotation = new PdfAttachmentAnnotation(bound, filePath, data); annotation.setColor(new PdfRGBColor(new Color(0, 128, 128))); annotation.setFlags(PdfAnnotationFlags.Default); annotation.setIcon(PdfAttachmentIcon.Graph); annotation.setText("点击打开财务报表.xlsx"); doc.getPages().get(0).getAnnotationsWidget().add(annotation); //保存文档 doc.saveToFile("output/Attachments.pdf"); } //读取文件到byte数组 public static byte[] toByteArray(String filePath) throws IOException { File file = new File(filePath); long fileSize = file.length(); if (fileSize > Integer.MAX_VALUE) { System.out.println("file too big..."); return null; } FileInputStream fi = new FileInputStream(file); byte[] buffer = new byte[(int) fileSize]; int offset = 0; int numRead = 0; while (offset < buffer.length && (numRead = fi.read(buffer, offset, buffer.length - offset)) >= 0) { offset += numRead; } if (offset != buffer.length) { throw new IOException("Could not completely read file " + file.getName()); } fi.close(); return buffer; } }
import com.spire.pdf.PdfDocument; import com.spire.pdf.attachments.PdfAttachmentCollection; public class DeleteAttachments { public static void main(String[] args) { //加载PDF文档 PdfDocument doc = new PdfDocument(); doc.loadFromFile("C://Users//Test1//Desktop//Attachments.pdf"); //获取附件集合(不包含注释附件) PdfAttachmentCollection attachments = doc.getAttachments(); //删除所有附件 attachments.clear(); //删除指定附件 //attachments.removeAt(0); //保存文档 doc.saveToFile("output/DeleteAttachments.pdf"); doc.close(); } }
import com.spire.pdf.PdfDocument; import com.spire.pdf.annotations.PdfAnnotation; import com.spire.pdf.annotations.PdfAnnotationCollection; import com.spire.pdf.annotations.PdfAttachmentAnnotationWidget; public class DeleteAnnotationAttachments { public static void main(String[] args) { //加载PDF文档 PdfDocument doc = new PdfDocument(); doc.loadFromFile("C://Users//Test1//Desktop//Attachments.pdf"); //遍历文档中的页 for (int i = 0; i < doc.getPages().getCount(); i++) { //获取注释集合 PdfAnnotationCollection annotationCollection = doc.getPages().get(i).getAnnotationsWidget(); //遍历注释集合 for (Object annotation: annotationCollection) { //判断注释是否为PdfAttachmentAnnotationWidget类型 if (annotation instanceof PdfAttachmentAnnotationWidget){ //删除注释附件 annotationCollection.remove((PdfAnnotation) annotation); } } } //保存文档 doc.saveToFile("output/DeleteAnnotationAttachments.pdf"); doc.close(); } }
(本文完)