[英]itext how to check if giant string is present on the pdf page
-我正在使用IText插件在我的Java项目中创建/读取pdf。 -我正在从任何扩展名(pdf,doc,word等)中读取多个文本文件,并将其内容写在新的pdf中(所有文件的所有内容结合在一起)-要在巨型pdf上分隔每个文件的每个内容,我总是开始一个新页面,在新页面的开头用红色将文件的确切路径写入,然后写入文件的内容
问题:
但是,当我提取所有页面并检查页面中是否存在我的文件路径时(执行string.contains(...)),系统在pdf页面上找不到我的文件路径! 我检查了为什么会发生这种情况,当我输出一页的字符串时,就像这样:
1. PdfGeneratorForSoftwareRegistration / PdfGeneratorForSoftwareRegistration / src / br / ufrn / pairg / pdfgenerator / LeitorArquivoTexto.java包br.ufrn.pairg.pdfgenerator;
导入java.io.BufferedReader; 导入java.io.File; 导入java.io.FileReader; 导入java.io.IOException; 导入java.util.Scanner;
上市...
当我检查文件路径“ PdfGeneratorForSoftwareRegistration / PdfGeneratorForSoftwareRegistration / src / br / ufrn / pairg / pdfgenerator / LeitorArquivoTexto.java”是否存在时,系统未找到它。 你看到问题了吗? 我的路很大,占用了2条线! 那就是问题所在!
所以,我的问题是:有没有办法使用itext插件检查pdf文本中是否存在巨型字符串?
PDF文件中的页面是使用页面树组织的。 页面树的每个叶子都是带有键和值的页面字典。 您可以将自定义条目添加到页面字典中,如下所示:
public void createPdf(String dest) throws IOException, DocumentException {
Document document = new Document();
PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(dest));
document.open();
document.add(new Paragraph("Page 1"));
document.newPage();
document.add(new Paragraph("Page 2"));
document.newPage();
document.add(new Paragraph("Page 3"));
document.newPage();
document.add(new Paragraph("Page 4"));
writer.addPageDictEntry(new PdfName("ITXT_PageMarker"), new PdfString("Marker for page 4"));
document.newPage();
document.add(new Paragraph("Page 5"));
document.newPage();
document.add(new Paragraph("Page 6"));
writer.addPageDictEntry(new PdfName("ITXT_PageMarker"), new PdfName("PageMarker"));
document.newPage();
document.add(new Paragraph("Page 7"));
writer.addPageDictEntry(new PdfName("ITXT_PageMarker"), new PdfNumber(7));
document.newPage();
document.add(new Paragraph("Page 8"));
document.close();
}
如果您查看PDF的内部内容,则如下所示:
为了这个示例,我在第4页上添加了PDF字符串,在第6页上添加了PDF名称,并在第7页上添加了PDF编号。
您可以像这样检查此自定义键的存在:
public void check(String filename) throws IOException {
PdfReader reader = new PdfReader(filename);
PdfDictionary pagedict;
for (int i = 1; i < reader.getNumberOfPages(); i++) {
pagedict = reader.getPageN(i);
System.out.println(pagedict.get(new PdfName("ITXT_PageMarker")));
}
reader.close();
}
此check()
的输出如下:
null
null
null
Marker for page 4
null
/PageMarker
7
重要说明:除了ISO 32000中定义的关键字之外,您不能只为PDF语法发明新的关键字。但是,如果在ISO中注册了4位代码,则可以创建自己的自定义关键字。 例如:Adobe注册了ADBE,iText注册了ITXT,...。如果引入新的自定义密钥,则应使用在ISO中注册的代码作为前缀。 例如:在iText上,我们可以使用ITXT_PageMarker
或ITXT_custom
或ITXT_Whatever
...。此规则避免了两家不同的公司引入相同的代码,但含义不同。
这不是最好的解决方案,但是我通过在第一个pdf文件的每个路径名的顶部写了一个神奇的id(例如“#%&#id_0#%&#”)来解决它。 然后,我再次阅读pdf,并检查是否有ID。 如果有,我将其与文件路径相关联。
解决的问题:我正在使用http://www.quicklyjava.com/read-pdf-file-in-java-using-itext/的解决方案获取页码
问题:如果项目中有任何写有#%&#id_0#%&#,#%&#id_1#%&#...的文件,则我的程序将无法运行。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.