VintaSoft Imaging .NET SDK 12.4: Documentation for .NET developer
In This Topic
    PDF: Working with embedded files of PDF document
    In This Topic
    PDF document may include embedded files. For example, a PDF portfolio includes other PDF documents as embedded files.

    PdfEmbeddedFile class represents a file, which is stored in PDF document, and allows to:

    All embedded files of PDF document can be gathered using PdfDocument.EmbeddedFiles property.

    Here is C#/VB.NET code that demonstrates how to obtain information about all embedded files of PDF document:
    /// <summary>
    /// Prints information about all embedded files of PDF document.
    /// </summary>
    /// <param name="pdfFilename">The filename of PDF document.</param>
    public static void PrintEmbeddedFilesInfo(string pdfFilename)
    {
        // open PDF document
        using (Vintasoft.Imaging.Pdf.PdfDocument document = 
            new Vintasoft.Imaging.Pdf.PdfDocument(pdfFilename, true))
        {
            // get the dictionary of embedded file specifications
            Vintasoft.Imaging.Pdf.Tree.PdfEmbeddedFileSpecificationDictionary embeddedFiles = document.EmbeddedFiles;
            // if dictionary is empty
            if (embeddedFiles == null || embeddedFiles.Count == 0)
            {
                System.Console.WriteLine("No embedded files.");
            }
            // if dictionary is NOT empty
            else
            {
                System.Console.WriteLine(string.Format("There are {0} embedded files.", embeddedFiles.Count));
                // counter of embedded files
                int counter = 1;
                // for each name-specification pair
                foreach (System.Collections.Generic.KeyValuePair<string, Vintasoft.Imaging.Pdf.Tree.PdfEmbeddedFileSpecification> 
                    embeddedFileInfo in embeddedFiles)
                {
                    // write name of the file specification
                    System.Console.WriteLine(string.Format("{0}) Name: \"{1}\"", counter++, embeddedFileInfo.Key));
                    // get the file specification
                    Vintasoft.Imaging.Pdf.Tree.PdfEmbeddedFileSpecification embeddedFileSpecification = embeddedFileInfo.Value;
                    // write description of the file specification
                    System.Console.WriteLine(string.Format("   Description: \"{0}\"", embeddedFileSpecification.Description));
                    // write file name
                    System.Console.WriteLine(string.Format("   Filename: \"{0}\"", embeddedFileSpecification.Filename));
                    // write file system
                    System.Console.WriteLine(string.Format("   FileSystem: \"{0}\"", embeddedFileSpecification.FileSystem));
                    // get the embedded file
                    Vintasoft.Imaging.Pdf.Tree.PdfEmbeddedFile embeddedFile = embeddedFileSpecification.EmbeddedFile;
                    System.Console.WriteLine(string.Format("   EmbeddedFile:"));
                    // write compression of the embedded file
                    System.Console.WriteLine(string.Format("      Compression: {0}", embeddedFile.Compression));
                    // write creation date of the embedded file
                    System.Console.WriteLine(string.Format("      CreationDate: {0}", embeddedFile.CreationDate));
                    // write modification date of the embedded file
                    System.Console.WriteLine(string.Format("      ModifyDate: {0}", embeddedFile.ModifyDate));
                    // write uncompressed length of the embedded file
                    System.Console.WriteLine(string.Format("      UncompressedLength: {0} bytes", embeddedFile.UncompressedLength));
                    // write compressed length of the embedded file
                    System.Console.WriteLine(string.Format("      CompressedLength: {0} bytes", embeddedFile.Length));
                    System.Console.WriteLine();
                }
            }
        }
    }
    
    ''' <summary>
    ''' Prints information about all embedded files of PDF document.
    ''' </summary>
    ''' <param name="pdfFilename">The filename of PDF document.</param>
    Public Shared Sub PrintEmbeddedFilesInfo(pdfFilename As String)
        ' open PDF document
        Using document As New Vintasoft.Imaging.Pdf.PdfDocument(pdfFilename, True)
            ' get the dictionary of embedded file specifications
            Dim embeddedFiles As Vintasoft.Imaging.Pdf.Tree.PdfEmbeddedFileSpecificationDictionary = document.EmbeddedFiles
            ' if dictionary is empty
            If embeddedFiles Is Nothing OrElse embeddedFiles.Count = 0 Then
                System.Console.WriteLine("No embedded files.")
            Else
                ' if dictionary is NOT empty
                System.Console.WriteLine(String.Format("There are {0} embedded files.", embeddedFiles.Count))
                ' counter of embedded files
                Dim counter As Integer = 1
                ' for each name-specification pair
                For Each embeddedFileInfo As System.Collections.Generic.KeyValuePair(Of String, Vintasoft.Imaging.Pdf.Tree.PdfEmbeddedFileSpecification) In embeddedFiles
                    ' write name of the file specification
                    System.Console.WriteLine(String.Format("{0}) Name: ""{1}""", System.Math.Max(System.Threading.Interlocked.Increment(counter),counter - 1), embeddedFileInfo.Key))
                    ' get the file specification
                    Dim embeddedFileSpecification As Vintasoft.Imaging.Pdf.Tree.PdfEmbeddedFileSpecification = embeddedFileInfo.Value
                    ' write description of the file specification
                    System.Console.WriteLine(String.Format("   Description: ""{0}""", embeddedFileSpecification.Description))
                    ' write file name
                    System.Console.WriteLine(String.Format("   Filename: ""{0}""", embeddedFileSpecification.Filename))
                    ' write file system
                    System.Console.WriteLine(String.Format("   FileSystem: ""{0}""", embeddedFileSpecification.FileSystem))
                    ' get the embedded file
                    Dim embeddedFile As Vintasoft.Imaging.Pdf.Tree.PdfEmbeddedFile = embeddedFileSpecification.EmbeddedFile
                    System.Console.WriteLine(String.Format("   EmbeddedFile:"))
                    ' write compression of the embedded file
                    System.Console.WriteLine(String.Format("      Compression: {0}", embeddedFile.Compression))
                    ' write creation date of the embedded file
                    System.Console.WriteLine(String.Format("      CreationDate: {0}", embeddedFile.CreationDate))
                    ' write modification date of the embedded file
                    System.Console.WriteLine(String.Format("      ModifyDate: {0}", embeddedFile.ModifyDate))
                    ' write uncompressed length of the embedded file
                    System.Console.WriteLine(String.Format("      UncompressedLength: {0} bytes", embeddedFile.UncompressedLength))
                    ' write compressed length of the embedded file
                    System.Console.WriteLine(String.Format("      CompressedLength: {0} bytes", embeddedFile.Length))
                    System.Console.WriteLine()
                Next
            End If
        End Using
    End Sub
    



    PdfEmbeddedFileSpecificationDictionary class represents a dictionary of embedded files, which are stored in PDF document, and allows to add or remove embedded files.

    Here is C#/VB.NET code that demonstrates how to embed file into PDF document:
    /// <summary>
    /// Embeds specified file into specified PDF document.
    /// </summary>
    /// <param name="pdfFilename">The filename of PDF document.</param>
    /// <param name="embeddingFilename">The filename of embedding file.</param>
    public static void EmbedFileIntoPdfDocument(string pdfFilename, string embeddingFilename)
    {
        // open PDF document
        using (Vintasoft.Imaging.Pdf.PdfDocument document = 
            new Vintasoft.Imaging.Pdf.PdfDocument(pdfFilename))
        {
            // if embedded files are absent
            if (document.EmbeddedFiles == null)
                // create new dictionary
                document.EmbeddedFiles = 
                    new Vintasoft.Imaging.Pdf.Tree.PdfEmbeddedFileSpecificationDictionary(document);
    
            // create embedded file instance
            Vintasoft.Imaging.Pdf.Tree.PdfEmbeddedFile embeddedFile = 
                new Vintasoft.Imaging.Pdf.Tree.PdfEmbeddedFile(
                    document, embeddingFilename, Vintasoft.Imaging.Pdf.PdfCompression.Zip);
            // create embedded file specification
            Vintasoft.Imaging.Pdf.Tree.PdfEmbeddedFileSpecification fileSpecification = 
                new Vintasoft.Imaging.Pdf.Tree.PdfEmbeddedFileSpecification(embeddingFilename, embeddedFile);
            // set description of the embedded file specification
            fileSpecification.Description = "Test embedding";
            // add the embedded file specification to the dictionary
            document.EmbeddedFiles.Add(embeddingFilename, fileSpecification);
            // save changes to the source
            document.SaveChanges();
        }
    }
    
    ''' <summary>
    ''' Embeds specified file into specified PDF document.
    ''' </summary>
    ''' <param name="pdfFilename">The filename of PDF document.</param>
    ''' <param name="embeddingFilename">The filename of embedding file.</param>
    Public Shared Sub EmbedFileIntoPdfDocument(pdfFilename As String, embeddingFilename As String)
        ' open PDF document
        Using document As New Vintasoft.Imaging.Pdf.PdfDocument(pdfFilename)
            ' if embedded files are absent
            If document.EmbeddedFiles Is Nothing Then
                ' create new dictionary
                document.EmbeddedFiles = New Vintasoft.Imaging.Pdf.Tree.PdfEmbeddedFileSpecificationDictionary(document)
            End If
    
            ' create embedded file instance
            Dim embeddedFile As New Vintasoft.Imaging.Pdf.Tree.PdfEmbeddedFile(document, embeddingFilename, Vintasoft.Imaging.Pdf.PdfCompression.Zip)
            ' create embedded file specification
            Dim fileSpecification As New Vintasoft.Imaging.Pdf.Tree.PdfEmbeddedFileSpecification(embeddingFilename, embeddedFile)
            ' set description of the embedded file specification
            fileSpecification.Description = "Test embedding"
            ' add the embedded file specification to the dictionary
            document.EmbeddedFiles.Add(embeddingFilename, fileSpecification)
            ' save changes to the source
            document.SaveChanges()
        End Using
    End Sub
    


    Here is C#/VB.NET code that demonstrates how to remove embedded file from PDF document:
    /// <summary>
    /// Removes the embedded file from PDF document by the name of embedded file specification.
    /// </summary>
    /// <param name="pdfFilename">The filename of PDF document.</param>
    /// <param name="embeddedFileName">Name of the embedded file specification.</param>
    /// <returns><b>true</b> if the file is found and successfully removed; otherwise, <b>false</b>.</returns>
    public static bool RemoveEmbeddedFileFromPdfDocument(string pdfFilename, string embeddedFileName)
    {
        // open PDF document
        using (Vintasoft.Imaging.Pdf.PdfDocument document = new Vintasoft.Imaging.Pdf.PdfDocument(pdfFilename))
        {
            // if embedded files are absent
            if (document.EmbeddedFiles == null || document.EmbeddedFiles.Count == 0)
                return false;
            // try to remove embedded file specification
            if (!document.EmbeddedFiles.Remove(embeddedFileName))
                return false;
            // save changes to the source
            document.SaveChanges();
            return true;
        }
    }
    
    ''' <summary>
    ''' Removes the embedded file from PDF document by the name of embedded file specification.
    ''' </summary>
    ''' <param name="pdfFilename">The filename of PDF document.</param>
    ''' <param name="embeddedFileName">Name of the embedded file specification.</param>
    ''' <returns><b>true</b> if the file is found and successfully removed; otherwise, <b>false</b>.</returns>
    Public Shared Function RemoveEmbeddedFileFromPdfDocument(pdfFilename As String, embeddedFileName As String) As Boolean
        ' open PDF document
        Using document As New Vintasoft.Imaging.Pdf.PdfDocument(pdfFilename)
            ' if embedded files are absent
            If document.EmbeddedFiles Is Nothing OrElse document.EmbeddedFiles.Count = 0 Then
                Return False
            End If
            ' try to remove embedded file specification
            If Not document.EmbeddedFiles.Remove(embeddedFileName) Then
                Return False
            End If
            ' save changes to the source
            document.SaveChanges()
            Return True
        End Using
    End Function