Изображение водяного знака и таблица в itext - отредактировано

Я хочу вставить таблицу поверх изображения водяного знака. Я проделал много шагов, но все помогаю в написании над изображением, не вставляя таблицу.

Изменить: изображение должно быть вставлено на каждой странице в документе PDF. Я хочу написать поверх него, используя pdf dTable. все поиски описывают, как написать текст поверх водяного знака.

например:document.add(getWatermarkedImage(cb, img, "some text"));

если бы я добавил pdf dtable в документ как document.add(таблица); это не будет по изображению. он будет вставлен над изображением.

как это мой стол:

outerCell = new PdfPCell(new Paragraph(" header 1"));
outerCell.setColspan(70);
outerCell.setBackgroundColor(BaseColor.LIGHT_GRAY);
outerTable.addCell(outerCell);

как я могу вставить этот внешний вид над водяным знаком

1 ответ

Ваш вопрос звучит неправильно. Это как если бы вы захотели добавить водяной знак изображения в документ, что адекватно объясняется во многих других вопросах, таких как " Установка фонового изображения для всех моих страниц в PDF" iText ASP C# и " Как добавить изображение на все страницы моего PDF? (Эти ответы касаются вопросов C#, но на официальном веб-сайте есть много примеров использования водяных знаков и страниц.)

Как и в случае с Madhesh, вы путаете читателей Stackru даже после того, как прочитали мой ответ на вопрос " Как добавить текст в изображение?". где я написал:

Это хороший пример вопроса, который сформулирован так, что никто не может ответить на него правильно. После множества комментариев вперед и назад стало ясно, что ОП хочет добавить текстовый водяной знак на изображение. Плохо фразы вопросы могут быть очень разочаровывающими. Пожалуйста, примите это во внимание, когда задаете вопрос. В этом случае я дал несколько неправильных ответов, прежде чем стало ясно, что на самом деле спрашивали.

Вы хотите добавить PdfPTable для Image и ваших знаний недостаточно, чтобы понять и адаптировать примеры, представленные с ответами на такие вопросы, как Как добавить текст к изображению? и рисовать линии на изображении в PDF, используя ItextSharp.

То, что вы спрашиваете, очень просто.

getWatermarkedImage() метод, который вы упоминаете, выглядит так:

public Image getWatermarkedImage(PdfContentByte cb, Image img) throws DocumentException {
    float width = img.getScaledWidth();
    float height = img.getScaledHeight();
    PdfTemplate template = cb.createTemplate(width, height);
    template.addImage(img, width, 0, 0, height, 0, 0);
    template.saveState();
    template.setColorStroke(BaseColor.GREEN);
    template.setLineWidth(3);
    template.moveTo(width * .25f, height * .25f);
    template.lineTo(width * .75f, height * .75f);
    template.moveTo(width * .25f, height * .75f);
    template.lineTo(width * .25f, height * .25f);
    template.stroke();
    template.setColorStroke(BaseColor.WHITE);
    template.ellipse(0, 0, width, height);
    template.stroke();
    template.restoreState();
    return Image.getInstance(template);
}

Этот пример взят из ответа на вопрос " Как нарисовать линии на изображении?

Вы не хотите рисовать линии, поэтому вы можете удалить весь код, который рисует линии:

public Image getWatermarkedImage(PdfContentByte cb, Image img) throws DocumentException {
    float width = img.getScaledWidth();
    float height = img.getScaledHeight();
    PdfTemplate template = cb.createTemplate(width, height);
    template.addImage(img, width, 0, 0, height, 0, 0);
    // removed the code that draws lines
    return Image.getInstance(template);
}

Вместо линий вы хотите нарисовать PdfPTable Итак, мы добавим код где это говорит // removed the code that draws lines, Как задокументировано, добавление таблицы в абсолютной позиции выполняется с помощью writeSelectedRows() метод:

public Image getWatermarkedImage(PdfContentByte cb, Image img) throws DocumentException {
    float width = img.getScaledWidth();
    float height = img.getScaledHeight();
    PdfTemplate template = cb.createTemplate(width, height);
    template.addImage(img, width, 0, 0, height, 0, 0);
    PdfPTable table = new PdfPTable(2);
    table.setTotalWidth(width);
    table.getDefaultCell().setBorderColor(BaseColor.Yellow);
    table.addCell("Test1");
    table.addCell("Test2");
    table.addCell("Test3");
    table.addCell("Test4");
    table.writeSelectedRows(0, -1, 0, height, template);
    return Image.getInstance(template);
}

Я адаптировал один из многих примеров в официальной документации (см. WatermarkedImages5), и вот результат:

введите описание изображения здесь

Все функции, необходимые для достижения этой цели, были доступны в документации. Пожалуйста, прочитайте эту документацию, прежде чем отправлять другой вопрос.

Другие вопросы по тегам