过滤掉 PDF 中除交互式表单字段之外的任何内容
Filter out anything but interactive form fields in PDF's
我正在寻找一种方法来过滤除 PDF 文件中交互式表单域之外的所有对象。
编程语言不是太重要,但如果我能从 Linux 命令行完成它会很高兴,但我对任何事情都非常开放。
例如。选择一个 pdf 输入文件,并输出一个新的 pdf 文件,其中只有第一个交互式表单字段。
最终目标是能够采用已打印但未填写的表单,并仅将已填写的表单字段的内容打印到上面。
我最接近的是使用 ghostscript:
gs -o outfile.pdf -sDEVICE=pdfwrite -dFILTERTEXT -dFILTERIMAGE infile.pdf
但在我的情况下仍然留下很多线条,尽管 -dFILTERIMAGE
也留下了图像。
还有一个 -dFILTERVECTOR
选项,但遗憾的是它也删除了表单域。
I'm looking for a way to filter out all objects apart from interactive form fields in PDF files.
首先,您必须摆脱静态页面内容。使用任意通用 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 测试 testRemoveAllPageContentStreams
)
我正在寻找一种方法来过滤除 PDF 文件中交互式表单域之外的所有对象。 编程语言不是太重要,但如果我能从 Linux 命令行完成它会很高兴,但我对任何事情都非常开放。 例如。选择一个 pdf 输入文件,并输出一个新的 pdf 文件,其中只有第一个交互式表单字段。
最终目标是能够采用已打印但未填写的表单,并仅将已填写的表单字段的内容打印到上面。
我最接近的是使用 ghostscript:
gs -o outfile.pdf -sDEVICE=pdfwrite -dFILTERTEXT -dFILTERIMAGE infile.pdf
但在我的情况下仍然留下很多线条,尽管 -dFILTERIMAGE
也留下了图像。
还有一个 -dFILTERVECTOR
选项,但遗憾的是它也删除了表单域。
I'm looking for a way to filter out all objects apart from interactive form fields in PDF files.
首先,您必须摆脱静态页面内容。使用任意通用 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 测试 testRemoveAllPageContentStreams
)