Itext - Добавление изображения в заголовок - Empy Chunk - PullRequest
0 голосов
/ 01 марта 2019

Я пытаюсь добавить изображение в класс 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);
        }



    }

Если я пытаюсь добавить изображение в тело документа, проблем нет вообще, просто при попытке добавить его в класс поддержки.. есть другой способ?спасибо

1 Ответ

0 голосов
/ 14 марта 2019

Причина проблемы в том, что 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)

В конце концов, это не так уж и удобно, и больше влияет на детали макета ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...