我正在尝试将 iTextSharp 用于移动应用程序 .
所以我正在创建pdf文件并附加这个带有图像的pdf,其中绝对位置是图像的高度/宽度!
所以现在,我需要将图像(对于我应该使用新页面的每个图像)添加到我现有的pdf文件中,我也想知道如何从我的PDF文件中提取这些图像!
目前我试图通过 stamper 添加图像:
using (System.IO.Stream inputPdfStream = new FileStream(PathOfPdf, FileMode.Open, FileAccess.Read, FileShare.Read))
{
using (System.IO.Stream inputImageStream = new FileStream(PathOfImage, FileMode.Open, FileAccess.Read, FileShare.Read))
{
using (System.IO.Stream outputPdfStream = new FileStream(PathOfPdf.Substring(0, PathOfPdf.Length - 4) + "T.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(image.Width, image.Height);
pdfContentByte.AddImage(image);
stamper.Close();
}
}
}
问题是新图像 just 覆盖了pdf的第一页并保存!
为什么会这样?另外,我如何从pdf文件中提取这些图像!?
谢谢!!
1 回答
通常情况下,我会将此问题标记为重复,因为您的问题之前已得到解答,但您不是在问一个问题,而是使用您的帖子提出两个不同的问题,我必须提供一个答案链接到答案对这两个问题 . 我向SO用户提前道歉,他们考虑回答之前已经回答的问题,因为没有在SO上做过 .
Question #1:
问题是您的图片覆盖了现有内容,而不是出现在新页面上 .
这是因为您故意"stamp"第1页上的图像 . 您使用
stamper.GetOverContent(1);
获得表示第1页内容的画布,然后在该现有内容上添加内容 .实际上,您要插入一个新页面,如我在"approach 2"中对此问题的回答所述:How to add a cover/PDF in a existing iText document
你想要这样的东西:
在第一行中,我们创建了图像实例 . 在第二行中,我们将页面插入现有文档 . 我们选择它作为第1页,我们希望它与图像具有相同的大小(类
Image
extendsRectangle
) . 在第三行中,我们获取新(空白)页面的内容1.您写了"where absolution position is Height/Width of image!"我认为这是您的问题中的错误,因为它不可见:它将被添加到页面的可见区域之外 .Question #2:
如何从现有PDF文档中提取图像?
请阅读以下答案:
Extract images using iTextSharp
Extract Images from PDF coordinates using iText
Extract Image from a particular page in PDF
......