我想知道是否有办法使用Apache PdfBox 2.0.8将pdf文件(原始字节)的内容作为String获取。我正在做的是将PDDocument对象保存到ByteArrayOutputStream,然后创建一个新的String获取ByteArrayOutputStream的字节数组。但是如果我将String保存到文件中,结果是一个空白的pdf。原因是因为pdf的流部分字节与直接从PdDocument对象创建的文件不同。知道这一点后,我尝试使用juniversalchardet获取ByteArrayOutputStream的字符编码,但没有运气。那么,有没有办法实现这个? 这是我到目前为止所尝试的:
ByteArrayOutputStream baos = new ByteArrayOutputStream();
PDDocument doc = new PDDocument();
... //Add page, font, pdPageContentStream and text only to doc object with some latin chars (áéíóú)
doc.save(baos);
因此,如果我使用baos对象创建文件,则pdf文件看起来像预期的那样,但如果我这样做:
String str = new String(baos.toByteArray());
然后使用str字节创建一个文件,pdf文件只显示一个空白页面。 希望这次我很清楚:)
答案 0 :(得分:1)
使用this,只需将所有内容附加到String
。
StringBuilder sb = new StringBuilder();
try (PDDocument document = PDDocument.load(new File("your\\path\\file.pdf"))) {
document.getClass();
if (!document.isEncrypted()) {
PDFTextStripperByArea stripper = new PDFTextStripperByArea();
stripper.setSortByPosition(true);
PDFTextStripper tStripper = new PDFTextStripper();
String pdfFileInText = tStripper.getText(document);
String lines[] = pdfFileInText.split("\\r?\\n");
for (String line : lines) {
sb.append(line);
}
}
}
return sb.toString();