【问题标题】:Can scanner in Java read pdf files? Reading with streamsJava中的扫描仪可以读取pdf文件吗?流式阅读
【发布时间】:2020-01-15 14:49:28
【问题描述】:

我想知道 Java 中的扫描仪是否能够读取 pdf 文件?如果是,怎么做?

这是我拥有的,但它不起作用:

Scanner scan = new Scanner(mypdffile);
String Result = "";
while(scan.hasNext()) {
    Result += scan.nextLine();
}

【问题讨论】:

  • 你试过运行这段代码吗?
  • @Goion 是的,我有,它不起作用。
  • 然后它会回答您的问题,“如果是”。来自 Scanner javadoc:“一个简单的文本扫描器,可以使用正则表达式解析原始类型和字符串。”
  • 不,Scanner 用于文本,而 PDF 不是文本,或者更确切地说不仅仅是文本,还有很多其他内容。

标签: java pdf java.util.scanner


【解决方案1】:

不,Scanner 不会像您想要的那样处理 PDF 文件。请参阅this question 以获取有关如何使用 Java 阅读 PDF 的建议。 TL;DR 是您可能想要使用库。

【讨论】:

  • 谢谢,除了 PdfBox 之外还有其他方法吗,比如缓冲阅读器可以工作吗?
  • @Candyfloss BufferedReader 肯定不会帮助你。阅读器适用于基于字符的格式,但 PDF 是二进制的。您需要 InputStreams,而不是阅读器。但是我们真的不知道PDF文件格式的内幕来帮助你。
  • @kingkupps 谢谢,我不想使用 pdfbox 等,所以我最终使用了流。
【解决方案2】:

我最终使用流来读取 pdf 文件,因为我正在寻找一种不使用 PdfBox 等的方法。

dos 是我的数据输出流

     try
    {
        FileInputStream fin = new FileInputStream(mypdffile);


        int read=0;
        byte[] buf=new byte[1024];

        //read in file 
        while((read=fis.read(buf))>0) {

            dos.write(buffer,0,read);
                    dos.flush();

        }
    dos.close();



    }
    catch(IOException ex)
    {
        ex.printStackTrace();

    }

【讨论】:

  • 这行不通。 result+=new String(buf); 行会损害您的 PDF,由于编码,您最终会得到与以前不同的字节。 PDF 是一种二进制文件格式。
  • @Tilman Hausherr,您建议如何将字节转换为字符串?
  • 如果您想要文本(在 Adob​​e 中标记、复制和粘贴),请使用 PDFBox 文本提取。如果没有库,您将无法做到这一点。如果您只想复制(二进制)字节,则写入 ByteArrayOutputStream 然后调用 toByteArray()。
  • 是的,好多了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-18
  • 2013-12-04
相关资源
最近更新 更多