iTextSharp Ekstrakcja obrazu z przezroczystością
Używam iTextSharp i próbuję wyodrębnić obrazy z przezroczystością z pliku PDF. Po wyodrębnieniu obrazu przezroczystość staje się czarna i zostaje utracona. Znalazłem wiele przykładów ekstrakcji obrazów, ale wszystkie wydają się mieć ten sam problem. Kod, którego używam, znajduje się poniżej
Innym przykładem jest itextpdf.com/examples/iia.php?id=284. Ten przykład zawiera obrazy w sekcji „wyniki” u góry. Jeśli kliknieszImg7.png zobaczysz czarną ramkę na obrazie, jednak u dołu strony znajduje się link do oryginalnego obrazuinfo.png to pokazuje przezroczystość tak, jak powinna wyglądać. To jest dokładnie ten problem, w który wpadam. Każda pomoc lub pomysły byłyby mile widziane
public void ExtractImage(string pdfFile)
{
const int pageNumber = 1; //Page number to extract the image from
PdfReader pdf = new PdfReader(pdfFile);
PdfDictionary pg = pdf.GetPageN(pageNumber);
PdfDictionary res = (PdfDictionary)PdfReader.GetPdfObject(pg.Get(PdfName.RESOURCES));
PdfDictionary xobj = (PdfDictionary)PdfReader.GetPdfObject(res.Get(PdfName.XOBJECT));
foreach (PdfName name in xobj.Keys)
{
PdfObject obj = xobj.Get(name);
if (obj.IsIndirect())
{
PdfDictionary tg = (PdfDictionary)PdfReader.GetPdfObject(obj);
string width = tg.Get(PdfName.WIDTH).ToString();
string height = tg.Get(PdfName.HEIGHT).ToString();
ImageRenderInfo imgRI =
ImageRenderInfo.CreateForXObject(new Matrix(float.Parse(width), float.Parse(height)),
(PRIndirectReference)obj, tg);
var fileType= imgRI.GetImage().GetFileType();
RenderImage(imgRI, imgPath + +imgRI.GetRef().Number + "_" + imgRI.GetRef().Generation + "test." + fileType);
}
}
pdf.Close();
}
private void RenderImage(ImageRenderInfo renderInfo, string saveImageLocation)
{
PdfImageObject image = renderInfo.GetImage();
using (var dotnetImg = image.GetDrawingImage())
{
if (dotnetImg != null)
{
dotnetImg.Save(saveImageLocation);
}
}
}