PDF 添加文本并拼合
我正在开发一个 Web 应用程序,用于显示 PDF 并允许用户订购文档的副本。我们希望在显示 PDF 时动态添加文本,例如“未付费”或“样本”。我已经使用 itextsharp 完成了此操作。然而,页面图像很容易与水印文本分离并使用各种免费软件程序提取。
如何将水印添加到PDF中的页面,但将页面图像和水印拼合在一起,使水印成为pdf页面图像的一部分,从而防止水印被删除(除非该人想使用Photoshop)?
I'm developing a web application that displays PDFs and allows users to order copies of the documents. We want to add text, such as "unpaid" or "sample", on the fly when the PDF is displayed. I have accomplished this using itextsharp. However, the page images are easily separated from the watermark text and extracted using a variety of freeware programs.
How can I add the watermark to the pages in the PDF, but flatten the page images and watermark together so that the watermark becomes part of the pdf page image, thereby preventing the watermark from being removed (unless the person wants to use photoshop)?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
如果我是你,我会走一条不同的路。使用 iTextSharp(或其他库)将给定文档的每一页提取到文件夹中。然后使用一些程序(Ghostscript、Photoshop,也许是 GIMP),您可以将每个页面批量转换为图像。然后将覆盖文本写入图像上。最后使用 iTextSharp 将每个文件夹中的所有图像合并回 PDF。
我知道这听起来很痛苦,但我认为每个文档你只需要执行一次。
如果您不想走这条路,让我来教您如何提取图像。下面的大部分代码来自这篇文章。在代码末尾,我将图像保存到桌面。由于您已经获得了原始字节,因此您还可以轻松地将它们泵入 System.Drawing.Image 对象并将它们写回到新的 PdfWriter 对象中,这听起来像您熟悉。下面是一个针对 iTextSharp 5.1.1.0 的完整工作 WinForms 应用程序
If I were you I would go down a different path. Using iTextSharp (or another library) extract each page of a given document to a folder. Then use some program (Ghostscript, Photoshop, maybe GIMP) that you can batch and convert each page to an image. Then write your overlay text onto the images. Finally use iTextSharp to combine all of the images in each folder back into a PDF.
I know this sounds like a pain but you should only have to do this once per document I assume.
If you don't want to go down this route, let me get you going on what you need to do to extract images. Much of the code below comes from this post. At the end of the code I'm saving the images to the desktop. Since you've got raw bytes so you could also easily pump those into a
System.Drawing.Image
object and write them back into a newPdfWriter
object which is sounds like you are familiar with. Below is a full working WinForms app targetting iTextSharp 5.1.1.0整个页面必须呈现为图像。否则,您将获得“文本对象”(文本的各个单词/字母)和水印对象(覆盖图像),它们始终是页面的不同/单独部分。
The whole page would have to be rendered as an image. Otherwise you're got "text objects" (the individual words/letters of the text), and the watermark object (the overlay image), which will always be distinct/separate parts of the page.