2016-06-25 2 views
-2

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

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

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

, если я добавил pdfdtable к документу, как document.add (таблица); это не будет над изображением. он будет вставлен над изображением.

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

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

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

+0

Этот вопрос должен быть закрыт, потому что неясно: вы создаете документ с нуля или добавляете водяной знак к существующему документу? Вы используете iText 5 или используете iText 7. Вы утверждаете, что вы выполнили много шагов *, но зачем вам верить, если вы не покажете нам, что вы пробовали. Вы даже прочитали документацию. На официальном веб-сайте имеется буквально дюжина [примеров водяных знаков] (http://developers.itextpdf.com/search/node/watermark). Неужели один из этих примеров может вам помочь? Если нет, почему бы и нет? –

+0

Если вы создаете документ с нуля, вам нужно прочитать ответ на [Как добавить водяной знак на страницу с непрозрачным изображением?] (Http://developers.itextpdf.com/question/how-add-watermark -page-opaque-image) Если вы добавляете водяной знак в существующий документ, вам нужно [Как делать водяные знаки с помощью текста или изображений?] (http://developers.itextpdf.com/question/how-watermark-pdfs -using-text-or-images) Я бы закрыл вопрос, отметив его как дубликат [вопроса, который объясняет, как сделать прозрачные изображения) (http://stackoverflow.com/questions/27241731/), но это ответ никогда не получил голоса. –

+1

Покажите нам все много шагов, за которыми вы следовали, и кто-то (а не я) войдет, чтобы рассказать вам, что вам нужно изменить. Без вашего кода нет ответа. –

ответ

0

Ваш вопрос звучит так. Это как если вы хотите добавить изображение водяного знака к документу, который адекватно объясняется во многих других вопросах, таких как Set a fix background image for all my pages in PDF iText ASP C# и How can I add an image to all pages of my PDF? (Эти ответы о C# вопросов, но official web site имеет много watermark и page event пример.)

Так же, как madhesh, вы путаете читатель StackOverflow, даже после того, как вы прочитали мой ответ на вопрос How to add text to an image? где я писал:

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

Вы хотите добавить PdfPTable к Image и ваши знания недостаточно, чтобы понять и адаптировать приведенные примеры с ответами на такие вопросы, как How to add text to an image? и Draw Lines on Image in PDF using 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); 
} 

Это пример, взятый из ответа на вопрос How to draw lines on an image?

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

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, поэтому мы объявление d некоторый код, где он говорит // 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), и это результат:

enter image description here

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

Смежные вопросы