我在JAVA中使用PDFBOX读取了一个PDF文件,并将数据转换为文本并保存为字符串。我发现许多文本数据被X'C2A0'包围。例如:
X'436C756233AC2A04469616D6F6E64C2A0' Club:__Diamond__
__是X'C2A0'
我想搜索“Club:__,然后解析2 __ for”Diamond“。我尝试过类似的事情:
String TAG = "\\xC2A0"; // Tag in PDF
int pos = text.indexOf(TAG, positionInText);
但我从来没有得到任何打击。如何指定TAG?
编辑:
可能需要做一些澄清。我使用了PDFBOX:
public void toText() throws IOException
{
this.pdfStripper = null;
this.pdDoc = null;
this.cosDoc = null;
file = new File(filePath);
parser = new PDFParser(new RandomAccessFile(file,"r")); // update for PDFBox V 2.0
parser.parse();
cosDoc = parser.getDocument();
pdfStripper = new PDFTextStripper();
pdDoc = new PDDocument(cosDoc);
pdDoc.getNumberOfPages();
pdfStripper.setStartPage(1);
pdfStripper.setEndPage(10);
// reading text from page 1 to 10
// if you want to get text from full pdf file use this code
// pdfStripper.setEndPage(pdDoc.getNumberOfPages());
text = pdfStripper.getText(pdDoc);
text是一个定义为String的字段。这个文本字符串是我试图解析的内容。
答案 0 :(得分:1)
如果您搜索的字符串本身是十六进制编码的,或者是一个普通字符串,文件中包含字符值为0xc2a0
的2字节序列,那么您的问题并不完全清楚。
假设后一种情况,在文件中,序列0xA0
是Unicode代码点
的UTF-8编码,这是与{{1}对应的非中断空格HTML中的实体。
如果文件包含这些双字节序列,那么当读入Java字符串时(假设您使用UTF-8编码来解释字节流),那么每个序列将成为单个0xA0
在你的字符串中。
您应该能够编写正则表达式来查找由这些对分隔的数据。
答案 1 :(得分:0)
@Jim Garrison你的回答让我搜索。我还是不懂UTF-8编码。你的最后两段是正确的。我猜PDFBOX正在使用UTF-8来读取PDF文件。我使用了以下内容:
private final String TAG = "\u00A0"; // Tag   X'C2A0'
在两个x' C2A0'之间查找和解析数据标签