首页 新闻 会员 周边

如何利用 iTextSharp往已经存在的PDF文档中加入图片

0
悬赏园豆:10 [已关闭问题] 关闭于 2015-04-01 20:10

自己用C#尝试了一天多也没有实现往现有的PDF中添加一张新的图片而不覆盖掉原有的文件。

主要是想实现往现有的PDF文件中添加新的图片。看了很多方法都是新建PDF文档并且添加新的图片到新的PDF中,这种很容易实现。

我写了一部分代码可供参考,希望各位大神帮忙指点迷津:

string imagePath = directory + "\\save.jpg";  //要插入的图片

PdfReader reader = new PdfReader(@"C:\Users\Desktop\PDF.pdf");     //读取现有的PDF文档

int n = reader.NumberOfPages;    //获取页码        

iTextSharp.text.Rectangle psize = reader.GetPageSize(1);      //获取第一页      

float width = psize.Width;            

float height = psize.Height;                        

Document document = new Document(psize, 50, 50, 50, 50);     //设置位置       

PdfWriter writer = PdfWriter.GetInstance(document,new FileStream(filename, FileMode.Append));            

document.Open();            

iTextSharp.text.Image img = iTextSharp.text.Image.GetInstance(imagePath);           //插入图片

img.SetAbsolutePosition(440, 800);            

writer.DirectContent.AddImage(img);         //添加图片   

document.Close();

 

希望各位大神能够给出一段完整的C#代码实现添加图片到已经存在的PDF中。

小弟在这里先感谢各位了

回望天涯的主页 回望天涯 | 初学一级 | 园豆:95
提问于:2015-03-26 23:47
< >
分享
所有回答(4)
0
using (Stream inputPdfStream = new FileStream(Server.MapPath("~") + "/pdfimage/ceshi1.pdf", FileMode.Open, FileAccess.Read, FileShare.Read))
            using (Stream inputImageStream = new FileStream(Server.MapPath("~") + "/pdfimage/4addaddf-f8ed-464c-987a-4f5155793fcb1.jpg", FileMode.Open, FileAccess.Read, FileShare.Read))
            using (Stream outputPdfStream = new FileStream(Server.MapPath("~") + "/pdfimage/ceshi2.pdf", FileMode.Create, FileAccess.Write, FileShare.None))
            {
                var reader = new PdfReader(inputPdfStream);
                var stamper = new PdfStamper(reader, outputPdfStream);
                var pdfContentByte = stamper.GetOverContent(1);

                it.Image image = it.Image.GetInstance(inputImageStream);           //插入图片
                image.SetAbsolutePosition(100, 100);
                pdfContentByte.AddImage(image);
                stamper.Close();
            }
            return File(Server.MapPath("~") + "/pdfimage/ceshi2.pdf", "application/pdf", "TableDemo.pdf");
http://stackoverflow.com/questions/583629/how-can-i-insert-an-image-with-itextsharp-in-an-existing-pdf
羽商宫 | 园豆:2490 (老鸟四级) | 2015-03-27 17:29

有没有在WindowsForms中实现的方法,这个看着不像是windowsForms中实现的,等抽时间尝试一下。

支持(0) 反对(0) 回望天涯 | 园豆:95 (初学一级) | 2015-03-27 18:14

@回望天涯: 去了最后一句和其他的路径不就行了,你该返回什么就返回什么

支持(0) 反对(0) 羽商宫 | 园豆:2490 (老鸟四级) | 2015-03-27 18:16

@羽商宫: 增加图片后还是新生成了PDF。没办法做到在原文件操作?

支持(0) 反对(0) BetterCoder | 园豆:45 (初学一级) | 2018-06-21 17:35
0

最后没办法,换了个dll文件,实现起来比较方便,主要是添加了

using Spire.License;
using Spire.Pdf;
using Spire.Pdf.Graphics;

 

Microsoft.Win32.SaveFileDialog dlg = new Microsoft.Win32.SaveFileDialog();
Nullable<bool> result = dlg.ShowDialog();
if (result == true)
{
try
{
string filePath = dlg.FileName;

//Create a pdf document
PdfDocument doc = new PdfDocument();
doc.LoadFromFile(filePath);

//get the page
PdfPageBase page = doc.Pages[0];
//get the image

PdfImage image = PdfImage.FromFile(directory + "\\save.jpg");
float width = image.Width * 0.75f;
float height = image.Height * 0.75f;
//insert image
page.Canvas.DrawImage(image, 500, 10, width, height);

//save pdf file
doc.SaveToFile(filePath);
doc.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}

回望天涯 | 园豆:95 (初学一级) | 2015-04-01 20:09
0

http://stackoverflow.com/questions/583629/how-can-i-insert-an-image-with-itextsharp-in-an-existing-pdf

正解

dozeoo | 园豆:202 (菜鸟二级) | 2018-08-29 11:43
0

https://developers.itextpdf.com/question/how-update-pdf-without-creating-new-pdf
官网解答。

如果要不生成新的pdf,只能先将原文件读取为byte[]并释放资源后,用stamper 将输出流指向原文件

zjjjjjj | 园豆:206 (菜鸟二级) | 2018-10-25 15:12
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册