C# 如何将图像设置为现有pdf文件中的pdf字段?
如何将图像设置为现有pdf文件中的pdf字段 我用的是锋利的东西 设置文本字段工作正常。没问题C# 如何将图像设置为现有pdf文件中的pdf字段?,c#,itextsharp,C#,Itextsharp,如何将图像设置为现有pdf文件中的pdf字段 我用的是锋利的东西 设置文本字段工作正常。没问题 pdfFormFields.SetField("Firstname", "Mujeeb"); 请帮忙 据我所知,从技术上讲,您无法将标准PDF字段设置为图像(尽管您可以使用XFA实现这一点) 不过,解决方法是只创建一个标准的iTextSharp图像,并将其缩放到表单字段的尺寸,然后将其放置在字段所在的位置 下面是一个以iTextSharp 5.1.1.0为目标的完整的C#2010 WinFor
pdfFormFields.SetField("Firstname", "Mujeeb");
请帮忙 据我所知,从技术上讲,您无法将标准PDF字段设置为图像(尽管您可以使用XFA实现这一点) 不过,解决方法是只创建一个标准的iTextSharp图像,并将其缩放到表单字段的尺寸,然后将其放置在字段所在的位置 下面是一个以iTextSharp 5.1.1.0为目标的完整的C#2010 WinForms应用程序,它展示了如何做到这一点。它首先创建一个非常简单的PDF,上面有一个名为“firstName”的表单字段。然后,程序的第二部分获取该字段的位置和尺寸,并在其中放置一个适当缩放的图像。有关更多详细信息,请参见代码中的注释
using System;
using System.ComponentModel;
using System.Text;
using System.Windows.Forms;
using System.IO;
using iTextSharp.text;
using iTextSharp.text.pdf;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
string baseFile = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "StartFile.pdf");
string secondFile = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "SecondFile.pdf");
string TestImage = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "Test.jpg");
//Create a very simple PDF with a single form field called "firstName"
using (FileStream fs = new FileStream(baseFile, FileMode.Create, FileAccess.Write, FileShare.None))
{
using (Document doc = new Document(PageSize.LETTER))
{
using (PdfWriter writer = PdfWriter.GetInstance(doc, fs))
{
doc.Open();
writer.AddAnnotation(new TextField(writer, new iTextSharp.text.Rectangle(0, 0, 100, 100), "firstName").GetTextField());
doc.Close();
}
}
}
//Create a second file "filling out" the form above
using (FileStream fs = new FileStream(secondFile, FileMode.Create, FileAccess.Write, FileShare.None))
{
using (PdfStamper stamper = new PdfStamper(new PdfReader(baseFile), fs))
{
//GetFieldPositions returns an array of field positions if you are using 5.0 or greater
//This line does a lot and should really be broken up for null-checking
iTextSharp.text.Rectangle rect = stamper.AcroFields.GetFieldPositions("firstName")[0].position;
//Create an image
iTextSharp.text.Image img = iTextSharp.text.Image.GetInstance(TestImage);
//Scale it
img.ScaleAbsolute(rect.Width, rect.Height);
//Position it
img.SetAbsolutePosition(rect.Left, rect.Bottom);
//Add it to page 1 of the document
stamper.GetOverContent(1).AddImage(img);
stamper.Close();
}
}
this.Close();
}
}
}
删除文本字段,并将其替换为具有相同大小和位置的按钮字段。如果您将该按钮设置为只读,则无法按下该按钮,它将看起来像一个静态图像。这会将您尝试添加的图像保留为字段批注,而不是将其添加到页面内容中
void ConvertTextFieldToImage(string inputFile, string fieldName, string imageFile, string outputFile)
{
using (PdfStamper stamper = new PdfStamper(new PdfReader(inputFile), File.Create(outputFile)))
{
AcroFields.FieldPosition fieldPosition = stamper.AcroFields.GetFieldPositions(fieldName)[0];
PushbuttonField imageField = new PushbuttonField(stamper.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;
stamper.AcroFields.RemoveField(fieldName);
stamper.AddAnnotation(imageField.Field, fieldPosition.page);
stamper.Close();
}
}
这就是将图像放置在特定位置的答案
using (PdfStamper stamper = new PdfStamper(new PdfReader(fromFilePath), File.Create("toFilePath")))
{
AcroFields.FieldPosition fieldPosition = stamper.AcroFields.GetFieldPositions("btn1")[0];
PushbuttonField imageField = new PushbuttonField(stamper.Writer, fieldPosition.position, "btn1Replaced");
imageField.Layout = PushbuttonField.LAYOUT_ICON_ONLY;
imageField.Image = iTextSharp.text.Image.GetInstance(ImageLocationPath);
imageField.ScaleIcon = PushbuttonField.SCALE_ICON_ALWAYS;
imageField.ProportionalIcon = false;
imageField.Options = BaseField.READ_ONLY;
stamper.AcroFields.RemoveField("btn1");
stamper.AddAnnotation(imageField.Field, fieldPosition.page);
stamper.Close();
}