java byte 查找_java-如何在PDF(1.4)字节数组中搜索目标字符...

我知道这可能有点不寻常,但是我想了解一下PDF文档(字节数组)是否包含特定文本.我使用iText库v2.1.7在Java中自己创建了文档,该库可生成符合PDF 1.4规范的文档.

我最初的天真尝试是这样的:

byte[] target = "the target text".getBytes("UTF-8");

int index = Bytes.indexOf(pdfBytes, target); // Guava lib

System.out.println( index ); // always -1 (not found)

对于这些类型的文档如何编码以弄清楚我需要做什么,我只是不够了解.我想我真正需要找出的是在转换为字节时需要在目标文本上使用哪种编码,以使其与PDF使用的编码匹配.

我创建了一个小的PDF文档样本,除了一个带有单词一二三四五的短语外,什么都没有.如果我在Linux终端中放置该文件(或使用vim进行查看),则该PDF文件的内容将如下所示:

%PDF-1.4

%????

2 0 obj

<>stream

x?+?r

?24U?02I?2P0Q?n?

?F

!i\?y?

%??

%E??

i??E

i?e??!Y0?!\?\???

endstream

endobj

4 0 obj

<>>>/Parent 3 0 R/MediaBox[0 0 595 842]>>

endobj

1 0 obj

<>

endobj

3 0 obj

<>

endobj

5 0 obj

<>

endobj

6 0 obj

<>

endobj

xref

0 7

0000000000 65535 f

0000000309 00000 n

0000000015 00000 n

0000000397 00000 n

0000000152 00000 n

0000000460 00000 n

0000000505 00000 n

trailer

<<7bf1bdf9e8d048c5795c7785954d9360>]/Root 5 0 R/Size 7>>

startxref

615

%%EOF

其中某些字符编码在复制和粘贴过程中无法正确翻译,因此,如果您复制并保存在那里看到的内容,则会得到损坏的PDF. Here’s a link到该PDF的副本.

我尝试将目标字符串编码为各种编码,例如CP-1252和WinAnsiEncoding,但是这些是无法识别的字符集.

我原本认为这不会给我带来很多麻烦,但是我还无法弄清楚该怎么做.我确实有一种变通方法,可以获得相同的结果,但这是专门针对iText库的解决方案,即不是在PDF字节数组中搜索文本的通用解决方案.

如果使用iText解析要搜索的字节数组,则可以遍历PDF的每一页并提取文本:

private static boolean doesPDFContain(byte[] pdf, String text) throws Exception {

PdfReader reader = new PdfReader(pdf);

int numPages = reader.getNumberOfPages();

PdfTextExtractor extractor = new PdfTextExtractor(reader);

for (int i=1; i<=numPages; i++) {

if ( extractor.getTextFromPage(i).contains(text) ){

return true;

}

}

return false;

}

我仍然会对是否有可能做我最初尝试的事情感兴趣.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值