【问题标题】:Itext - Adding image in header - Empy ChunkItext - 在标题中添加图像 - Empy Chunk
【发布时间】:2019-03-15 02:00:50
【问题描述】:

我正在尝试将图像添加到 PdfPageEventHelper 类,正如我在原始文档中看到的那样,但是当尝试将带有图像的新块添加到短语时,它总是空的...

这是我的页眉和页脚类

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



    }

如果我尝试将图像添加到文档正文中,则完全没有问题,只是尝试将其添加到支持类时...还有其他方法吗? 谢谢

【问题讨论】:

  • 我的回答有帮助还是还有未解决的问题?我想知道是因为您完全没有回应。

标签: itext


【解决方案1】:

问题的原因是ColumnText.showTextAligned 使用了一个ColumnText 实例,其列矩形只有三个单位高。

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)

毕竟不是那么方便,而且对布局细节的影响更大......

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-05-04
    • 1970-01-01
    • 2014-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-20
    相关资源
    最近更新 更多