PDF文件中的水印隐藏在图像后面

Posted

技术标签:

【中文标题】PDF文件中的水印隐藏在图像后面【英文标题】:Watermark in PDF file is hiding behind images 【发布时间】:2015-09-02 20:07:10 【问题描述】:

我想使用以下方法为现有 PDF 添加水印:

ITextSharp insert text to an existing pdf

第三个答案有效,但如果 PDF 包含图像,则水印隐藏在其后面。

【问题讨论】:

为什么要否决这个问题?这是一个真正的问题。当然,没有代码示例,但代码示例在另一个问题中。 【参考方案1】:

如有此类问题,请咨询The Best iText Questions on ***。这本书捆绑了数百个以前在 *** 上发布和回答的问题,包括来自我们关闭的问题跟踪器的一些答案。这是一个之前没有在 *** 上发布过的答案:

如果您的 PDF 中有不透明的形状(例如图像,还有彩色形状),您需要在现有内容的顶部添加水印:

PdfContentByte canvas = pdfStamper.getOverContent(i);

现在文字将覆盖图像,但它可能会隐藏一些重要信息。如果你想避免这种情况,你需要引入透明度。

我写了一个简单的例子来说明这是如何完成的。它被称为TransparentWatermark 我们来看看结果:

首先,我在现有内容下添加文本“此水印添加在现有内容下”。 部分文本被隐藏(正如您在问题中指出的那样)。 然后我在现有内容之上添加文本“此水印添加在现有内容之上”。这可能就足够了,除非您担心某些关键信息会因覆盖现有内容而丢失。 在这种情况下,看看我是如何添加文本“这个透明水印是在现有内容之上添加的”:

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()。如果不这样做,您可能会得到不良影响,例如受您所做更改影响的其他内容(例如,您不希望所有内容都变得透明)。 文本的默认渲染模式是“填充”,因此我更改了填充不透明度。 在这种情况下,我将填充不透明度定义为 50% (0.5f)。如果要更改文本的透明度,请选择 0.0f 和 1.0f 之间的任何值。

【讨论】:

酷它的工作..谢谢我还有一个问题是这可能只是在pdf上的任何位置放置一个文本框并保存然后新的pdf会在同一位置创建文本?? 如果您有新问题,请发布新问题。确保你的问题很清楚。您的意思是要问:是否可以在 PDF 中添加占位符,以便我们可以将此 PDF 用作模板并使用占位符的位置添加文本?​​ 如果是这样,您的问题是是重复的,答案可以在The Best Questions on *** 中找到。在 *** 上提问时,您应该已阅读文档(您可能因违反该规则而获得 2 票反对)。 那么我需要在这里做什么

以上是关于PDF文件中的水印隐藏在图像后面的主要内容,如果未能解决你的问题,请参考以下文章

开工啦!批量向PDF文件添加中文水印...

C#/VB.NET 给PDF文档添加文本/图像水印

当用户尝试下载文件时在 pdf 文件上应用水印

利用PDF编辑器怎么添加文档中的水印?

如何在iospdf文件中加水印

Java操作PDF,在PDF文件指定位置输出水印