Как я могу читать поля формы PDF [дублировать]

Похоже, cards[] является массивом String, и вы пытаетесь преобразовать Ace of Clubs в Integer.

int first_value = Integer.parseInt(cards[index]);
12
задан DLeh 18 October 2016 в 04:48
поделиться

5 ответов

Вам нужно будет узнать имена полей в форме PDF. Получите поля и затем прочитайте их значение.

string pdfTemplate = "my.pdf";
PdfReader pdfReader = new PdfReader(pdfTemplate);
AcroFields fields = pdfReader.AcroFields.Fields;
string val = fields.GetField("fieldname");

Очевидно, что в приведенном выше коде имя поля - это имя поля формы PDF, а метод GetField возвращает строковое представление этого значения. Здесь - статья с примером кода, который вы, вероятно, могли бы использовать. Он показывает, как вы можете читать и писать поля формы с помощью iTextSharp.

16
ответ дан RivieraKid 19 August 2018 в 10:33
поделиться
  • 1
    это работает как шарм ... Интересно, почему я не изучал эту функцию ... когда я пробовал каждую другую функцию :). Большое спасибо .. я спас мои выходные. – Bhuvan 31 July 2010 в 00:22
  • 2
    Объявление публичной службы: следующий код не даст вам то, что вы хотите: pdfReader.AcroFields.Fields["fieldName"].Value. Я потратил несколько часов, прежде чем нашел этот пост. – Walter Stabosz 21 June 2013 в 14:55
  • 3
    Здравствуй. Я думаю, что есть ошибка в третьей строке вашего примера. Правильная форма: AcroFields fields = pdfReader.AcroFields; – cesAR 18 July 2017 в 17:43

Возможно, недавно изменилась библиотека iTextSharp, но я не смог получить принятый ответ на работу. Вот мое решение:

var pdf_filename = "pdf2read.pdf";
using (var reader = new PdfReader(pdf_filename))
{
    var fields = reader.AcroFields.Fields;

    foreach (var key in fields.Keys)
    {
        var value = reader.AcroFields.GetField(key);
        Console.WriteLine(key + " : " + value);
    }
}

Очень тонкая разница, из-за reader.AcroFields.Fields возвращает IDictionary вместо объекта AcroFields.

7
ответ дан Adam Jones 19 August 2018 в 10:33
поделиться
  • 1
    это работает, но на самом деле медленно, занимает минуту, чтобы читать ~ 3000 полей. Кто-нибудь знает более быстрый способ перечислить их? Я пытался сделать это параллельно, но это, похоже, не помогло. – DLeh 18 October 2016 в 04:47

Имя PDF-файла - «report.pdf» ..

Поле данных, которое нужно прочитать в TextBox1, является «TextField25» в PDF ..

        Dim pdf As String = "report.pdf"
        Dim reader As New PdfReader(pdf)
        Dim fields As AcroFields = reader.AcroFields
        TextBox1.Text = fields.GetField("TextField25")

Важное примечание : Это можно использовать ТОЛЬКО, ЕСЛИ PDF не сглажен (означает, что поля должны быть доступны для редактирования), пока он был создан с помощью iTextSharp ..

, т.е.

       pdfStamper.FormFlattening = False

Это очень просто .. И это работает как шарм ..:)

1
ответ дан EIV 19 August 2018 в 10:33
поделиться

Если вы используете Powershell, код обнаружения для полей:

    Add-Type -Path C:\Users\Micah\Desktop\PDF_Test\itextsharp.dll
    $MyPDF = "C:\Users\Micah\Desktop\PDF_Test\something_important.pdf"
    $PDFDoc = New-Object iTextSharp.text.pdf.pdfreader -ArgumentList $MyPDF
    $PDFDoc.AcroFields.Fields

Этот код даст вам имена всех полей в документе PDF, «something_important.pdf».

Так вы получаете доступ к каждому полю после того, как знаете имя поля:

    $PDFDoc.AcroFields.GetField("Name of the field here")
2
ответ дан Micah 'Powershell Ninja' 19 August 2018 в 10:33
поделиться

Это сработало для меня! Обратите внимание на параметры при определении шаблона! '\ 0', true

            string TempFilename = Path.GetTempFileName();

            PdfReader pdfReader = new PdfReader(FileName);
            //PdfStamper stamper = new PdfStamper(pdfReader, new FileStream(TempFilename, FileMode.Create));
            PdfStamper stamper = new PdfStamper(pdfReader, new FileStream(TempFilename, FileMode.Create), '\0', true);

            AcroFields fields = stamper.AcroFields;
            AcroFields pdfFormFields = pdfReader.AcroFields;

            foreach (KeyValuePair<string, AcroFields.Item> kvp in fields.Fields)
            {
                string FieldValue = GetXMLNode(XMLFile, kvp.Key);
                if (FieldValue != "")
                {
                    fields.SetField(kvp.Key, FieldValue);
                }
            }

            stamper.FormFlattening = false;
            stamper.Close();
            pdfReader.Close()
2
ответ дан Serg 19 August 2018 в 10:33
поделиться
  • 1
    OP только хотел прочитать данные в формате PDF (и получил для этого хороший ответ). В вашем коде показано, как изменить данные в форме PDF. – mkl 3 September 2013 в 09:10
  • 2
    Извините, на самом деле отправил ответ в неправильный поток ... Это означало объяснение того, как вводить значения в поля и сохранять редактирование формы, когда файл открывается снова ... – Serg 4 September 2013 в 21:02
Другие вопросы по тегам:

Похожие вопросы: