我需要根据生成的条形码文件插入图像。
我遇到的问题是使用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文件时,我没有看到带有预期图像文件的新按钮字段,而是作为空白但是当我执行时通过调试模式,我可以看到它至少拾取了图像文件的正确尺寸,所以我不知道我在这里做错了什么。
请指教,谢谢。
答案 0 :(得分:1)
如果你阅读官方文档(即:my book),你会发现这个例子:ReplaceIcon.cs
您正在使用pdfStamper.AcroFields.RemoveField(fieldName);
删除该字段,然后尝试使用pdfStamper.AddAnnotation(imageField.Field, fieldPosition.page);
那是错的。您应该使用pdfStamper.AcroFields.ReplacePushbuttonField(fieldname, imageField.Field);
ReplacePushbuttonField()
方法在幕后复制了大量设置。