3

我需要根据生成的条形码文件插入图像。

我遇到的问题是使用 iTextSharp 库时,我通常可以填写文本,例如

PdfReader pdfReader = new PdfReader(oldFile);
PdfStamper pdfStamper = new PdfStamper(pdfReader, outFile);
AcroFields fields = pdfStamper.AcroFields;
fields.SetField("topmostSubform[0].Page1[0].BARCODE[0]", "X974005-1");

虽然在pdf中有一个字段,如果我点击它,它会提示我将图像插入字段,但我似乎无法以编程方式完成此操作。基于一些谷歌搜索和偶然发现的 stackoverflow 页面,我插入了以下代码,希望它能够按需要工作:

string fieldName = "topmostSubform[0].Page1[0].BARCODE[0]";
string imageFile = "test-barcode.jpg";
AcroFields.FieldPosition fieldPosition = pdfStamper.AcroFields.GetFieldPositions(fieldName)[0];
PushbuttonField imageField = new PushbuttonField(pdfStamper.Writer, fieldPosition.position, fieldName);
imageField.Layout = PushbuttonField.LAYOUT_ICON_ONLY;
imageField.Image = iTextSharp.text.Image.GetInstance(imageFile);
imageField.ScaleIcon = PushbuttonField.SCALE_ICON_ALWAYS;
imageField.ProportionalIcon = false;
imageField.Options = BaseField.READ_ONLY;
pdfStamper.AcroFields.RemoveField(fieldName);               
pdfStamper.AddAnnotation(imageField.Field, fieldPosition.page);

我遇到的问题是,当它按预期删除现有字段时,当我打开新创建的 PDF 文件时,我看不到这个带有预期图像文件的新按钮字段,而是一个空白,但是当我通过调试执行此操作时模式我可以看到它至少获取了图像文件的正确尺寸,所以我不知道我在这里做错了什么。

请指教,谢谢。

4

1 回答 1

2

如果你阅读官方文档(即:我的书),你会发现这个例子:ReplaceIcon.cs

您正在使用删除该字段pdfStamper.AcroFields.RemoveField(fieldName);,随后您尝试使用添加新字段pdfStamper.AddAnnotation(imageField.Field, fieldPosition.page);

那是错误的。您应该使用替换字段pdfStamper.AcroFields.ReplacePushbuttonField(fieldname, imageField.Field);

ReplacePushbuttonField()方法在幕后复制了大量设置。

于 2013-03-27T15:20:50.560 回答