Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用使用maven shade插件构建的pdfbox的程序的结果不同于正常的NetBeans运行_Java_Maven_Pdfbox_Maven Shade Plugin - Fatal编程技术网

Java 使用使用maven shade插件构建的pdfbox的程序的结果不同于正常的NetBeans运行

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)

我有一个使用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);
        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插件构建的单个jar运行程序时,返回的文本采用错误的字符编码。例如单词:

odpowiadająca (normal polish characters)
odpowiadajšca (netbeans run)
odpowiadajÄca (single shade jar)
我知道这是一个完全相同的文件(字节数组),在两次运行中都作为参数
到达PdfFile.load()
。所以问题是PDF框返回两种不同格式的文本

我有3个问题:

  • 为什么内置shade插件编码的jar不同
  • 如何控制/设置用shade插件构建的jar使用的编码
  • 如何强制PDF框以正确格式返回文本
  • 我知道在命令行PDFBox中有设置编码的选项:

    java -jar {$jar_path} ExtractText -encoding UTF-8
    
    但我在PdfBox api中找不到它


    解决方案:我必须改变

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

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

    • 根据:默认输出编码为UTF-8
    • 将输出编码作为参数存在一个错误
    关于问题1和3:

    我认为您的问题更多地与将
    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");