首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > PowerDesigner >

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

2012-12-22 
内存溢出---iText读取pdf--举一反三法本人要对pdf文件进行操作,截取一个pdf文件的n-m页.??源码如下:FileIn

内存溢出---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();
?

?

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

?

?

?

?

?

?

?

?

热点排行