我有一个现有的PDF,我可以使用FdFWriter输入到文本框.它运作良好.现在我有了一张图片.我已阅读文档并查看了许多示例,但它们都创建了新文档并插入了图像.我想拍摄现有的PDF并将图像插入图像字段或按钮的图标图像.我试过但它破坏了文件.
我需要能够获取现有文档并在其上放置图像.我不想打开,阅读,替换和删除原始文件.此原始更改和名称"原始"仅表示此上下文中的源文件.像这样的许多PDF文件需要图像.
感谢您的任何帮助.
编辑 - 我非常感谢下面的代码.它工作得很好,但对我来说问题是现有的PDF上有数字签名.当像这样复制文档(到result.pdf)时,这些签名虽然仍然存在,但具有不同的字节数或其他已损坏的项.这意味着签名虽然出现在result.pdf上,但它们旁边有一个图标,表示"无效签名".
如果它很重要我使用Topaz签名板来创建我的签名,这有自己的安全性.仅仅复制PDF不会破坏它,但下面的过程将会.
我试图将图像放在现有文档上,而不是它的副本,在这种情况下很重要.
此外,签名,我的意思是手写,而不是密码.
再次感谢你.
编辑 - 可以使用PdfSignatureAppearance吗?
编辑 - 我似乎能够做到:
var stamper = new PdfStamper(reader,outputPdfStream,'1',true);
如果要更改现有PDF文件的内容并添加额外内容(如水印,页面编号,额外标题),PdfStamper是您需要的对象.我已成功使用以下代码将图像插入到现有pdf文件中的给定绝对位置:
using System.IO; using iTextSharp.text; using iTextSharp.text.pdf; class Program { static void Main(string[] args) { using (Stream inputPdfStream = new FileStream("input.pdf", FileMode.Open, FileAccess.Read, FileShare.Read)) using (Stream inputImageStream = new FileStream("some_image.jpg", FileMode.Open, FileAccess.Read, FileShare.Read)) using (Stream outputPdfStream = new FileStream("result.pdf", FileMode.Create, FileAccess.Write, FileShare.None)) { var reader = new PdfReader(inputPdfStream); var stamper = new PdfStamper(reader, outputPdfStream); var pdfContentByte = stamper.GetOverContent(1); Image image = Image.GetInstance(inputImageStream); image.SetAbsolutePosition(100, 100); pdfContentByte.AddImage(image); stamper.Close(); } } }
插入图像时,您可以调整图像大小.您可以在iTextSharp文档中查看转换矩阵.