2017-11-28 63 views
0

を使用して、私は次のようなデータが含まれている活性を有する:画像からPDFを作成します - アンドロイドItextPdf

enter image description here

私は、このビューからPDFを生成するには、次のコードを使用しています:

ByteArrayOutputStream stream = new ByteArrayOutputStream(); 
bitmap.compress(Bitmap.CompressFormat.JPEG, 10, stream); 
Image image = Image.getInstance(stream.toByteArray()); 
image.setAbsolutePosition(0, 0); 

Document document = new Document(image); 
PdfWriter.getInstance(document, new FileOutputStream(filePath)); 
document.open(); 
document.add(image); 
document.close(); 

しかし、私がrecyclerviewに20行以上ある場合、私はこのエラーを受け取ります:

exceptionconverter: com.itextpdf.text.documentexception: the page size must be smaller than 14400 by 14400. it's 1080.0 by 25288.0 

これは画像の高さが14400の最大ページサイズを超えているためです。私はその部分を持っています。

しかし、イメージサイズがページサイズを超えた場合、イメージを2ページに分割する方法を知りたいと思います。

 float width = image.getScaledWidth(); 
     float height = image.getScaledHeight(); 
     Rectangle page = new Rectangle(width, height/2); 

     Document document = new Document(page); 
     PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(filePath)); 
     document.open(); 
     PdfContentByte canvas = writer.getDirectContentUnder(); 
     canvas.addImage(image, width, 0, 0, height, 0, -height/2); 
     document.newPage(); 
     canvas.addImage(image, width, 0, 0, height, 0, 0); 
     document.newPage(); 
     canvas.addImage(image, width, 0, 0, height, -width/2, - height/2); 
     document.newPage(); 
     canvas.addImage(image, width, 0, 0, height, -width/2, 0); 
     document.close(); 

しかし、まだそれが働いて取得することができません:

は、私は、次のコードを試してみました。誰かがこれについて正しい方向に私を指摘することができますか?

答えて

1

これは機能している場合と動作しない場合があります。試してみてください。 ビットマップのサイズを変更するには、次の方法を使用してください。

public Bitmap getResizedBitmap(Bitmap image, int maxSize) { 
    int width = image.getWidth(); 
    int height = image.getHeight(); 

    float bitmapRatio = (float)width/(float) height; 
    if (bitmapRatio > 1) { 
     width = maxSize; 
     height = (int) (width/bitmapRatio); 
    } else { 
     height = maxSize; 
     width = (int) (height * bitmapRatio); 
    } 
    return Bitmap.createScaledBitmap(image, width, height, true); 
} 
+0

よろしくお願いします。私はこれで試して、それは最大50行で動作しています。どうもありがとう :) – user2893564

関連する問題