Выполнение pdftk my-pdf-form.pdf dump_data_fields ничего не показывает

Я использую инструмент pdftk, у меня есть редактируемый PDF-файл, и я видел в документации, что аргументы dump_data_fields должны показывать мне поля формы.

Я использую эту команду (окна): pdftk my-pdf-form.pdf dump_data_fields

Я использую серверную версию pdftk.

Документация: https://www.pdflabs.com/docs/pdftk-man-page/

Дело в том, что PDF можно редактировать, в нем есть поля для записи с помощью Adobe PDF Viewer.


person dlopezgonzalez    schedule 20.05.2015    source источник


Ответы (4)


Проблема заключалась в том, что PDF-файл был создан Adobe LiveCycle Designer и был сохранен как «Adobe Dynamic XML From». Решение заключается в сохранении файла как «Adobe Static PDF Form». Возможно, pdftk не может работать с этими файлами жизненного цикла.

person dlopezgonzalez    schedule 25.05.2015

Я думал, что принятый ответ мог быть моим решением, но оказалось, что документ PDF, с которым я работал, на самом деле не имел настроенных полей формы. Если документ выглядит как форма, но поля формы не выделены серым цветом, поля не будут обнаружены.

Единственный способ решить эту проблему — открыть документ в Acrobat Pro и добавить поля с помощью инструмента формы. Тогда pdftk работал нормально.

person guero64    schedule 04.08.2017

Если вы столкнулись с проблемой OP в среде Windows, следуйте приведенным ниже инструкциям.

1- Откройте программу PDFtk с графическим интерфейсом. (Вы также можете использовать cli, если хотите)

извлечение полей PDF с помощью pdftk в Windows

2- Нажмите кнопку «Добавить PDF...» и найдите готовый PDF-файл.

извлечение полей PDF с помощью pdftk в Windows

3- Прокрутите вниз до нижней части окна GUI PDFtk и нажмите «Создать PDF...», не добавляя и не изменяя никаких настроек.

извлечение полей PDF с помощью pdftk в Windows

4- Сохраните новый готовый к заполнению файл PDF с новым именем в каталоге по вашему выбору.

извлечение полей PDF с помощью pdftk в Windows

5- Наконец, введите версию команды dump_data_fields для Windows с помощью cmd, например так (обратите внимание, как используется «выход» вместо «>»)

извлечение полей PDF с помощью pdftk в Windows

6- Откройте текстовый файл «fields.txt», и вы увидите имена полей. Пример показан ниже.

извлечение полей PDF с помощью pdftk в Windows

person Full Array    schedule 14.07.2018

Я не знаю, поможет ли это, но я написал код C# для подсчета полей данных в документе. Пожалуйста, ознакомьтесь со следующими функциями.

  1. Здесь мы передаем путь к файлу, и он подсчитывает общее количество полей в документе.

    public int countDataFields(string inputFile)
    {
        int fieldCount = 0;
        string arguments = "";
    
        using (Process newProcess = new Process())
        {
            arguments = inputFile + " dump_data_fields";
            newProcess.StartInfo = new ProcessStartInfo("pdftk ", arguments);
            newProcess.StartInfo.RedirectStandardInput = true;  
            newProcess.StartInfo.RedirectStandardOutput = true;
            newProcess.StartInfo.RedirectStandardError = true;
            newProcess.StartInfo.UseShellExecute = false;
            newProcess.StartInfo.CreateNoWindow = false;
            newProcess.Start();
    
            while (!newProcess.StandardOutput.EndOfStream)
            {
                var line = newProcess.StandardOutput.ReadLine();
                fieldCount = fieldCount + 1;
            }
    
            Console.WriteLine("Field Counts: " + fieldCount);
            newProcess.WaitForExit();
        }
    
        return fieldCount;
    }
    
  2. Если вы хотите передать файл в виде потока через стандартный ввод

    public void countDataFieldsWhenFilePassedAsBinaryStream(string file1)
    {
        int fieldCount = 0;
        // initialize the binary reader and open the binary reader with the file stream of the incoming file.
        BinaryReader binaryReader = new BinaryReader(File.Open(file1, FileMode.Open, FileAccess.Read));
    
        //create a buffer array of 1024.
        byte[] buffer = new byte[1024];
    
        using (Process newProcess = new Process())
        {
            newProcess.StartInfo = new ProcessStartInfo("pdftk");
            newProcess.StartInfo.Arguments = @" - dump_data_fields";
            newProcess.StartInfo.UseShellExecute = false;
            newProcess.StartInfo.RedirectStandardInput = true;
            newProcess.StartInfo.RedirectStandardOutput = true;
            newProcess.Start();
    
            int bytesRead = 0;
    
            // we are reading the binary files in chunks of 1024 bytes
            // we loop through as long as the byte read is greater than 0
            while ((bytesRead = binaryReader.Read(buffer, 0, 1024)) > 0)
            {
                //  we write the standard input bytes into the buffer.
                newProcess.StandardInput.BaseStream.Write(buffer, 0, bytesRead);
            }
    
            //closing the binaryReader
            binaryReader.Close();
    
            //closing the standard input stream
            newProcess.StandardInput.Close();
    
            // here we are going to loop through the standard output stream till the eof. we are counting the
    
            while (newProcess.StandardOutput.EndOfStream == false)
            {
                //read the line;
                newProcess.StandardOutput.ReadLine();
                //increment the counter
                fieldCount++;;
            }
    
            // console writeline the field count.
            Console.WriteLine(fieldCount);
    
            newProcess.WaitForExit();
        }// end of using
    }// end of function convertPDFToStandardInput
    

Надеюсь это поможет :)

person Allan Varkey    schedule 26.08.2019