Java 使用使用maven shade插件构建的pdfbox的程序的结果不同于正常的NetBeans运行
我有一个使用PDFBOX1.7.1的java程序,它是用maven shade插件2.0构建的 以下是使用PDFBox api的代码:Java 使用使用maven shade插件构建的pdfbox的程序的结果不同于正常的NetBeans运行,java,maven,pdfbox,maven-shade-plugin,Java,Maven,Pdfbox,Maven Shade Plugin,我有一个使用PDFBOX1.7.1的java程序,它是用maven shade插件2.0构建的 以下是使用PDFBox api的代码: public class PdfFile { protected PDDocument document = null; public boolean load(byte[] bytes) throws IOException { InputStream is = new ByteArrayInputStream(bytes)
public class PdfFile {
protected PDDocument document = null;
public boolean load(byte[] bytes) throws IOException {
InputStream is = new ByteArrayInputStream(bytes);
PDFParser parser = new PDFParser(is);
parser.parse();
COSDocument cosDoc = parser.getDocument();
this.document = new PDDocument(cosDoc);
return true;
}
public byte[] extractText() throws IOException {
PDFTextStripper pdfStripper = new PDFTextStripper();
byte[] text = pdfStripper.getText(this.document).getBytes();
return text;
}
public void close() throws IOException {
if(this.document != null) {
this.document.close();
}
}
}
因此,基本上方法load()
从字节数组加载pdf文档,方法extractText()
将从pdf提取的文本作为字节数组返回。当我从NetBeansrun
按钮运行程序时,它可以工作,但当我从使用maven shade插件构建的单个jar运行程序时,返回的文本采用错误的字符编码。例如单词:
odpowiadająca (normal polish characters)
odpowiadajšca (netbeans run)
odpowiadajÄca (single shade jar)
我知道这是一个完全相同的文件(字节数组),在两次运行中都作为参数到达PdfFile.load()
。所以问题是PDF框返回两种不同格式的文本
我有3个问题:
java -jar {$jar_path} ExtractText -encoding UTF-8
但我在PdfBox api中找不到它
解决方案:我必须改变
pdfStripper.getText(this.document).getBytes();
到
首先,这里有两个事实(关于你的问题2):
- 根据:默认输出编码为UTF-8
- 将输出编码作为参数存在一个错误
extractText()
返回的byte[]
转换为字符串的方式有关
新字符串(字节[])
使用平台编码。因此,在netbeans或shell中执行此操作可能会产生不同的结果,因为我希望在netbeans中运行时平台编码可能不同
发布处理
extractText()
结果的代码可能会有所帮助 谢谢,您对字符串的理解是正确的-在上面的代码中,我使用了pdfStripper.getText(this.document).getBytes()
是String.getBytes()
-我不得不将这一行更改为pdfStripper.getText(this.document).getBytes(“UTF8”)代码>解决了问题,谢谢!
pdfStripper.getText(this.document).getBytes("UTF8");