我有一种情况需要将所有表单字段从一个PDF复制到另一个PDF。目的是在对基础Word页面进行小的编辑时自动覆盖字段。
我一直在使用Aspose.Pdf.Kit的试用版,我可以将除了单选按钮之外的所有内容复制到新表单中。但Aspose不支持复制单选按钮,这完全取消了它的实用性,更不用说他们的客户支持已经不足。
无论如何,我正在寻找某种支持复制所有类型表单字段的库或插件。
有没有人有任何想法?
谢谢,
〜DJ
答案 0 :(得分:4)
是的,有可能。不,setField()不会做的伎俩...麦迪逊的代码将复制字段值,但不复制字段本身。
OTOH,真的不是那么难。类似的东西:
PdfReader currentReader = new PdfReader( CURRENT_PDF_PATH ); // throws
PdfReader pdfFromWord = new PdfReader( TWEAKED_PDF_FROM_WORD_PATH ); // throws
PdfStamper stamper = new PdfStamper( currentReader , outputFile ); //throws
for( int i = 1; i <= tempalteReader.getNumberOfPages(); ++i) {
stamper.replacePage( pdfFromWord, i, i );
}
stamper.close(); // throws
我忽略了一堆异常,并且用Java编写,但C#应该看起来几乎相同。
此外,此代码忽略了某人ADDS A PAGE ...这将会非常棘手的情况。它是在页面之前还是之后添加了字段?那些页面根本没有重新流动,要求你移动字段吗?那时你真的需要一个使用Acrobat Pro的手动过程。
答案 1 :(得分:0)
我同意Oded,iTextSharp应该能够胜任。我使用的代码类似于以下代码段,并且从未遇到任何字段类型的问题。我确定混音中一定有一个单选按钮。
private void CopyFields(PdfStamper targetFile, PdfReader sourceFile){
{
foreach (DictionaryEntry de in targetFile.AcroFields.Fields)
{
string fieldName = de.Key.ToString();
target.AcroFields.SetField(fieldName, sourceFile.AcroFields.GetField(fieldName));
}
}