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);
答案 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(我不明白为什么要这样做)。