gpt4 book ai didi

java - 使用使用 maven-shade-plugin 构建的 pdfbox 的程序结果与正常的 NetBeans Run 不同

转载 作者:行者123 更新时间:2023-12-02 07:18:10 27 4
gpt4 key购买 nike

我有一个使用 PDFBox 1.7.1 的 java 程序,它是使用 maven-shade-plugin 2.0 构建的。

这是使用 PDFBox api 的代码:

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 中提取的文本作为字节数组。当我从 NetBeans Run 运行程序时它可以工作按钮,但是当我从使用 maven-shade-plugin 构建的单个 jar 运行它时,返回的文本采用错误的字符编码。例如单词:

odpowiadająca (normal polish characters)
odpowiadajšca (netbeans run)
odpowiadajÄca (single shade jar)

我知道它是作为参数 to PdfFile.load() 提供的完全相同的文件(字节数组)在两次运行中。所以问题是 PDF 框返回两种不同格式的文本......

我有 3 个问题:

  1. 为什么使用shade插件构建的jar中的编码不同?
  2. 如何控制/设置使用shade插件构建的jar使用的编码?
  3. 如何强制 PDF 框以正确的格式返回文本?

我知道在命令行 PDFBox 中有设置编码的选项:

java -jar {$jar_path} ExtractText -encoding UTF-8

但是我在 PdfBox api 中找不到它...

<小时/>

已解决:我必须改变

pdfStripper.getText(this.document).getBytes();

pdfStripper.getText(this.document).getBytes("UTF8");

最佳答案

首先,这里有 2 个事实(关于您的问题 2):

对于问题 1 和 3:

我认为您的问题与将 extractText() 返回的 byte[] 转换为字符串的方式更相关。

new String(byte[]) 使用平台编码。因此,在 netbeans 或 shell 中执行此操作可能会产生不同的结果,因为我预计在 Netbeans 中运行时平台编码可能会有所不同。

发布处理 extractText() 结果的代码可能会有所帮助。

关于java - 使用使用 maven-shade-plugin 构建的 pdfbox 的程序结果与正常的 NetBeans Run 不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14662373/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com