Работа с большими 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)); } } } } }