How to install an image in a pdf field in an existing pdf file?

enter image description here

How to install an image in a pdf field in an existing pdf file?

I am using an iTextSharp object.

Setting the text box works fine. No problems.

pdfFormFields.SetField("Firstname", "Mujeeb"); 

Please, help.

+6
source share
3 answers

Delete the β€œText” field and replace it with the Button window field of the same size and position. If you click the "READ_ONLY" button, it cannot be pressed and it will look like a static image. This allows you to save the image that you are trying to add as a field annotation, rather than adding it to the page content.

 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(); } } 
+8
source

As far as I know, you cannot technically set the standard PDF field as an image (although you can do it using XFA).

However, a workaround is to simply create a standard iTextSharp image and scale it to the size of the form field and place it where that field is.

Below is a complete working C # 2010 WinForms application targeting iTextSharp 5.1.1.0, which shows how to do this. It starts by creating a very simple PDF file with one form field called "firstName". The second part of the program then obtains the position and dimensions of this field and places the image scaled accordingly. See comments in the code for more details.

 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(); } } } 
+4
source

This is an answer that works to place an image in a specific place. `

  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(); } 
0
source

Source: https://habr.com/ru/post/904600/


All Articles