- 我正在使用IText插件在我的java项目上创建/读取pdfs。 - 我正在从任何扩展名(pdf,doc,word等)中读取多个文本文件,并将其内容写在新的pdf上(所有文件的所有内容连接在一起) - 要分隔巨型pdf上每个文件的每个内容,我总是开始一个新页面,在新页面的开头用红色写出文件的确切路径,然后写出文件的内容
问题:
但是,当我提取所有页面并检查是否存在我的文件路径在页面上时(执行string.contains(...)),系统找不到我的文件路径pdf页面!我已经检查了为什么会发生这种情况,当我输出一个页面的字符串时,就像这样:
1。 PdfGeneratorForSoftwareRegistration / PdfGeneratorForSoftwareRegistration / SRC / BR / ufrn / pairg /的pdfGenerator / LeitorArquivoTexto.java 包br.ufrn.pairg.pdfgenerator;
import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.IOException; import java.util.Scanner;
...公共
当我检查文件路径是否为“PdfGeneratorForSoftwareRegistration / PdfGeneratorForSoftwareRegistration / src / br / ufrn / pairg / pdfgenerator / LeitorArquivoTexto.java“出现在这个巨大的字符串中,系统没有找到它。你能看到问题吗?我的路径是如此之大,占据了2行!这就是问题!< / p>
所以,我的问题是:有没有办法使用itext插件检查pdf文本中是否存在一个巨大的字符串?
答案 0 :(得分:0)
这不是最好的解决方案,但我通过在我的第一个pdf上的每个路径名称上写下一个神奇的ID(例如“#%&amp;#id_0#%&amp;#”)来解决它。然后,我再次阅读pdf并检查是否有id。如果有,我将它与我的文件路径相关联。
问题解决了:我使用http://www.quicklyjava.com/read-pdf-file-in-java-using-itext/
的解决方案获取页码问题:如果项目中有#%&amp;#id_0#%&amp;#,#%&amp;#id_1#%&amp;#...写在其上的任何文件,我的程序将无效。
答案 1 :(得分:0)
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
,...此规则可以避免两个不同的公司引入具有不同含义的相同代码。