有几个使用网络上的itextsharp去除或调整图像大小的示例,但我无法找到删除嵌入图像的示例。使用itextsharp从pdf中删除嵌入图像
I'm使用下面的代码删除X对象的图像:
PdfWriter writer = st.Writer;
PdfDictionary pg = reader.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.IsDictionary())
{
PdfDictionary tg = (PdfDictionary)PdfReader.GetPdfObject(obj);
PdfName type = (PdfName)PdfReader.GetPdfObject(tg.Get(PdfName.SUBTYPE));
//PdfName type = (PdfName)PdfReader.GetPdfObject(tg.Get(PdfName.SUBTYPE));
if (PdfName.IMAGE.Equals(type))
{
int xrefIdx = ((PRIndirectReference)obj).Number;
PdfObject pdfObj = reader.GetPdfObject(xrefIdx);
PdfStream str = (PdfStream)(pdfObj);
byte[] bytes = PdfReader.GetStreamBytesRaw((PRStream)str);
iTextSharp.text.Image img = iTextSharp.text.Image.GetInstance((PRIndirectReference)obj);
string filter = tg.Get(PdfName.FILTER).ToString();
if (filter == "/DCTDecode")
{
PdfReader.KillIndirect(obj);
Stream stBrasao2 = File.OpenRead(pasta_recurso + "brasao.jpg");
iTextSharp.text.Image img2 = iTextSharp.text.Image.GetInstance(stBrasao2);
writer.AddDirectImageSimple(img2, (PRIndirectReference)obj);
break;
}
}
}
}
}
有什么办法,以适应这种去除内嵌图像,而不是X对象的图像?
谢谢。
你的问题是什么?这不行吗? – 2013-04-26 01:58:21
看起来他想要删除内嵌图像,并不知道如何做到这一点。这个任务并不简单,因为人们必须在每一个内容流中搜索每一个适用的xobject流中的内容... – mkl 2013-04-26 04:16:33
在[parallel post](http://itext-general.2136553.n4.nabble.com) /Remove-Inline-Image-tt4658130.html),@ uacaman对itext-questions邮件列表进行了更多解释。 – mkl 2013-04-26 09:35:04