Skip to main content
Skip table of contents

Embedded files

Examples for adding and removing embedded files in PDFs. These examples were written in answer to the question Click How to delete attachments in PDF using iText?


addembeddedfile

JAVA

JAVA
/*
    This file is part of the iText (R) project.
    Copyright (c) 1998-2023 Apryse Group NV
    Authors: Apryse Software.

    For more information, please contact iText Software at this address:
    sales@itextpdf.com
 */
package com.itextpdf.samples.sandbox.annotations;

import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfReader;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.kernel.pdf.filespec.PdfFileSpec;

import java.io.File;

public class AddEmbeddedFile {
    public static final String DEST = "./target/sandbox/annotations/add_embedded_file.pdf";

    public static final String SRC = "./src/main/resources/pdfs/hello.pdf";

    public static void main(String[] args) throws Exception {
        File file = new File(DEST);
        file.getParentFile().mkdirs();

        new AddEmbeddedFile().manipulatePdf(DEST);
    }

    protected void manipulatePdf(String dest) throws Exception {
        PdfDocument pdfDoc = new PdfDocument(new PdfReader(SRC), new PdfWriter(dest));

        String embeddedFileName = "test.txt";
        String embeddedFileDescription = "some_test";
        byte[] embeddedFileContentBytes = "Some test".getBytes();

        // the 5th argument is the mime-type of the embedded file;
        // the 6th argument is the PdfDictionary containing embedded file's parameters;
        // the 7th argument is the AFRelationship key value.
        PdfFileSpec spec = PdfFileSpec.createEmbeddedFileSpec(pdfDoc, embeddedFileContentBytes,
                embeddedFileDescription, embeddedFileName, null, null, null);

        // This method adds file attachment at document level.
        pdfDoc.addFileAttachment("embedded_file", spec);

        pdfDoc.close();
    }
}

C#

C#
using System;
using System.IO;
using System.Text;
using iText.Kernel.Pdf;
using iText.Kernel.Pdf.Filespec;

namespace iText.Samples.Sandbox.Annotations
{
    public class AddEmbeddedFile
    {
        public static readonly String DEST = "results/sandbox/annotations/add_embedded_file.pdf";

        public static readonly String SRC = "../../../resources/pdfs/hello.pdf";

        public static void Main(String[] args)
        {
            FileInfo file = new FileInfo(DEST);
            file.Directory.Create();

            new AddEmbeddedFile().ManipulatePdf(DEST);
        }

        protected void ManipulatePdf(String dest)
        {
            PdfDocument pdfDoc = new PdfDocument(new PdfReader(SRC), new PdfWriter(dest));

            String embeddedFileName = "test.txt";
            String embeddedFileDescription = "some_test";
            byte[] embeddedFileContentBytes = Encoding.UTF8.GetBytes("Some test");

            // the 5th argument is the mime-type of the embedded file;
            // the 6th argument is the PdfDictionary containing embedded file's parameters;
            // the 7th argument is the AFRelationship key value.
            PdfFileSpec spec = PdfFileSpec.CreateEmbeddedFileSpec(pdfDoc, embeddedFileContentBytes,
                embeddedFileDescription, embeddedFileName, null, null, null);

            // This method adds file attachment at document level.
            pdfDoc.AddFileAttachment("embedded_file", spec);

            pdfDoc.Close();
        }
    }
}


addembeddedfiles

JAVA

JAVA
/*
    This file is part of the iText (R) project.
    Copyright (c) 1998-2023 Apryse Group NV
    Authors: Apryse Software.

    For more information, please contact iText Software at this address:
    sales@itextpdf.com
 */
package com.itextpdf.samples.sandbox.annotations;

import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfReader;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.kernel.pdf.filespec.PdfFileSpec;

import java.io.File;

public class AddEmbeddedFiles {
    public static final String[] ATTACHMENTS = {
            "hello", "world", "what", "is", "up"
    };

    public static final String DEST = "./target/sandbox/annotations/add_embedded_files.pdf";

    public static final String SRC = "./src/main/resources/pdfs/hello.pdf";

    public static void main(String[] args) throws Exception {
        File file = new File(DEST);
        file.getParentFile().mkdirs();

        new AddEmbeddedFiles().manipulatePdf(DEST);
    }

    protected void manipulatePdf(String dest) throws Exception {
        PdfDocument pdfDoc = new PdfDocument(new PdfReader(SRC), new PdfWriter(dest));

        for (String text : ATTACHMENTS) {
            String embeddedFileName = String.format("%s.txt", text);
            String embeddedFileDescription = String.format("Some test: %s", text);
            byte[] embeddedFileContentBytes = embeddedFileDescription.getBytes();

            // the 5th argument is the mime-type of the embedded file;
            // the 6th argument is the PdfDictionary containing embedded file's parameters;
            // the 7th argument is the AFRelationship key value.
            PdfFileSpec spec = PdfFileSpec.createEmbeddedFileSpec(pdfDoc, embeddedFileContentBytes,
                    embeddedFileDescription, embeddedFileName, null, null, null);

            // This method adds file attachment at document level.
            pdfDoc.addFileAttachment(String.format("embedded_file%s", text), spec);
        }

        pdfDoc.close();
    }
}

C#

C#
using System;
using System.IO;
using System.Text;
using iText.Kernel.Pdf;
using iText.Kernel.Pdf.Filespec;

namespace iText.Samples.Sandbox.Annotations
{
    public class AddEmbeddedFiles
    {
        public static readonly String[] ATTACHMENTS =
        {
            "hello", "world", "what", "is", "up"
        };

        public static readonly String DEST = "results/sandbox/annotations/add_embedded_files.pdf";

        public static readonly String SRC = "../../../resources/pdfs/hello.pdf";

        public static void Main(String[] args)
        {
            FileInfo file = new FileInfo(DEST);
            file.Directory.Create();

            new AddEmbeddedFiles().ManipulatePdf(DEST);
        }

        protected void ManipulatePdf(String dest)
        {
            PdfDocument pdfDoc = new PdfDocument(new PdfReader(SRC), new PdfWriter(dest));

            foreach (String text in ATTACHMENTS)
            {
                String embeddedFileName = String.Format("{0}.txt", text);
                String embeddedFileDescription = String.Format("Some test: {0}", text);
                byte[] embeddedFileContentBytes = Encoding.UTF8.GetBytes(embeddedFileDescription);

                // the 5th argument is the mime-type of the embedded file;
                // the 6th argument is the PdfDictionary containing embedded file's parameters;
                // the 7th argument is the AFRelationship key value.
                PdfFileSpec spec = PdfFileSpec.CreateEmbeddedFileSpec(pdfDoc, embeddedFileContentBytes,
                    embeddedFileDescription, embeddedFileName, null, null, null);

                // This method adds file attachment at document level.
                pdfDoc.AddFileAttachment(String.Format("embedded_file{0}", text), spec);
            }

            pdfDoc.Close();
        }
    }
}


removeembeddedfile

JAVA

JAVA
/*
    This file is part of the iText (R) project.
    Copyright (c) 1998-2023 Apryse Group NV
    Authors: Apryse Software.

    For more information, please contact iText Software at this address:
    sales@itextpdf.com
 */
package com.itextpdf.samples.sandbox.annotations;

import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfReader;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.kernel.pdf.PdfDictionary;
import com.itextpdf.kernel.pdf.PdfName;
import com.itextpdf.kernel.pdf.PdfArray;

import java.io.File;

public class RemoveEmbeddedFile {
    public static final String DEST = "./target/sandbox/annotations/remove_embedded_file.pdf";

    public static final String SRC = "./src/main/resources/pdfs/hello_with_attachment.pdf";

    public static void main(String[] args) throws Exception {
        File file = new File(DEST);
        file.getParentFile().mkdirs();

        new RemoveEmbeddedFile().manipulatePdf(DEST);
    }

    protected void manipulatePdf(String dest) throws Exception {
        PdfDocument pdfDoc = new PdfDocument(new PdfReader(SRC), new PdfWriter(dest));

        PdfDictionary root = pdfDoc.getCatalog().getPdfObject();
        PdfDictionary names = root.getAsDictionary(PdfName.Names);
        PdfDictionary embeddedFiles = names.getAsDictionary(PdfName.EmbeddedFiles);
        PdfArray namesArray = embeddedFiles.getAsArray(PdfName.Names);

        // Remove the description of the embedded file
        namesArray.remove(0);

        // Remove the reference to the embedded file.
        namesArray.remove(0);

        pdfDoc.close();
    }
}

C#

C#
using System;
using System.IO;
using iText.Kernel.Pdf;

namespace iText.Samples.Sandbox.Annotations
{
    public class RemoveEmbeddedFile
    {
        public static readonly String DEST = "results/sandbox/annotations/remove_embedded_file.pdf";

        public static readonly String SRC = "../../../resources/pdfs/hello_with_attachment.pdf";

        public static void Main(String[] args)
        {
            FileInfo file = new FileInfo(DEST);
            file.Directory.Create();

            new RemoveEmbeddedFile().ManipulatePdf(DEST);
        }

        protected void ManipulatePdf(String dest)
        {
            PdfDocument pdfDoc = new PdfDocument(new PdfReader(SRC), new PdfWriter(dest));

            PdfDictionary root = pdfDoc.GetCatalog().GetPdfObject();
            PdfDictionary names = root.GetAsDictionary(PdfName.Names);
            PdfDictionary embeddedFiles = names.GetAsDictionary(PdfName.EmbeddedFiles);
            PdfArray namesArray = embeddedFiles.GetAsArray(PdfName.Names);

            // Remove the description of the embedded file
            namesArray.Remove(0);

            // Remove the reference to the embedded file.
            namesArray.Remove(0);

            pdfDoc.Close();
        }
    }
}

removeembeddedfiles

JAVA

JAVA
/*
    This file is part of the iText (R) project.
    Copyright (c) 1998-2023 Apryse Group NV
    Authors: Apryse Software.

    For more information, please contact iText Software at this address:
    sales@itextpdf.com
 */
package com.itextpdf.samples.sandbox.annotations;

import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfReader;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.kernel.pdf.PdfDictionary;
import com.itextpdf.kernel.pdf.PdfName;

import java.io.File;

public class RemoveEmbeddedFiles {
    public static final String DEST = "./target/sandbox/annotations/remove_embedded_files.pdf";

    public static final String SRC = "./src/main/resources/pdfs/hello_with_attachment.pdf";

    public static void main(String[] args) throws Exception {
        File file = new File(DEST);
        file.getParentFile().mkdirs();

        new RemoveEmbeddedFiles().manipulatePdf(DEST);
    }

    protected void manipulatePdf(String dest) throws Exception {
        PdfDocument pdfDoc = new PdfDocument(new PdfReader(SRC), new PdfWriter(dest));

        PdfDictionary root = pdfDoc.getCatalog().getPdfObject();
        PdfDictionary names = root.getAsDictionary(PdfName.Names);

        // Remove the whole EmbeddedFiles dictionary from the Names dictionary.
        names.remove(PdfName.EmbeddedFiles);

        pdfDoc.close();
    }
}

C#

C#
using System;
using System.IO;
using iText.Kernel.Pdf;

namespace iText.Samples.Sandbox.Annotations
{
    public class RemoveEmbeddedFiles
    {
        public static readonly String DEST = "results/sandbox/annotations/remove_embedded_files.pdf";

        public static readonly String SRC = "../../../resources/pdfs/hello_with_attachment.pdf";

        public static void Main(String[] args)
        {
            FileInfo file = new FileInfo(DEST);
            file.Directory.Create();

            new RemoveEmbeddedFiles().ManipulatePdf(DEST);
        }

        protected void ManipulatePdf(String dest)
        {
            PdfDocument pdfDoc = new PdfDocument(new PdfReader(SRC), new PdfWriter(dest));

            PdfDictionary root = pdfDoc.GetCatalog().GetPdfObject();
            PdfDictionary names = root.GetAsDictionary(PdfName.Names);

            // Remove the whole EmbeddedFiles dictionary from the Names dictionary.
            names.Remove(PdfName.EmbeddedFiles);

            pdfDoc.Close();
        }
    }
}
JavaScript errors detected

Please note, these errors can depend on your browser setup.

If this problem persists, please contact our support.