【问题标题】:"java.io.IOException: This may not be a PDF File"“java.io.IOException:这可能不是 PDF 文件”
【发布时间】:2011-01-27 12:57:00
【问题描述】:

我想从 url 读取 pdf 文件并将其转换为缩略图。我正在使用以下代码。我没有在这里包含转换部分。问题出在“pdffile = new PDFFile(buf);”这一行上我收到一个异常“java.io.IOException:这可能不是 PDF 文件”。但是我可以在浏览器上看到pdf。我是怎么了?请帮我。

    byte[] byteArray = null;
    InputStream is = null;
    String streamTo = null;
    BufferedImage bmg = null;
    PDFFile pdffile;
    ByteBuffer buf;
    int pageNumber = 1;

    try {
       is = fetchImageFromServer(url); //Pdf Url path
       if (!pageNumber.isEmpty()) {
         streamTo = is.toString(); 
         byteArray = streamTo.getBytes();
         buf = ByteBuffer.wrap(byteArray);
         pdffile = new PDFFile(buf);
       }
    } catch (IOExceptio e) {
    }

【问题讨论】:

  • 您应该提及您正在使用哪个库来执行此操作 - PDFFile 不是标准 Java 类。
  • 试试这篇文章 - How To Read A PDF File From A URL In Java。我是为我公司的 Java PDF 组件套件编写的,但它可以满足您的要求。
  • 我在堆栈溢出方面比较新鲜。我不知道更多。如果我有任何错误或对我的任何建议,请提供帮助。
  • +1,但代码中存在轻微错误:带有空块的额外 while:while ((baLength = is1.read(ba1)) != -1) { fos1.write( ba1, 0, baLength); } while (baLength != -1);
  • 谢谢你,莫里斯。我很惊讶它在没有警告的情况下编译。我已经修复了错误。

标签: java pdf


【解决方案1】:

您必须阅读流的内容。 toString 不会那样做。

【讨论】:

  • 感谢您的快速响应。请多解释一下
  • +1 @Sarika:只需阅读有关流的 Java 教程...这是标准知识,Maurice 不需要在此处复制。
  • @丹尼尔:-1 不是我标记的。昨天我离开了办公室。
【解决方案2】:

is.toString() 调用不会正确读取所有字节。 Apache Commons IO 有一个实用功能可以帮助您,IOUtils.toByteArray()。试试这个:

is = fetchImageFromServer(url); //Pdf Url path
if (!pageNumber.isEmpty()) {
    byteArray = IOUtils.toByteArray(is);
    buf = ByteBuffer.wrap(byteArray);
    pdffile = new PDFFile(buf);
}

【讨论】:

    【解决方案3】:

    PDf 是一个二进制对象。如果将其转换为字符串,它将更改字节值并破坏文件。

    【讨论】:

    • PDF 文件格式是 blob。如果将其转换为字符串,就像将 PNG 或其他二进制图像转换为字符串并返回一样。转换过程会改变一些字节,这会破坏 blob。
    • @马克斯蒂芬斯:谢谢。 -1 没有被我标记。昨天我离开了办公室。
    • 在 Java 中,字符串可以包含任何字符。如果您将某些内容转换为字符串,然后再将其转换回来,一切都很好!这不是C!当然,在一个方向上使用 UTF8 转换字节,然后用 ISOwahtever 将其转换回来,你会得到错误。
    • 只要您确切地知道自己在做什么。如果您使用某些 Writers/Stream 函数,它可能会保持不变,但效率低下并且可能会损坏 blob。因此建议一般避免
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-24
    • 2019-12-25
    • 2016-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多