Отфильтруйте все, кроме интерактивных полей формы в PDF - PullRequest
0 голосов
/ 10 октября 2019

Я ищу способ отфильтровать все объекты, кроме полей интерактивной формы в файлах PDF. Язык программирования не так уж важен, но было бы неплохо, если бы я мог сделать это из командной строки Linux, но я почти открыт для всего. Например, выберите исходный файл PDF и выведите новый файл PDF, содержащий только поля интерактивной формы, из первых.

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

Самое близкое, что я получил, это использование ghostscript:

gs -o outfile.pdf -sDEVICE=pdfwrite -dFILTERTEXT -dFILTERIMAGE infile.pdf

Но в моем случае все равно остается много строк, а такжеизображение несмотря на -dFILTERIMAGE. Также есть вариант -dFILTERVECTOR, но, к сожалению, он также удаляет поля формы.

1 Ответ

1 голос
/ 30 октября 2019

Я ищу способ отфильтровать все объекты, кроме полей интерактивной формы в файлах PDF.

Прежде всего вам необходимо избавиться от статического содержимого страницы. Используя произвольную библиотеку PDF общего назначения, вы можете сделать это, очистив запись содержимого каждой страницы.

Например, используя версию iText7 для Java, это можно сделать следующим образом:

try (
    PdfReader pdfReader = new PdfReader(SOURCE);
    PdfWriter pdfWriter = new PdfWriter(RESULT);
    PdfDocument pdfDocument = new PdfDocument(pdfReader, pdfWriter)
) {
    for (int pageNr = 1; pageNr <= pdfDocument.getNumberOfPages(); pageNr++) {
        PdfPage pdfPage = pdfDocument.getPage(pageNr);
        pdfPage.getPdfObject().remove(PdfName.Contents);
        pdfPage.getPdfObject().setModified();
    }
}

( RemoveContent test testRemoveAllPageContentStreams)

...