Как я могу установить изображение в поле PDF в существующем файле PDF? - PullRequest
6 голосов
/ 28 декабря 2011

enter image description here

Как я могу установить изображение в поле PDF в существующем файле PDF?

Я использую объект iTextSharp.

Настройка текстаполе работает нормально.Нет проблем в этом.

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

Пожалуйста, помогите.

Ответы [ 3 ]

9 голосов
/ 29 декабря 2011

Удалите текстовое поле и замените его полем с кнопками того же размера и положения. Если вы нажмете кнопку READ_ONLY, то она не может быть нажата и будет выглядеть как статичное изображение. Это сохраняет изображение, которое вы пытаетесь добавить в качестве аннотации поля, вместо добавления его к содержимому страницы.

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();
    }
}
6 голосов
/ 28 декабря 2011

Насколько мне известно, вы не можете технически установить стандартное поле PDF в качестве изображения (хотя вы можете сделать это с помощью XFA).

Однако обходной путь - просто создатьстандартное изображение iTextSharp и масштабируйте его до размеров поля формы и поместите его там, где поле.

Ниже приведено полнофункциональное приложение WinForms на C # 2010, предназначенное для iTextSharp 5.1.1.0, в котором показано, как это сделать.Он начинается с создания очень простого 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();
        }
    }
}
0 голосов
/ 03 июня 2016

Это ответ, который работает для размещения изображения в определенном месте.`

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