用程序自动替换PDF文件中的图像
2009-04-13 13:06
190 查看
from:
http://itext.ugent.be/library/question.php?id=66
要使用Java代码,应该调用iText库。
要使用C#代码,应该调用iTextSharp库。
Here's the code to replace images in PDFs, in Java and C#. It will replace the first image in the first page.
Java代码
PdfReader pdf = new PdfReader("in.pdf");
PdfStamper stp = new PdfStamper(pdf, new FileOutputStream("c:\\out.pdf"));
PdfWriter writer = stp.getWriter();
Image img = Image.getInstance("image.png");
PdfDictionary pg = pdf.getPageN(1);
PdfDictionary res =
(PdfDictionary)PdfReader.getPdfObject(pg.get(PdfName.RESOURCES));
PdfDictionary xobj =
(PdfDictionary)PdfReader.getPdfObject(res.get(PdfName.XOBJECT));
if (xobj != null) {
for (Iterator it = xobj.getKeys().iterator(); it.hasNext(); ) {
PdfObject obj = xobj.get((PdfName)it.next());
if (obj.isIndirect()) {
PdfDictionary tg = (PdfDictionary)PdfReader.getPdfObject(obj);
PdfName type =
(PdfName)PdfReader.getPdfObject(tg.get(PdfName.SUBTYPE));
if (PdfName.IMAGE.equals(type)) {
PdfReader.killIndirect(obj);
Image maskImage = img.getImageMask();
if (maskImage != null)
writer.addDirectImageSimple(maskImage);
writer.addDirectImageSimple(img, (PRIndirectReference)obj);
break;
}
}
}
}
stp.close();
C#代码:
PdfReader pdf = new PdfReader("in.pdf");
PdfStamper stp = new PdfStamper(pdf, new FileStream("out.pdf",
FileMode.Create));
PdfWriter writer = stp.Writer;
Image img = Image.GetInstance("image.png");
PdfDictionary pg = pdf.GetPageN(1);
PdfDictionary res =
(PdfDictionary)PdfReader.GetPdfObject(pg.Get(PdfName.RESOURCES));
PdfDictionary xobj =
(PdfDictionary)PdfReader.GetPdfObject(res.Get(PdfName.XOBJECT));
if (xobj != null) {
foreach (PdfName name in xobj.Keys) {
PdfObject obj = xobj.Get(name);
if (obj.IsIndirect()) {
PdfDictionary tg = (PdfDictionary)PdfReader.GetPdfObject(obj);
PdfName type =
(PdfName)PdfReader.GetPdfObject(tg.Get(PdfName.SUBTYPE));
if (PdfName.IMAGE.Equals(type)) {
PdfReader.KillIndirect(obj);
Image maskImage = img.ImageMask;
if (maskImage != null)
writer.AddDirectImageSimple(maskImage);
writer.AddDirectImageSimple(img, PRIndirectReference)obj);
break;
}
}
}
}
stp.Close();
http://itext.ugent.be/library/question.php?id=66
要使用Java代码,应该调用iText库。
要使用C#代码,应该调用iTextSharp库。
Here's the code to replace images in PDFs, in Java and C#. It will replace the first image in the first page.
Java代码
PdfReader pdf = new PdfReader("in.pdf");
PdfStamper stp = new PdfStamper(pdf, new FileOutputStream("c:\\out.pdf"));
PdfWriter writer = stp.getWriter();
Image img = Image.getInstance("image.png");
PdfDictionary pg = pdf.getPageN(1);
PdfDictionary res =
(PdfDictionary)PdfReader.getPdfObject(pg.get(PdfName.RESOURCES));
PdfDictionary xobj =
(PdfDictionary)PdfReader.getPdfObject(res.get(PdfName.XOBJECT));
if (xobj != null) {
for (Iterator it = xobj.getKeys().iterator(); it.hasNext(); ) {
PdfObject obj = xobj.get((PdfName)it.next());
if (obj.isIndirect()) {
PdfDictionary tg = (PdfDictionary)PdfReader.getPdfObject(obj);
PdfName type =
(PdfName)PdfReader.getPdfObject(tg.get(PdfName.SUBTYPE));
if (PdfName.IMAGE.equals(type)) {
PdfReader.killIndirect(obj);
Image maskImage = img.getImageMask();
if (maskImage != null)
writer.addDirectImageSimple(maskImage);
writer.addDirectImageSimple(img, (PRIndirectReference)obj);
break;
}
}
}
}
stp.close();
C#代码:
PdfReader pdf = new PdfReader("in.pdf");
PdfStamper stp = new PdfStamper(pdf, new FileStream("out.pdf",
FileMode.Create));
PdfWriter writer = stp.Writer;
Image img = Image.GetInstance("image.png");
PdfDictionary pg = pdf.GetPageN(1);
PdfDictionary res =
(PdfDictionary)PdfReader.GetPdfObject(pg.Get(PdfName.RESOURCES));
PdfDictionary xobj =
(PdfDictionary)PdfReader.GetPdfObject(res.Get(PdfName.XOBJECT));
if (xobj != null) {
foreach (PdfName name in xobj.Keys) {
PdfObject obj = xobj.Get(name);
if (obj.IsIndirect()) {
PdfDictionary tg = (PdfDictionary)PdfReader.GetPdfObject(obj);
PdfName type =
(PdfName)PdfReader.GetPdfObject(tg.Get(PdfName.SUBTYPE));
if (PdfName.IMAGE.Equals(type)) {
PdfReader.KillIndirect(obj);
Image maskImage = img.ImageMask;
if (maskImage != null)
writer.AddDirectImageSimple(maskImage);
writer.AddDirectImageSimple(img, PRIndirectReference)obj);
break;
}
}
}
}
stp.Close();
相关文章推荐
- jQuery上传文件到服务器,实现量上传及压缩包导入,支持Office文档、PDF、图像、音视频和图纸等各类型文件。上传完成后系统自动为图片、音、视频类文件增加摘要及缩略图
- 程序文件升级自动更新时,替换正在运行中的文件的分析
- 一个没有什么用的程序.自动替换文件内容,并生成复本.
- c++程序编译后自动生成的文件有什么用
- 如何替换exe程序中的某个文件?
- 基于TCP网络通信的自动升级程序源码分析--生成升级文件相关的配置文件
- eclipse中开发android程序时,打开layout配置文件自动关闭的问题
- spring.net框架开发合并PDF文件程序,请大家多提宝贵意见
- rsync+inotify文件变动后实时自动同步程序
- PDF 文件中可识别图像的提取
- 学习使用AutoMake1.9的自动生成工程文件(二)——flat型程序编译实践过程
- C#.Net 如何动态加载与卸载程序集(.dll或者.exe)6-----在不卸载程序域的前提下替换程序集文件。
- 关于结构体字对齐—BMP文件图像处理程序
- C# 程序自动批量生成 google maps 的KML文件
- VB 调用打开各种文件(自动查找使用默认的程序)
- Windows下pdf文件自动打水印工具
- 给程序替换图标,重新签名 apk 文件。
- 在MATLAB中采用M文件实现对Simulink中的S函数程序实现自动调参数
- c++程序编译后自动生成的文件有什么用
- linux shell 自动执行程序的文件与命令