正如我在原始文档中所看到的,我正在尝试将图像添加到PdfPageEventHelper
类中,但是当尝试将带有图像的新块添加到短语中时,它总是空的... < / p>
这是我的页眉和页脚类
class PDFHeaderFooter extends PdfPageEventHelper {
public PDFHeaderFooter() throws BadElementException, MalformedURLException, IOException {
super();
}
Image image = Image.getInstance(imagesDir + "logo.png");
Phrase header = new Phrase(new Chunk(image, 0, 0, true));
int pagenumber;
public void onChapter(PdfWriter writer, Document document, float paragraphPosition, Paragraph title) {
pagenumber = 1;
}
public void onStartPage(PdfWriter writer, Document document) {
pagenumber++;
}
public void onEndPage(PdfWriter writer, Document document) {
Rectangle rect = writer.getBoxSize("art");
logger.debug(header.getContent());
ColumnText.showTextAligned(writer.getDirectContent(), Element.ALIGN_RIGHT, header, rect.getRight(),
rect.getTop(), 0);
ColumnText.showTextAligned(writer.getDirectContent(), Element.ALIGN_RIGHT,
new Phrase(String.format("pag. %d", pagenumber), fontSize9), (rect.getLeft() + rect.getRight()) / 2,
rect.getBottom() - 18, 0);
}
}
如果我尝试将图像添加到文档正文中,则完全没有问题,只是在尝试添加支持类时...还有其他方法吗? 谢谢
答案 0 :(得分:0)
问题的原因是ColumnText.showTextAligned
使用一个ColumnText
实例,该实例的列矩形只有3个单位高。
在这种情况下,ColumnText
代码被设计为以其首选的高度(通常超过3个单位)输出一行文本。这很可能是一种使ColumnText.showTextAligned
适用于一行文本的黑客。
不幸的是,ColumnText
代码同时将块中的图像按比例缩小到了3个单位可用的列高,使其几乎不超过污点,甚至掉落。
因此,对于包含图像块的短语,不应使用ColumnText.showTextAligned
便捷方法,而应显式使用具有合理列矩形高度的ColumnText
实例,例如替换
ColumnText.showTextAligned(writer.getDirectContent(), Element.ALIGN_RIGHT, header, rect.getRight(),
rect.getTop()-30, 0);
作者
ColumnText ct = new ColumnText(writer.getDirectContent());
ct.setSimpleColumn(header, rect.getLeft(), rect.getTop(30), rect.getRight(), rect.getTop(), 2, Element.ALIGN_RIGHT);
try {
ct.go();
} catch (DocumentException e) {
throw new ExceptionConverter(e);
}
({AddHeaderImage页面事件监听器方法onEndPage
)
毕竟,它并没有那么方便,而且对布局细节的影响更大……