我有一个方法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
}
答案 0 :(得分:1)
PdfReader
类有不同的构造函数。使用String
创建实例时,您应该传递文件路径(例如myFolder/my.pdf
)。您正在做的是完全错误!您正在将二进制文件读入String
。 String
不是文件路径!
您可以使用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);
}
}