iTextSharp添加现有页面的新实例

编程入门 行业动态 更新时间:2024-10-27 20:37:29
本文介绍了iTextSharp添加现有页面的新实例的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

假设我有一个三页PDF,其中三个都有AcroFields。我需要能够生成一个新的PDF,第2页重复N次。第2页的每个新实例都需要修改字段名称,以使它们与第2页的其他实例不同。在此之前解决此问题的人是否可以提供语法示例?

Let's say I have a three page PDF and all three of them have AcroFields. I need to be able to generate a new PDF with page 2 repeated N number of times. Each new instance of page 2 will need to have the field names modified to make them distinct from the other instances of page 2. Can someone who's solved this problem before provide a syntax example?

推荐答案

这样可以生成一个大文件。我想这是因为第2页上的图像重复多次而不是重复使用。

This works but generates a large file. I guess it is because the image on page 2 is duplicated many times instead of being reused.

public static void ExpandRepeatingPages(string sourcePdfPath, string outputPdfPath) { /* figure out how many pages we are working with */ var transientPdfReader = new PdfReader(sourcePdfPath); var numberOfPages = transientPdfReader.NumberOfPages; transientPdfReader.Close(); var outputFileStream = new FileStream(outputPdfPath, FileMode.Create); var pdfCopyFields = new PdfCopyFields(outputFileStream); foreach (var pageNumber in Enumerable.Range(1, numberOfPages)) { var pdfBytes = ExtractPageToBytes(sourcePdfPath, pageNumber); var pdfReader = new PdfReader(pdfBytes); pdfCopyFields.AddDocument(pdfReader); pdfReader.Close(); if (pageNumber == 2) { foreach (var extraPageNumber in Enumerable.Range(2, 200)) { var extraPagePdfBytes = RenamePageFields(pdfBytes, extraPageNumber); pdfReader = new PdfReader(extraPagePdfBytes); pdfCopyFields.AddDocument(pdfReader); pdfReader.Close(); } } } pdfCopyFields.Close(); } public static byte[] ExtractPageToBytes(string sourcePdfPath, int pageNumber) { using (var memoryStream = new MemoryStream()) { var pageNumbers = new System.Collections.ArrayList { pageNumber }; var pdfReader = new PdfReader(sourcePdfPath); var pdfCopyFields = new PdfCopyFields(memoryStream); pdfReader.SelectPages(pageNumbers); pdfCopyFields.AddDocument(pdfReader); pdfReader.RemoveUnusedObjects(); pdfCopyFields.Close(); pdfReader.Close(); return memoryStream.ToArray(); } } private static byte[] RenamePageFields(byte[] pdfBytes, int pageNumber) { using (var memoryStream = new MemoryStream()) { var pdfReader = new PdfReader(pdfBytes); var pdfStamper = new PdfStamper(pdfReader, memoryStream); var acroFields = pdfStamper.AcroFields; var fieldNames = acroFields.Fields.Keys.Cast<String>().ToList(); foreach (var fieldName in fieldNames) { var newName = String.Format("{0}_{1}", fieldName, pageNumber); acroFields.RenameField(fieldName, newName); } pdfStamper.Close(); pdfReader.Close(); return memoryStream.ToArray(); } }

更多推荐

iTextSharp添加现有页面的新实例

本文发布于:2023-11-03 06:21:39,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1554435.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:实例   页面   iTextSharp

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!