0
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);
4

1 回答 1

1

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

至于你的问题:如果你使用 a 包裹ImageaChunk很好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(我不明白您为什么要这样做)。

于 2013-08-23T08:06:25.690 回答