web-dev-qa-db-ja.com

ドローアブルから画像を取得し、iTextを使用してPDF

画像をAndroid PDF iTextを使用して追加したい。最初に画像をSDCardに保存せずにこれを実現したい。画像をres/drawableフォルダーに入れるしかし、画像パスの証明は機能せず、FileNotFound例外がスローされます。私のパスは次のようになります。

String path = “res/drawable/myImage.png”
Image image = Image.getInstance(path);
document.add(image);

ここで、getInstance(…)メソッドに正しいファイルパスを追加する方法を提案してください。ありがとう

10
sns

もちろん、そのようには機能しません。

画像をアセットフォルダに移動して、getassets()メソッドでアクセスします

// load image
    try {
            // get input stream
           InputStream ims = getAssets().open("myImage.png");
           Bitmap bmp = BitmapFactory.decodeStream(ims);
           ByteArrayOutputStream stream = new ByteArrayOutputStream();
           bmp.compress(Bitmap.CompressFormat.PNG, 100, stream);
           Image image = Image.getInstance(stream.toByteArray());
           document.add(image);
        }
   catch(IOException ex)
        {
            return;
        }
30
Festus Tamakloe

私はあなたの問題の解決策を見つけました。ドローアブルフォルダから画像を取得し、iTextを使用してPDFファイルに配置する場合は、次のコードを使用します。

try {
    document.open();
    Drawable d = getResources().getDrawable(R.drawable.myImage);
    BitmapDrawable bitDw = ((BitmapDrawable) d);
    Bitmap bmp = bitDw.getBitmap();  
    ByteArrayOutputStream stream = new ByteArrayOutputStream();
    bmp.compress(Bitmap.CompressFormat.PNG, 100, stream);
    Image image = Image.getInstance(stream.toByteArray());
    document.add(image);    
    document.close();
} catch (Exception e) {
      e.printStackTrace();
}
11
Tony86

画像が動的である場合(つまり、コンパイル時にアセットフォルダに画像を追加できない場合)、iTextを使用して画像をPDFに追加するコードは次のとおりです。

public void addImage(Document document,ImageView ivPhoto) throws DocumentException {
try {
     BitmapDrawable drawable = (BitmapDrawable) ivPhoto.getDrawable();       
     Bitmap bitmap = drawable.getBitmap();

     ByteArrayOutputStream stream = new ByteArrayOutputStream();    
     bitmap.compress(Bitmap.CompressFormat.PNG, 100, stream);                             
     byte[] imageInByte = stream.toByteArray();
     Image image = Image.getInstance(imageInByte);
     document.add(image);
    }
    catch(IOException ex)
    {
        return;
    }
}
1
user1400641

これが私のコードです。特定の位置に画像を設定するには、画像をアセットフォルダーに移動して、getassets()メソッドで画像を取得します。これがお役に立てば幸いです。

   try {

        InputStream ims = getAssets().open("header1.png");
        Bitmap bmp = BitmapFactory.decodeStream(ims);
        ByteArrayOutputStream stream = new ByteArrayOutputStream();
        bmp.compress(Bitmap.CompressFormat.PNG, 100, stream);
        Image image = Image.getInstance(stream.toByteArray());
        image.setAbsolutePosition(10f,750f);
        image.scaleToFit(850,78);
        document.add(image);
    }
    catch(IOException ex)
    {
        ex.printStackTrace();
        return;
    }