如何使用PDFReader读取文件

时间:2017-06-06 11:18:17

标签: java file itext

我有一个方法public void readFile(File inputFile, File outputFile),我想使用PDFReader读取文件,但读者只读取String个值,我无法对字符串值进行硬编码,因为它是由用户导出文件时。

我使用了FileUtils.readFileToString(inputFile),但我在PdfReader reader = new PdfReader(input);

行上遇到了异常

请建议一种方法来实现这一目标。

代码段:

public void readFile(File inputFile, File outputFile){
String input = FileUtils.readFileToString(inputFile);
PdfReader reader = new PdfReader(input);

//some more code
}

4 个答案:

答案 0 :(得分:1)

PdfReader类有不同的构造函数。使用String创建实例时,您应该传递文件路径(例如myFolder/my.pdf)。您正在做的是完全错误!您正在将二进制文件读入StringString 不是文件路径!

您可以使用PdfReader轻松创建FileInputStream个实例。

目前还不清楚您使用的是哪种版本的iText。请确保您使用的是iText 7.在iText 7中,PdfReader包含以下constructors

  • PdfReader(InputStream is)
  • PdfReader(InputStream is, ReaderProperties properties)
  • PdfReader(IRandomAccessSource byteSource, ReaderProperties properties)
  • PdfReader(String filename)
  • PdfReader(String filename, ReaderProperties properties)

如果由于某种原因你需要使用iText 5,那么这就是list of constructors you can use

  • PdfReader(byte[] pdfIn)
  • PdfReader(byte[] pdfIn, byte[] ownerPassword)
  • PdfReader(byte[] pdfIn, Certificate certificate, ExternalDecryptionProcess externalDecryptionProcess)
  • PdfReader(InputStream is)
  • PdfReader(InputStream is, byte[] ownerPassword)
  • PdfReader(InputStream inputStream, Certificate certificate, ExternalDecryptionProcess externalDecryptionProcess)
  • PdfReader(PdfReader reader)
  • PdfReader(RandomAccessFileOrArray raf, byte[] ownerPassword)
  • PdfReader(RandomAccessFileOrArray raf, byte[] ownerPassword, boolean partial)
  • PdfReader(String filename)
  • PdfReader(String filename, byte[] ownerPassword)
  • PdfReader(String filename, byte[] ownerPassword, boolean partial)
  • PdfReader(String filename, Certificate certificate, ExternalDecryptionProcess externalDecryptionProcess)
  • PdfReader(String filename, Certificate certificate, Key certificateKey, String certificateKeyProvider)
  • PdfReader(URL url)
  • PdfReader(URL url, byte[] ownerPassword)

正如您所看到的,iText 5比iText 7更加混乱。我们已经从头开始重写了iText,以摆脱大量不再相关的遗留类和方法。 iText 7的API现在更加流畅。

答案 1 :(得分:0)

请通过PdfReader构造函数仔细阅读。您的示例的最佳方法是将File包装到InputStream

new PdfReader(new FileInputStream(inputFile))

答案 2 :(得分:0)

您正在将整个文件读取为字符串并传递给PdfReader,这是完全错误的。您需要传递文件的路径File inputFile本身。

你可以尝试

PdfReader reader = new PdfReader(inputFile.getCanonicalPath());//or inputFile.getName()

或者,

PdfReader reader = new PdfReader(inputFile);

答案 3 :(得分:0)

感谢您的更新,我使用的是Itext5,下面是代码段:

public void readFile(File inputFile, File outputFile){

    //i am reading the inputFile here

    PdfReader reader = new PdfReader(inputFile);

    //doing some logic to manipulate the pdf and then saving the pdf to outputFile

    PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(outputFile));
}

//然后在主类

中调用readFile方法
private File showDialogBox(){

    if(getSelectedFile() != null){
        File inputFile = jfc.getSelectedFile();
        //JFileChooser in java swing
        //The selected File name will be given by the user before exporting it.
        readFile(inputFile, outputFile);  
    }
}