使用 iText 从 Foxit Reader 文本框评论中提取数据
Extract data from Foxit Reader textbox comments using iText
假设您有一个 pdf 文档,其中包含 no-OCR 文本:
"I am Sam, I am 28 years old and tomorrow is april/18/2018."
是否可以在 "Sam"、“28”和 "april/18/2018" 正下方插入表单控件,以便用户可以在表单控件中准确地键入那些信息,以及来自窗体控件可以被编程代码读取?
iTextSharp 可以做到吗?或者更简单的工具?
编辑 1:下面我将尝试使我的目标更加明确(对不起我的英语)。
在我的工作中,我必须从没有 OCR 的旧扫描文档中提取大量信息。对它们应用 OCR 不是一种选择。我想做的是:(a) 我打开 pdf 文档并开始阅读。 (b) 每次我发现我必须使用的信息,比如数据出生时,我想在它附近 insert/apply/put/create/set 一个文本框(例如下面),然后在文本框中输入该日期出生. (c) 完成插入我想要的所有文本框(姓名、年龄、出生日期、收入等)并在其中输入从 pdf 读取的信息后,我希望能够处理我的编程代码中的文本框,例如 C#。
使用 iText,可以提取 Foxit Reader pdf Callout 功能中插入的注释。正如 mkl 在问题的评论中回答的那样,那些 Foxit Reader 评论是 "contained in the Contents entries of the annotation dictionaries."
使用 iText 7,您可以像这样提取文本框评论:
try ( PdfReader pdfReader = new PdfReader("HelloFOXIT.pdf");
PdfDocument pdfDocument = new PdfDocument(pdfReader) ) {
for (int pageNr = 1; pageNr <= pdfDocument.getNumberOfPages(); pageNr++) {
System.out.printf("\n\nPage %d\n\n", pageNr);
PdfPage page = pdfDocument.getPage(pageNr);
for (PdfAnnotation pdfAnnotation : page.getAnnotations()) {
System.out.printf("- %s\n", pdfAnnotation.getContents());
}
}
}
输出:
Page 1
- 28
- 18/04/2018
- SAM
假设您有一个 pdf 文档,其中包含 no-OCR 文本:
"I am Sam, I am 28 years old and tomorrow is april/18/2018."
是否可以在 "Sam"、“28”和 "april/18/2018" 正下方插入表单控件,以便用户可以在表单控件中准确地键入那些信息,以及来自窗体控件可以被编程代码读取?
iTextSharp 可以做到吗?或者更简单的工具?
编辑 1:下面我将尝试使我的目标更加明确(对不起我的英语)。
在我的工作中,我必须从没有 OCR 的旧扫描文档中提取大量信息。对它们应用 OCR 不是一种选择。我想做的是:(a) 我打开 pdf 文档并开始阅读。 (b) 每次我发现我必须使用的信息,比如数据出生时,我想在它附近 insert/apply/put/create/set 一个文本框(例如下面),然后在文本框中输入该日期出生. (c) 完成插入我想要的所有文本框(姓名、年龄、出生日期、收入等)并在其中输入从 pdf 读取的信息后,我希望能够处理我的编程代码中的文本框,例如 C#。
使用 iText,可以提取 Foxit Reader pdf Callout 功能中插入的注释。正如 mkl 在问题的评论中回答的那样,那些 Foxit Reader 评论是 "contained in the Contents entries of the annotation dictionaries."
使用 iText 7,您可以像这样提取文本框评论:
try ( PdfReader pdfReader = new PdfReader("HelloFOXIT.pdf");
PdfDocument pdfDocument = new PdfDocument(pdfReader) ) {
for (int pageNr = 1; pageNr <= pdfDocument.getNumberOfPages(); pageNr++) {
System.out.printf("\n\nPage %d\n\n", pageNr);
PdfPage page = pdfDocument.getPage(pageNr);
for (PdfAnnotation pdfAnnotation : page.getAnnotations()) {
System.out.printf("- %s\n", pdfAnnotation.getContents());
}
}
}
输出:
Page 1
- 28
- 18/04/2018
- SAM