Java實現(xiàn)PDF附件添加與刪除的四種實用方法
在很多專業(yè)或學術場景中,PDF 文檔常常需要附帶額外的文件,例如 Excel 表格、PPT 演示或者參考資料。能夠在 PDF 中管理附件,有助于文檔的組織、共享,也方便接收者快速訪問相關內容。
本文將介紹 四種在 Java 中添加和刪除 PDF 附件的方法,包括直接附件和注釋附件兩種類型:
- 向 PDF 添加普通附件
- 通過注釋方式附加文件
- 刪除普通附件
- 刪除注釋附件
安裝所需庫
這些示例使用 Spire.PDF for Java,它提供了加載 PDF、添加附件、管理注釋以及保存修改等功能。你可以下載 JAR 包并引入項目,也可以通過 Maven 添加依賴:
添加到項目后,就可以在 Java 中對 PDF 附件進行操作。
方法一:添加普通附件
最簡單的方式是將文件直接作為 普通附件 附加到 PDF 中,這種附件會顯示在 PDF 的附件面板中。例如,將 Excel 文件添加到報告中:
import com.spire.pdf.PdfDocument;
import com.spire.pdf.attachments.PdfAttachment;
public class AttachFilesToPdf {
public static void main(String[] args) {
// 創(chuàng)建 PDF 文檔對象
PdfDocument doc = new PdfDocument();
// 加載已有 PDF 文件
doc.loadFromFile("C:\Users\Administrator\Desktop\Sample.pdf");
// 創(chuàng)建附件對象
PdfAttachment attachment = new PdfAttachment("C:\Users\Administrator\Desktop\Data.xlsx");
// 添加附件到 PDF
doc.getAttachments().add(attachment);
// 保存更新后的 PDF
doc.saveToFile("Attachment.pdf");
// 關閉文檔
doc.close();
}
}
說明:普通附件會在附件面板中顯示,可直接打開,適用于附加數據文件或參考資料。
方法二:通過注釋附加文件
對于需要提示用戶的場景,可以通過 注釋附件 添加文件,這樣可以在頁面上顯示提示文字,引導用戶點擊打開附件。例如,在 PDF 中顯示 “Here is the report:” 并附加 PPT 文件:
import com.spire.pdf.PdfPageBase;
import com.spire.pdf.annotations.*;
import com.spire.pdf.graphics.*;
import com.spire.pdf.PdfDocument;
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;
import java.util.EnumSet;
public class AnnotationAttachment {
public static void main(String[] args) throws IOException {
PdfDocument doc = new PdfDocument();
doc.loadFromFile("C:\Users\Administrator\Desktop\Sample.pdf");
// 獲取第一頁
PdfPageBase page = doc.getPages().get(0);
// 繪制提示文字
String label = "請查看附件報告:";
PdfTrueTypeFont font = new PdfTrueTypeFont(new Font("微軟雅黑", Font.PLAIN, 13));
double x = 35;
double y = page.getActualSize().getHeight() - 220;
page.getCanvas().drawString(label, font, PdfBrushes.getRed(), x, y);
// 將外部文件轉換為字節(jié)數組
String filePath = "C:\Users\Administrator\Desktop\Report.pptx";
byte[] data = toByteArray(filePath);
// 根據文字長度計算注釋位置
Dimension2D size = font.measureString(label);
Rectangle2D bound = new Rectangle2D.Float((float) (x + size.getWidth() + 5), (float) y, 10, 15);
// 創(chuàng)建附件注釋
PdfAttachmentAnnotation annotation = new PdfAttachmentAnnotation(bound, filePath, data);
annotation.setColor(new PdfRGBColor(new Color(0, 128, 128)));
annotation.setFlags(EnumSet.of(PdfAnnotationFlags.Default));
annotation.setIcon(PdfAttachmentIcon.Graph);
annotation.setText("點擊此處打開附件");
// 添加注釋到頁面
page.getAnnotationsWidget().add(annotation);
// 保存文檔
doc.saveToFile("Attachments.pdf");
doc.close();
}
// 將文件轉換為字節(jié)數組
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("文件過大...");
return null;
}
FileInputStream fi = new FileInputStream(file);
byte[] buffer = new byte[(int) fileSize];
int offset = 0;
int numRead;
while (offset < buffer.length
&& (numRead = fi.read(buffer, offset, buffer.length - offset)) >= 0) {
offset += numRead;
}
if (offset != buffer.length) {
throw new IOException("無法完整讀取文件 " + file.getName());
}
fi.close();
return buffer;
}
}
說明:注釋附件可以在頁面上提供可點擊提示,更適合需要交互提示的文檔,例如報告或展示材料。
方法三:刪除普通附件
如果 PDF 中的附件已經不再需要,可以通過附件集合刪除:
import com.spire.pdf.PdfDocument;
import com.spire.pdf.attachments.PdfAttachmentCollection;
public class RemoveAttachments {
public static void main(String[] args) {
PdfDocument doc = new PdfDocument();
doc.loadFromFile("C:\Users\Administrator\Desktop\Attachments.pdf");
// 獲取普通附件集合(不包含注釋附件)
PdfAttachmentCollection attachments = doc.getAttachments();
// 刪除所有附件
attachments.clear();
// 或者刪除指定附件
// attachments.removeAt(0);
// 保存更新后的 PDF
doc.saveToFile("output/DeleteAttachments.pdf");
doc.close();
}
}
說明:只會刪除普通附件,不影響注釋附件。
方法四:刪除注釋附件
如果 PDF 中的附件是通過 注釋方式添加 的,需要遍歷頁面注釋并刪除:
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 RemoveAnnotationAttachments {
public static void main(String[] args) {
PdfDocument doc = new PdfDocument();
doc.loadFromFile("C:\Users\Administrator\Desktop\Attachments.pdf");
// 遍歷每一頁
for (int i = 0; i < doc.getPages().getCount(); i++) {
PdfAnnotationCollection annotationCollection = doc.getPages().get(i).getAnnotationsWidget();
// 遍歷注釋并刪除附件注釋
for (Object annotation : annotationCollection) {
if (annotation instanceof PdfAttachmentAnnotationWidget) {
annotationCollection.remove((PdfAnnotation) annotation);
}
}
}
// 保存文檔
doc.saveToFile("output/DeleteAnnotationAttachments.pdf");
doc.close();
}
}
說明:該方法只會刪除注釋附件,普通附件不會受到影響。
總結
通過這四種方法,我們可以靈活地在 PDF 中管理附件:
- 普通附件 – 直接嵌入文件,可在附件面板查看。
- 注釋附件 – 在頁面上提供可點擊提示,更直觀。
- 刪除普通附件 – 清理不再需要的附件。
- 刪除注釋附件 – 清理通過注釋方式添加的附件。
到此這篇關于Java實現(xiàn)PDF附件添加與刪除的四種實用方法的文章就介紹到這了,更多相關Java添加與刪除PDF附件內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Java通過SMS短信平臺實現(xiàn)發(fā)短信功能 含多語言
這篇文章主要為大家詳細介紹了Java通過SMS短信平臺實現(xiàn)發(fā)短信功能的相關資料,感興趣的小伙伴們可以參考一下2016-07-07
JAVA入門教學之快速搭建基本的springboot(從spring boot到spring cloud)
本文主要入門者介紹怎么搭建一個基礎的springboot環(huán)境,本文通過圖文并茂的形式給大家介紹從spring boot到spring cloud的完美搭建過程,適用java入門教學,需要的朋友可以參考下2021-02-02
Java中Scanner類基礎使用、可能遇到的問題及注意事項
Scanner類是一個用于Scanner指的是java.util包下的Scanner類,可以接收控制臺輸入的數據,這篇文章主要介紹了Java中Scanner類基礎使用、可能遇到的問題及注意事項的相關資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下2025-04-04
Java程序中使用JavaMail發(fā)送帶圖片和附件的郵件
這篇文章主要介紹了Java程序中使用JavaMail發(fā)送帶圖片和附件的郵件,JavaMail是專門用來處理郵件的Java API,需要的朋友可以參考下2015-11-11
在Eclipse安裝Spring boot插件的步驟(圖文)
這篇文章主要介紹了在Eclipse安裝Spring boot插件的步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-08-08

