2015-06-17 2 views
1

Я хочу, чтобы добавить водяной знак к существующему PDF с помощью следующих действий:Watermark в PDF файл скрывается за образами

ITextSharp insert text to an existing pdf

3-ответ работает, но если PDF содержит изображение, водяной знак скрывается за ним.

+1

Зачем этот вопрос? Это настоящая проблема. Конечно, не было образца кода, но образцы кода находятся в другом вопросе. –

ответ

6

По вопросам, подобным этому, обратитесь к The Best iText Questions on StackOverflow. В этой книге собраны сотни ранее заданных вопросов и ответы на StackOverflow, в том числе ответы от нашего закрытого трекера. Это такой ответ, который ранее не публиковался в StackOverflow:

Если у вас непрозрачные фигуры в PDF (например, изображения, но также и цветные фигуры), вам нужно добавить водяной знак поверх существующего содержимого:

PdfContentByte canvas = pdfStamper.getOverContent(i); 

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

Я написал простой пример, который показывает, как это делается. Это называется TransparentWatermark Давайте посмотрим на результат:

enter image description here

Сначала я добавить текст «Этот водяной знак будет добавлен в существующий контент» в рамках существующего контента. Часть текста скрыта (как вы указываете в своем вопросе). Затем я добавляю текст «Этот водяной знак добавляется поверх существующего контента» поверх существующего содержимого. Этого может быть достаточно, если вы не боитесь, что какая-то важная информация будет потеряна, покрывая существующий контент. В этом случае, посмотрите на то, как я могу добавить текст «Этот ПРОЗРАЧНЫЙ добавляется водяной знак в верхней части существующего контента»:

public void manipulatePdf(String src, String dest) throws IOException, DocumentException { 
    PdfReader reader = new PdfReader(src); 
    int n = reader.getNumberOfPages(); 
    PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(dest)); 
    PdfContentByte under = stamper.getUnderContent(1); 
    Font f = new Font(FontFamily.HELVETICA, 15); 
    Phrase p = new Phrase(
     "This watermark is added UNDER the existing content", f); 
    ColumnText.showTextAligned(under, Element.ALIGN_CENTER, p, 297, 550, 0); 
    PdfContentByte over = stamper.getOverContent(1); 
    p = new Phrase("This watermark is added ON TOP OF the existing content", f); 
    ColumnText.showTextAligned(over, Element.ALIGN_CENTER, p, 297, 500, 0); 
    p = new Phrase(
     "This TRANSPARENT watermark is added ON TOP OF the existing content", f); 
    over.saveState(); 
    PdfGState gs1 = new PdfGState(); 
    gs1.setFillOpacity(0.5f); 
    over.setGState(gs1); 
    ColumnText.showTextAligned(over, Element.ALIGN_CENTER, p, 297, 450, 0); 
    over.restoreState(); 
    stamper.close(); 
    reader.close(); 
} 

Некоторые дополнительные советы и приемы:

  • Всегда используйте saveState() и restoreState() при изменении состояния графики. Если вы этого не сделаете, вы можете получить нежелательные эффекты, такие как другой контент, на который влияют сделанные вами изменения (например, вы не хотите, чтобы все содержимое стало прозрачным).
  • Режим рендеринга по умолчанию «fill», поэтому я изменяю непрозрачность заполнения.
  • В этом случае я определил непрозрачность заполнения 50% (0,5f). Выберите любое значение между 0.0f и 1.0f, если вы хотите изменить прозрачность текста.
+0

cool its working..thanks У меня есть еще один вопрос, можно ли просто поместить текстовое поле где-нибудь в PDF и сохранить, тогда новый pdf будет создан с текстом на том же самом месте ??? –

+0

Если у вас есть новый вопрос, напишите новый вопрос. Убедитесь, что ваш вопрос ясен. Вы хотели спросить: * Можно ли добавить местозаполнитель в PDF-файл, чтобы мы могли использовать этот PDF-файл в качестве шаблона и добавить текст, используя позицию заполнителя? * Если это так, ваш вопрос будет дублировать, а ответ можно найти в [The Best Questions on StackOverflow] (http://pages.itextpdf.com/ebook-stackoverflow-questions.html). Когда вы задаете вопросы по StackOverflow, вы должны прочитать документацию (у вас, вероятно, есть 2 downvotes для нарушения этого правила). –

+0

, так что мне нужно сделать здесь –

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