Created
April 8, 2013 03:56
-
-
Save witwall/5334142 to your computer and use it in GitHub Desktop.
Here’s the code to replace images in PDFs, in Java and C#. It will replace the first image in the first page.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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(); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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(); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Replace multiple different images on one PDF template page with itext (itextsharp),http://stackoverflow.com/questions/4302056/replace-multiple-different-images-on-one-pdf-template-page-with-itext-itextshar