Работа с большими PDF документами в .NET
5 февраля 2021
/// <summary>
/// Adds the large file attachment to PDF document.
/// </summary>
/// <param name="pdfFilename">The PDF filename.</param>
/// <param name="attachmentFilename">The attachment filename.</param>
public static void AddLargeAttachment(string pdfFilename, string attachmentFilename)
{
// open PDF document
using (Vintasoft.Imaging.Pdf.PdfDocument document = new Vintasoft.Imaging.Pdf.PdfDocument(pdfFilename))
{
if (document.EmbeddedFiles == null)
document.EmbeddedFiles = new Vintasoft.Imaging.Pdf.Tree.PdfEmbeddedFileSpecificationDictionary(document);
// open attachment file
using (System.IO.Stream attachmentStream = System.IO.File.OpenRead(attachmentFilename))
{
// set ZIP compression level to 2 (fast)
Vintasoft.Imaging.Pdf.PdfCompressionSettings compressionSettings = new Vintasoft.Imaging.Pdf.PdfCompressionSettings();
compressionSettings.ZipCompressionLevel = 2;
// create PDF embedded file
Vintasoft.Imaging.Pdf.Tree.PdfEmbeddedFile embeddedFile = new Vintasoft.Imaging.Pdf.Tree.PdfEmbeddedFile(
document, attachmentStream, false, Vintasoft.Imaging.Pdf.PdfCompression.Zip, compressionSettings);
// create PDF embedded file specification
Vintasoft.Imaging.Pdf.Tree.PdfEmbeddedFileSpecification fileSpecification =
new Vintasoft.Imaging.Pdf.Tree.PdfEmbeddedFileSpecification(System.IO.Path.GetFileName(attachmentFilename), embeddedFile);
// add PDF embedded file specification to PDF document
document.EmbeddedFiles.Add(fileSpecification);
// save changes in PDF document (file attachment will be encoded during saving of PDF document)
document.SaveChanges();
}
}
}
/// <summary>
/// Extracts the file attachments of PDF document in specified folder.
/// </summary>
/// <param name="pdfFilename">The PDF filename.</param>
/// <param name="attachmentOutputDir">The attachment output directory.</param>
public static void ExtractFileAttachments(string pdfFilename, string attachmentOutputDir)
{
// open PDF document
using (Vintasoft.Imaging.Pdf.PdfDocument document = new Vintasoft.Imaging.Pdf.PdfDocument(pdfFilename))
{
// if PDF document has embedded files
if (document.EmbeddedFiles != null)
{
// for each file embedded in PDF document
foreach (Vintasoft.Imaging.Pdf.Tree.PdfEmbeddedFileSpecification fileSpecification in document.EmbeddedFiles.Values)
{
if (fileSpecification.EmbeddedFile != null)
{
// save embedded file resource to a file in output directory
string filename = System.IO.Path.GetFileName(fileSpecification.Filename);
fileSpecification.EmbeddedFile.Save(System.IO.Path.Combine(attachmentOutputDir, filename));
}
}
}
}
}
/// <summary>
/// Adds the file attachment to PDF document.
/// </summary>
/// <param name="pdfFilename">The PDF filename.</param>
/// <param name="attachmentFilename">The attachment filename.</param>
public static void AddAttachment(string pdfFilename, string attachmentFilename)
{
// open PDF document
using (Vintasoft.Imaging.Pdf.PdfDocument document = new Vintasoft.Imaging.Pdf.PdfDocument(pdfFilename))
{
if (document.EmbeddedFiles == null)
document.EmbeddedFiles = new Vintasoft.Imaging.Pdf.Tree.PdfEmbeddedFileSpecificationDictionary(document);
// create PDF embedded file (file attachment will be encoded in constructor of PdfEmbeddedFile class)
Vintasoft.Imaging.Pdf.Tree.PdfEmbeddedFile embeddedFile = new Vintasoft.Imaging.Pdf.Tree.PdfEmbeddedFile(
document, attachmentFilename, Vintasoft.Imaging.Pdf.PdfCompression.Zip);
// create PDF embedded file specification
Vintasoft.Imaging.Pdf.Tree.PdfEmbeddedFileSpecification fileSpecification =
new Vintasoft.Imaging.Pdf.Tree.PdfEmbeddedFileSpecification(System.IO.Path.GetFileName(attachmentFilename), embeddedFile);
// add PDF embedded file specification to PDF document
document.EmbeddedFiles.Add(fileSpecification);
// save PDF document
document.SaveChanges();
}
}
/// <summary>
/// Extracts the file attachments of PDF document in specified folder.
/// </summary>
/// <param name="pdfFilename">The PDF filename.</param>
/// <param name="attachmentOutputDir">The attachment output directory.</param>
public static void ExtractFileAttachments(string pdfFilename, string attachmentOutputDir)
{
// open PDF document
using (Vintasoft.Imaging.Pdf.PdfDocument document = new Vintasoft.Imaging.Pdf.PdfDocument(pdfFilename))
{
// if PDF document has embedded files
if (document.EmbeddedFiles != null)
{
// for each file embedded in PDF document
foreach (Vintasoft.Imaging.Pdf.Tree.PdfEmbeddedFileSpecification fileSpecification in document.EmbeddedFiles.Values)
{
if (fileSpecification.EmbeddedFile != null)
{
// save embedded file resource to a file in output directory
string filename = System.IO.Path.GetFileName(fileSpecification.Filename);
fileSpecification.EmbeddedFile.Save(System.IO.Path.Combine(attachmentOutputDir, filename));
}
}
}
}
}