最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java實現(xiàn)PDF附件添加與刪除的四種實用方法

 更新時間:2026年05月17日 08:23:56   作者:用戶372157426135  
在很多專業(yè)或學術場景中,PDF 文檔常常需要附帶額外的文件,本文將介紹 四種在 Java 中添加和刪除 PDF 附件的方法,感興趣的小伙伴可以了解下

在很多專業(yè)或學術場景中,PDF 文檔常常需要附帶額外的文件,例如 Excel 表格、PPT 演示或者參考資料。能夠在 PDF 中管理附件,有助于文檔的組織、共享,也方便接收者快速訪問相關內容。

本文將介紹 四種在 Java 中添加和刪除 PDF 附件的方法,包括直接附件和注釋附件兩種類型:

  1. 向 PDF 添加普通附件
  2. 通過注釋方式附加文件
  3. 刪除普通附件
  4. 刪除注釋附件

安裝所需庫

這些示例使用 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 中管理附件:

  1. 普通附件 – 直接嵌入文件,可在附件面板查看。
  2. 注釋附件 – 在頁面上提供可點擊提示,更直觀。
  3. 刪除普通附件 – 清理不再需要的附件。
  4. 刪除注釋附件 – 清理通過注釋方式添加的附件。

到此這篇關于Java實現(xiàn)PDF附件添加與刪除的四種實用方法的文章就介紹到這了,更多相關Java添加與刪除PDF附件內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • java實現(xiàn)貪吃蛇小游戲

    java實現(xiàn)貪吃蛇小游戲

    這篇文章主要為大家詳細介紹了java實現(xiàn)貪吃蛇小游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-07-07
  • Java容器ArrayList知識點總結

    Java容器ArrayList知識點總結

    本篇文章給大家分享了Java容器ArrayList的相關知識點,對此有需要的朋友可以跟著學習參考下。
    2018-05-05
  • Java通過SMS短信平臺實現(xiàn)發(fā)短信功能 含多語言

    Java通過SMS短信平臺實現(xiàn)發(fā)短信功能 含多語言

    這篇文章主要為大家詳細介紹了Java通過SMS短信平臺實現(xiàn)發(fā)短信功能的相關資料,感興趣的小伙伴們可以參考一下
    2016-07-07
  • JAVA入門教學之快速搭建基本的springboot(從spring boot到spring cloud)

    JAVA入門教學之快速搭建基本的springboot(從spring boot到spring cloud)

    本文主要入門者介紹怎么搭建一個基礎的springboot環(huán)境,本文通過圖文并茂的形式給大家介紹從spring boot到spring cloud的完美搭建過程,適用java入門教學,需要的朋友可以參考下
    2021-02-02
  • Java中Scanner類基礎使用、可能遇到的問題及注意事項

    Java中Scanner類基礎使用、可能遇到的問題及注意事項

    Scanner類是一個用于Scanner指的是java.util包下的Scanner類,可以接收控制臺輸入的數據,這篇文章主要介紹了Java中Scanner類基礎使用、可能遇到的問題及注意事項的相關資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2025-04-04
  • Java程序中使用JavaMail發(fā)送帶圖片和附件的郵件

    Java程序中使用JavaMail發(fā)送帶圖片和附件的郵件

    這篇文章主要介紹了Java程序中使用JavaMail發(fā)送帶圖片和附件的郵件,JavaMail是專門用來處理郵件的Java API,需要的朋友可以參考下
    2015-11-11
  • Java調用WebService接口的方法

    Java調用WebService接口的方法

    這篇文章主要介紹了Java調用WebService接口的方法,實例分析了有參方法Add的使用技巧,需要的朋友可以參考下
    2015-01-01
  • mybatis中使用oracle關鍵字出錯的解決方法

    mybatis中使用oracle關鍵字出錯的解決方法

    這篇文章主要給大家介紹了關于mybatis中使用oracle關鍵字出錯的解決方法,文中通過示例代碼將解決的方法介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面來一起看看吧。
    2017-08-08
  • 在Eclipse安裝Spring boot插件的步驟(圖文)

    在Eclipse安裝Spring boot插件的步驟(圖文)

    這篇文章主要介紹了在Eclipse安裝Spring boot插件的步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-08-08
  • Java基礎之Web服務器與Http詳解

    Java基礎之Web服務器與Http詳解

    無論你是前端開發(fā)者還是后端開發(fā)者,以及測試工程師,這篇文章的知識都是你需要弄懂的。讀完這一篇文章,將全面弄懂 HTTP 協(xié)議、TCP 協(xié)議,面試官再也難不倒你相關知識
    2021-09-09

最新評論

临猗县| 沙雅县| 阿克陶县| 天津市| 赤壁市| 鹤庆县| 洪泽县| 淮安市| 锦州市| 鄂托克前旗| 墨玉县| 邯郸县| 洪雅县| 德化县| 邵东县| 清水河县| 曲松县| 修文县| 阳春市| 南澳县| 平果县| 东丽区| 沙洋县| 临潭县| 宜都市| 盐池县| 阜城县| 平阳县| 宜川县| 遵化市| 寿光市| 贡山| 新泰市| 敦煌市| 蛟河市| 昌乐县| 平顶山市| 定日县| 梁平县| 重庆市| 永川市|