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

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

ITextSharp insert text to an existing pdf

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

【问题讨论】:

  • 为什么要否决这个问题?这是一个真正的问题。当然,没有代码示例,但代码示例在另一个问题中。

标签: c# pdf itextsharp


【解决方案1】:

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

如果您的 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 StackOverflow 中找到。在 StackOverflow 上提问时,您应该已阅读文档(您可能因违反该规则而获得 2 票反对)。
  • 那么我需要在这里做什么
猜你喜欢
  • 1970-01-01
  • 2016-09-07
  • 1970-01-01
  • 2019-10-22
  • 1970-01-01
  • 2016-04-11
  • 2019-08-18
  • 2021-03-26
  • 1970-01-01
相关资源
最近更新 更多