向页脚添加文本和图像

时间:2013-08-22 15:36:05

标签: android pdf itext drawable

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();
}

我正在尝试向页面添加文本和页脚,但它没有添加。当我尝试下面的内容时,会显示文字,但如何添加带图片的文字

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

1 个答案:

答案 0 :(得分:1)

首先:我很惊讶文本出现在页面上,因为假设rect是CropBox或MediaBox,在位置rect.getBottom() - 18添加一些东西意味着你要在视觉之外添加一些东西页面区域。 (当然:也许我认为rect是可见区域可能是错误的。)

关于您的问题:如果您使用Image,将Chunk包裹在document.add()内即可,但document.add()不应在页面事件中使用,因此你可能会采用不同的方法做得更好:

image.setAbsolutePosition((rect.getLeft() + rect.getRight()) / 2, rect.getBottom() + 18);
PdfContentByte canvas = writer.getDirectContent();
canvas.addImage(image);

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