Изображение водяного знака и таблица в 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), и вот результат:
Все функции, необходимые для достижения этой цели, были доступны в документации. Пожалуйста, прочитайте эту документацию, прежде чем отправлять другой вопрос.