试图在c#中将图像插入pdf

时间:2013-03-27 14:34:05

标签: c# image pdf itextsharp

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

我遇到的问题是使用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文件时,我没有看到带有预期图像文件的新按钮字段,而是作为空白但是当我执行时通过调试模式,我可以看到它至少拾取了图像文件的正确尺寸,所以我不知道我在这里做错了什么。

请指教,谢谢。

1 个答案:

答案 0 :(得分:1)

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

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

添加新字段

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

替换该字段

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