iText读PDF读不到的问题

最近用iText做读写PDF的项目。读PDF用的iText的PdfReader。直接将文件路径传进去。但是,读比较大的PDF文档就读不到了(我的PDF1M)。找网上解决方案,有个文章解决的很到位。在后面引用过来了。

先大体写下我自己的解决方法:

FileInputStream file = new FileInputStream(inputFile);//创建流文件,其中inputFile是你的PDF文档路径
     byte[] b=  new byte[file.available()];//获取字节
    if(file.read(b)>0){
     file.read(b,0,b.length);//将字节读入到文件里
    }
 
  PdfReader reader = null;// iText一个类

    //这前直接将文件路径放进来,结果就是读大PDF文件(我的是大于1M)时读不到内存里。
   //reader = new PdfReader(inputFile);

    //解决问题的关键

    / /更换成这种方式,就可以读到大文件了。我的1M的文件是读到了,再大的没有测试过。
    reader = new PdfReader(new PdfReader(b));   

解决方案来自:http://www.myexception.cn/powerdesigner/1029265.html
饮水思源,大家转载的话请注明出处吧。

内存溢出---iText读取pdf--举一反三法

本人要对pdf文件进行操作,截取一个pdf文件的n-m页.

 

源码如下:

FileInputStream file=new FileInputStream(input);
  
                PdfReader pdfr= new PdfReader(file);//这里会报错


Document document = new Document();  
  PdfCopy copy = new PdfCopy(document, new FileOutputStream(output)); //输出pdf文件;
  document.open();
  for(int i=begin;i<=end;i++){
   document.newPage();
   PdfImportedPage page=copy.getImportedPage(pdfr, i);
   copy.addPage(page);
  }
  document.close(); 如果file文件是大型文件.那么 PdfReader会将文件放入内存里.那么就会报错.内存溢出.

 

解决原理:

    直接将文件读取会报错,那么我们参考,文件上传和下载的方法:

byte[] b=new byte[8192];
  int len=0;
  while((len=fis.read(b))>0){
   fos.write(b,0,len);
  }
   fos.close();
         fis.close(); 将输入输出流用 byte[]来解决.

 

  那么这里怎么处理呢?

 

解决源码:

               
                Document document = new Document(); 
  PdfCopy copy = new PdfCopy(document, new FileOutputStream(output)); //输出pdf文件;
  document.open();
  
  
byte[] b= new byte[file.available()]; ///这里是解决问题的重点
  int len=0;
  while((len=file.read(b))>0){
   
file.read(b,0,b.length);///这里是解决问题的重点 

PdfReader pdfr=new PdfReader(new PdfReader(b));///这里是解决问题的重点
   
int num=pdfr.getNumberOfPages();
   System.out.println("第一次页数是:"+num);
   if(num<end||begin<0||begin>end){
    System.out.println("截取的页数不正确!");
   }else {
    for(int i=begin;i<=end;i++){
     document.newPage();
     PdfImportedPage page=copy.getImportedPage(pdfr, i);
     copy.addPage(page);
    }
   }
  }
  document.close(); 
 

中文注释,问题解决.内存不再报错.

 

 

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值