C# 正在尝试使用iTextSharp添加PDF戳记;字节数组不是可识别的imageformat“;
我想在PDF中添加一个戳记,其中戳记文件本身就是PDF。这是我的密码:C# 正在尝试使用iTextSharp添加PDF戳记;字节数组不是可识别的imageformat“;,c#,pdf,itextsharp,C#,Pdf,Itextsharp,我想在PDF中添加一个戳记,其中戳记文件本身就是PDF。这是我的密码: void addImage(string inputPath,string imagePath,string outputPath,int pageNumber) { Stream inputImageStream = new FileStream(imagePath, FileMode.Open, FileAccess.Read, FileShare.Read); PdfReader pdfReader
void addImage(string inputPath,string imagePath,string outputPath,int pageNumber)
{
Stream inputImageStream = new FileStream(imagePath, FileMode.Open, FileAccess.Read, FileShare.Read);
PdfReader pdfReader = new PdfReader(inputPath);
PdfStamper pdfStamper = new PdfStamper(pdfReader, new FileStream(outputPath, FileMode.Create));
PdfContentByte pdfContentByte = pdfStamper.GetOverContent(pageNumber);
iTextSharp.text.Image image = iTextSharp.text.Image.GetInstance(inputImageStream);
image.SetAbsolutePosition(100, 100);
pdfContentByte.AddImage(image);
}
void addImageTest()
{
string sourceFile = @"C:\somefolder\source.pdf";
string stampFile = @"C:\somefolder\stamp.pdf";
string destFile = @"C:\somefolder\destination.pdf";
addImage(sourceFile, stampFile, destFile, 1);
return;
}
在调用GetInstance()
时,我得到以下异常:
The byte array is not a recognized imageformat.
更新:看看,我发现它可以与GIF、TIFF、JPEG、PNG、WMF和BMP一起使用,但不能与PDF一起使用。所以我想我需要想出另一种方法来使用PDF作为图像。有什么想法吗?PDF是一种文档格式,而不是图像格式,因此
image.GetInstance()
不接受PDF字节。这并不意味着没有解决办法
PDF文档可以通过PdfReader
对象读取:
PdfReader reader = new PdfReader(src);
PdfImportedPage page = writer.GetImportedPage(reader, 1);
您可以使用PdfImportedPage
对象重用正在读取的PDF中的页面:
PdfReader reader = new PdfReader(src);
PdfImportedPage page = writer.GetImportedPage(reader, 1);
在上面的一行中,writer
是您正在创建的文档的PdfWriter
实例。GetImportedPage
方法将page
所需的资源复制到新文件中。资源可以是字体、图像等
PdfImportedPage
扩展了PdfTemplate
PdfTemplate
是用于表单XObject的类。光栅图像存储为称为图像XObject的外部对象。矢量数据(例如WMF、导入的PDF页面、PDF语法流)存储为表单XObject
现在,您有两个不同的选项可将名为page
的PdfTemplate
(或PdfImportedPage
)添加到文档中
AddTemplate()
方法:writer.DirectContent.AddTemplate(第页,x,y)代码>
PdfTemplate
包装在Image
对象中:iTextSharp.text.Image Img=iTextSharp.text.Image.GetInstance(第页)代码>
writer
:
pdfStamper.GetImportedPage(读取器,1)代码>
pdfStamper.GetOverContent(页码).AddTemplate(第x、y页)代码>
我的例子是在您从头开始创建PDF的情况下制作的。您看到的不是iTextSharp的官方来源,而是fork的官方来源。官方来源可在以下网址找到:。另外,您使用的版本已经有几年的历史了。这确实使我能够添加PDF,但我确实希望将其添加为普通戳记,以便可以选择、拖动页面并删除它。使用
AddTemplate()
似乎将其添加为静态内容——我是否遗漏了什么?您可以将模板用作戳记批注的外观。如果这对你不起作用,请告诉我。请看,我遵循的是itextpdf.com示例,但是app.AddImage(stampImg)
引发了异常:图像必须具有绝对位置。
没关系,忘记了SetAbsolutePosition(0,0)
调用。很好!