2009-02-24 82 views
36

我有一个现有的PDF,我可以使用FdFWriter输入文本框。它运作良好。现在我有一个形象。我已阅读文档并查看了许多示例,但它们都创建新文档并插入图像。我想采用现有的PDF并将图像插入图像字段或作为按钮的图标图像。我已经尝试过,但它腐败的文件。如何在现有的PDF中插入iTextSharp的图像?

我需要能够采取现有的文件,并在上面放置一个图像。我不想打开,阅读,替换和删除原件。原始更改和名称“原始”仅表示此上下文中的源文件。有很多像这样的PDF文件需要一个图像。

谢谢你的帮助。

编辑 - 我非常感谢下面的代码。它效果很好,但对我来说问题是现有的PDF上有数字签名。当文档像这样复制(到result.pdf中)时,这些签名虽然仍然存在,但它们具有不同的字节数或其他已损坏的项。这意味着这些签名在显示在result.pdf上时,在它们旁边有一个图标,表示“无效签名”。

万一它很重要我使用黄玉签名板来创建我自己的签名,这是它自己的安全。仅仅复制PDF不会破坏它,但下面的过程将会发生。

我想将图像放在现有文档上,而不是它的副本,在这种情况下很重要。

另外,通过签名,我的意思是手写的,而不是PIN码。

再次感谢您。

编辑 - 可否使用PdfSignatureAppearance?

编辑 - 我似乎能够做到这一点的:

VAR压模=新PdfStamper(读卡器,outputPdfStream, '1',真);

+0

这也可能是使用的: http://stackoverflow.com/questions/7115242/insert-an-image-in-pdf-using-itextsharp – 2012-04-03 21:44:14

回答

56

如果要更改现有PDF文件的内容并添加额外内容(如水印,pagenumbers和额外的标题),那么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文档中查看transformation matrix

+0

有没有办法做到这一点的地方放置原始图像而不是result.pdf?谢谢你的回答。 – johnny 2009-02-25 16:13:30

+0

原因是因为文档的数字签名被进程损坏。 – johnny 2009-02-25 16:50:38

1

我可以通过简单地添加以下行到我的签名代码添加图像

var image = iTextSharp.text.Image.GetInstance(@"C:\Users\sushil\Documents\sansign.jpg"); 
appearance.Acro6Layers = true; 
appearance.SignatureGraphic = image; 
appearance.SignatureRenderingMode = PdfSignatureAppearance.RenderingMode.GRAPHIC_AND_DESCRIPTION; 

正如我解决我的问题用可见的数字签名签署文档,现在我可以同时拥有图像和数字签名属性