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

标签 java maven pdfbox maven-shade-plugin

我有一个使用 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/

相关文章:

java - 尝试将自定义行添加到 gwt 中的 CellTable 时出现 Null 错误

java - "Lambda expressions are not supported in -source 7, use -source 8 to enable lambda expressions"

java - Eclipse中转换maven项目报错

java - 使用 Apache PdfBox 提取两个书签之间的文本

Java PDFBox 列出页面的所有指定目的地

java - 可从享元中自行移除资源

java - 将输入字段与一列通配符匹配

java - MAVEN SUREFIRE 插件错误

java - Maven 站点生成,显示以前版本的站点

pdf - 从 PDF 复制+粘贴文本会导致垃圾