13

我想使用 iText 将图像添加到 android PDF。我想在不先将图像保存到 SDCard 的情况下实现这一点。我将图像放入 res/drawable 文件夹,但证明图像路径不起作用并且抛出 FileNotFound 异常。我的路径是这样的:

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

现在请建议我一个解决方案,我将如何将正确的文件路径添加到 getInstance(...) 方法。谢谢

4

5 回答 5

32

当然,它不会那样工作。

将您的图像移动到资产文件夹以使用 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;
        }
于 2013-04-01T11:04:29.060 回答
17

我为您的问题找到了解决方案。如果您想从可绘制文件夹中获取图像并使用 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();
}
于 2014-12-03T16:14:09.470 回答
1

这是使用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;
    }
}
于 2014-03-26T03:54:53.683 回答
0

这是我的代码,要将图像设置在特定位置,请将图像移动到资产文件夹以通过 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;
    }
于 2018-09-17T05:47:27.753 回答
-1
try {
    FileInputStream in = new FileInputStream("input file uri");
    PdfReader pdfReader = new PdfReader(in);
    PdfStamper pdfStamper = new PdfStamper(pdfReader, new FileOutputStream("output file uri"));
    PdfContentByte content = pdfStamper.getOverContent(1);
   Image deliverImg = Image.getInstance("image URI");
   deliverImg.setAbsolutePosition(420f, 100f);
   content.addImage(deliverImg);
   pdfStamper.close();
} catch (DocumentException de) {
   Log.e("PDFCreator", "DocumentException:" + de);
} catch (IOException e) {
   Log.e("PDFCreator", "ioException:" + e);
}
于 2018-06-13T12:40:10.463 回答