Android 向页脚添加文本和图像

Android 向页脚添加文本和图像,android,pdf,itext,drawable,Android,Pdf,Itext,Drawable,我试图添加文本和页脚的页面,但它没有得到添加。当我尝试下面的方法时,会显示文本,但是如何添加带有图像的文本 try { java.io.InputStream ims = context1.getAssets().open("logo.png"); Bitmap bmp = BitmapFactory.decodeStream(ims); ByteArrayOutputStream stream = new ByteArrayOutputStream(); bmp

我试图添加文本和页脚的页面,但它没有得到添加。当我尝试下面的方法时,会显示文本,但是如何添加带有图像的文本

try {
    java.io.InputStream ims = context1.getAssets().open("logo.png");
    Bitmap bmp = BitmapFactory.decodeStream(ims);
    ByteArrayOutputStream stream = new ByteArrayOutputStream();
    bmp.compress(Bitmap.CompressFormat.PNG, 100, stream);
    Image image = Image.getInstance(stream.toByteArray());
    ColumnText.showTextAligned(writer.getDirectContent(),
        Element.ALIGN_CENTER, new Phrase(new Chunk(image, 0, 0)), (rect.getLeft() + rect.getRight()) / 2, rect.getBottom() - 18, 0);
  } catch (IOException ex) {
    return;
  } catch (BadElementException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}

首先:我很惊讶页面上会显示文本,因为假设
rect
是CropBox或MediaBox,在
rect.getBottom()-18
位置添加内容意味着在页面可视区域之外添加内容。(当然:我认为
rect
是可见区域的假设可能是错误的。)

至于您的问题:如果您使用
document.add()
,那么将
图像
包装在
中是可以的,但是
document.add()
不应该用于页面事件,因此您最好使用不同的方法:

ColumnText.showTextAligned(writer.getDirectContent(),
            Element.ALIGN_CENTER, new Phrase("Some Text"), (rect.getLeft() + rect.getRight()) / 2, rect.getBottom() - 18, 0);

另外:能否检查
stream.toByteArray()
提供的字节是否代表正确的PNG文件?为什么要以100%的质量压缩PNG?PNG是无损的(意味着质量参数将被忽略),您正在将一个PNG压缩为另一个PNG(我不明白您为什么要这样做)。

谢谢它的工作,但图像的大小实际上更大。。。如何为图像指定大小。有不同的方法可以做到这一点:
scalePercent()
scaleAbsolute()
,等等。。。请参阅以获取概述。
image.setAbsolutePosition((rect.getLeft() + rect.getRight()) / 2, rect.getBottom() + 18);
PdfContentByte canvas = writer.getDirectContent();
canvas.addImage(image);