and*_*uha 11 c# pdf itextsharp
我正在使用iTextSharp将多个pdf文件合并到一个文件中.
我正在使用iTextSharp官方教程中描述的方法,特别是在这里,它通过PdfWriter和PdfImportedPage逐页合并文件.
原来我需要合并的一些文件是填写PDF表单并使用这种合并表单数据的方法丢失了.
我看到几个使用PdfStamper填写表单并展平它们的例子.
我找不到的,是一种压缩已填写的PDF表格的方法,希望将其与其他文件合并,而不保存它首先展平版本.
谢谢
只是在PdfStamper上设置.FormFlattening还不够......我最终使用了PdfReader,其中包含文件内容的字节数组,用于标记/压平数据以获取其中的字节数组以放入新的PdfReader.以下是我的表现.现在很棒.
private void AppendPdfFile(FileDTO file, PdfContentByte cb, iTextSharp.text.Document printDocument, PdfWriter iwriter)
{
var reader = new PdfReader(file.FileContents);
if (reader.AcroForm != null)
reader = new PdfReader(FlattenPdfFormToBytes(reader,file.FileID));
AppendFilePages(reader, printDocument, iwriter, cb);
}
private byte[] FlattenPdfFormToBytes(PdfReader reader, Guid fileID)
{
var memStream = new MemoryStream();
var stamper = new PdfStamper(reader, memStream) {FormFlattening = true};
stamper.Close();
return memStream.ToArray();
}
Run Code Online (Sandbox Code Playgroud)
小智 5
我认为这个问题与此问题相同:展平后AcroForm值丢失
根据答案,这应该做的伎俩:
pdfStamper.FormFlattening = true;
pdfStamper.AcroFields.GenerateAppearances = true;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
17977 次 |
| 最近记录: |