IText를 사용하여 읽으려는 ~ 5MB 파일이 있습니다. 제 목표는이 PDF의 많은 페이지를 다른 PDF에 겹쳐서 만드는 것입니다.PDF를 읽을 때 IText OutOfMemoryError (Android)
이 내 코드입니다 :
try {
AssetManager assetManager = getActivity().getAssets();
InputStream istr = null;
PdfReader reader = null;
istr =(InputStream) assetManager.open("chem.pdf");
reader=new PdfReader(istr);
Document document = new Document();
PdfWriter writer= PdfWriter.getInstance(document, new FileOutputStream(Environment.getExternalStorageDirectory()+ "/pdfpdfpdfpdfpdf.pdf"));
document.open();
document.add(new Paragraph(" Generated By Harshvardhan Gupta"));
document.newPage();
PdfContentByte canvas = writer.getDirectContent();
PdfImportedPage page;
//Rectangle r=document.getPageSize();
float pos=720;
float CurPsize=0;
float counter=0;
float oldc=0;
//r.getBottom();
for(int m=1;m<35;m++,counter++) {
page = writer.getImportedPage(reader, m);
Rectangle r=reader.getPageSize(m);
CurPsize= (r.getTop()-r.getBottom());
pos=pos-CurPsize;
Rectangle q=reader.getPageSize(m+1);
int mq=(int) (q.getTop()-q.getBottom());
if(pos<mq+counter*25+50){
document.newPage();
pos=720;
counter=0;
}
canvas.setTextRenderingMode(PdfContentByte.TEXT_RENDER_MODE_FILL);
canvas.addTemplate(page, 1f, 0, 0, 1,100,pos-70-counter*25);
BaseFont bf= BaseFont.createFont();
canvas.setTextRenderingMode(PdfContentByte.TEXT_RENDER_MODE_FILL_STROKE);
canvas.beginText();
canvas.setFontAndSize(bf,14);
canvas.setTextMatrix(75, (float) ((float) (pos-70-counter*25)-10+CurPsize));
canvas.setLineWidth(0.5f);
canvas.showText(m+"."+" ");
canvas.endText();
}
document.close();
writer.freeReader(reader);
writer.close();
reader.close();
//spinner.setVisibility(View.INVISIBLE);
Log.d("OK", "done");
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (DocumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//spinner.setVisibility(View.INVISIBLE);
진행 물건의 공정한 금액이 있습니다,하지만 난 PDF가 자산에서 읽어도 전에 OutOfMemoryError를 슬로우 생각합니다.
이 전체 오류 로그입니다 :
06-21 19:39:12.090: E/AndroidRuntime(6844): FATAL EXCEPTION: main
06-21 19:39:12.090: E/AndroidRuntime(6844): java.lang.OutOfMemoryError
06-21 19:39:12.090: E/AndroidRuntime(6844): at java.io.ByteArrayOutputStream.expand(ByteArrayOutputStream.java:91)
06-21 19:39:12.090: E/AndroidRuntime(6844): at java.io.ByteArrayOutputStream.write(ByteArrayOutputStream.java:201)
06-21 19:39:12.090: E/AndroidRuntime(6844): at com.itextpdf.text.pdf.PdfReader.FlateDecode(PdfReader.java:2004)
06-21 19:39:12.090: E/AndroidRuntime(6844): at com.itextpdf.text.pdf.PdfReader.FlateDecode(PdfReader.java:1859)
06-21 19:39:12.090: E/AndroidRuntime(6844): at com.itextpdf.text.pdf.FilterHandlers$Filter_FLATEDECODE.decode(FilterHandlers.java:107)
06-21 19:39:12.090: E/AndroidRuntime(6844): at com.itextpdf.text.pdf.PdfReader.decodeBytes(PdfReader.java:2409)
06-21 19:39:12.090: E/AndroidRuntime(6844): at com.itextpdf.text.pdf.PdfReader.decodeBytes(PdfReader.java:2357)
06-21 19:39:12.090: E/AndroidRuntime(6844): at com.itextpdf.text.pdf.PdfReader.getStreamBytes(PdfReader.java:2422)
06-21 19:39:12.090: E/AndroidRuntime(6844): at com.itextpdf.text.pdf.PdfReader.readObjStm(PdfReader.java:1363)
06-21 19:39:12.090: E/AndroidRuntime(6844): at com.itextpdf.text.pdf.PdfReader.readDocObj(PdfReader.java:1305)
06-21 19:39:12.090: E/AndroidRuntime(6844): at com.itextpdf.text.pdf.PdfReader.readPdf(PdfReader.java:649)
06-21 19:39:12.090: E/AndroidRuntime(6844): at com.itextpdf.text.pdf.PdfReader.<init>(PdfReader.java:187)
06-21 19:39:12.090: E/AndroidRuntime(6844): at com.itextpdf.text.pdf.PdfReader.<init>(PdfReader.java:328)
06-21 19:39:12.090: E/AndroidRuntime(6844): at com.itextpdf.text.pdf.PdfReader.<init>(PdfReader.java:349)
06-21 19:39:12.090: E/AndroidRuntime(6844): at com.mainpackage.FragmentOne$1.onClick(FragmentOne.java:88)
06-21 19:39:12.090: E/AndroidRuntime(6844): at android.view.View.performClick(View.java:3511)
06-21 19:39:12.090: E/AndroidRuntime(6844): at android.view.View$PerformClick.run(View.java:14105)
06-21 19:39:12.090: E/AndroidRuntime(6844): at android.os.Handler.handleCallback(Handler.java:605)
06-21 19:39:12.090: E/AndroidRuntime(6844): at android.os.Handler.dispatchMessage(Handler.java:92)
06-21 19:39:12.090: E/AndroidRuntime(6844): at android.os.Looper.loop(Looper.java:137)
06-21 19:39:12.090: E/AndroidRuntime(6844): at android.app.ActivityThread.main(ActivityThread.java:4424)
06-21 19:39:12.090: E/AndroidRuntime(6844): at java.lang.reflect.Method.invokeNative(Native Method)
06-21 19:39:12.090: E/AndroidRuntime(6844): at java.lang.reflect.Method.invoke(Method.java:511)
06-21 19:39:12.090: E/AndroidRuntime(6844): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:825)
06-21 19:39:12.090: E/AndroidRuntime(6844): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:592)
06-21 19:39:12.090: E/AndroidRuntime(6844): at dalvik.system.NativeStart.main(Native Method)
주 내가 작은 파일 (200킬로바이트)를 사용하여 시도하고 작동합니다. 이것은 iText를 사용하여 Android에서 큰 파일을 읽을 수 없다는 뜻입니까?
어떤 버전을 사용하고 있습니까? PDF를 공유 할 수 있습니까? –