VintaSoft Imaging .NET SDK 15.1: Документация для .NET разработчика
В этом разделе
PDF: Работа со встроенными файлами PDF документа
В этом разделе
PDF документ может содержать встроенные файлы. Например, портфолио в формате PDF включает в себя другие документы в формате PDF в качестве встроенных файлов.
Класс PdfEmbeddedFile представляет файл, который хранится в PDF документе, и позволяет:
Все встроенные файлы PDF документа могут быть получены с помощью свойства PdfDocument.EmbeddedFiles.

Вот C#/VB.NET код, который демонстрирует, как получить информацию обо всех встроенных файлах PDF документа:
/// <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 представляет собой словарь встроенных файлов, которые хранятся в PDF документе, и позволяет добавлять или удалять встроенные файлы.

Вот C#/VB.NET код, который демонстрирует, как вставить файл в PDF документ:
/// <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


Вот C#/VB.NET код, который демонстрирует, как удалить встроенный файл из PDF документа:
/// <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