|
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using iTextSharp.text.pdf.parser;
using iTextSharp.text.pdf;
using System.IO;
using System.Drawing;
using System.Drawing.Imaging;
namespace CBR.Core.Files.Conversion
{
internal class PDFImageListener : IRenderListener
{
/** the byte array of the extracted images */
private List<byte[]> _ImageBytes;
public List<byte[]> ImageBytes
{
get { return _ImageBytes; }
}
/** the file names of the extracted images */
private List<string> _imageNames;
public List<string> ImageNames
{
get { return _imageNames; }
}
// ---------------------------------------------------------------------------
/**
* Creates a RenderListener that will look for images.
*/
public PDFImageListener()
{
_ImageBytes = new List<byte[]>();
_imageNames = new List<string>();
//_images = new List<Image>();
}
// ---------------------------------------------------------------------------
/**
* @see com.itextpdf.text.pdf.parser.RenderListener#beginTextBlock()
*/
public void BeginTextBlock() { }
// ---------------------------------------------------------------------------
/**
* @see com.itextpdf.text.pdf.parser.RenderListener#endTextBlock()
*/
public void EndTextBlock() { }
// ---------------------------------------------------------------------------
/**
* @see com.itextpdf.text.pdf.parser.RenderListener#renderImage(
* com.itextpdf.text.pdf.parser.ImageRenderInfo)
*/
public void RenderImage(ImageRenderInfo renderInfo)
{
PdfImageObject image = renderInfo.GetImage();
PdfName filter = (PdfName)image.Get(PdfName.FILTER);
/*
* you DO NOT want to use classes within the System.Drawing namespace to
* manipulate image files in ASP.NET applications, see the warning here:
* http://msdn.microsoft.com/en-us/library/system.drawing.aspx
*/
if (PdfName.DCTDECODE.Equals(filter))
{
_imageNames.Add(string.Format("{0:0000}.jpg", _imageNames.Count));
_ImageBytes.Add(image.GetStreamBytes());
}
else if (PdfName.JPXDECODE.Equals(filter))
{
_imageNames.Add(string.Format("{0:0000}.jp2", _imageNames.Count));
_ImageBytes.Add(image.GetStreamBytes());
}
else if (PdfName.JBIG2DECODE.Equals(filter))
{
// ignore: filter not supported.
}
else
{
_imageNames.Add(string.Format("{0:0000}.png", _imageNames.Count));
_ImageBytes.Add(image.GetStreamBytes());
}
}
// ---------------------------------------------------------------------------
/**
* @see com.itextpdf.text.pdf.parser.RenderListener#renderText(
* com.itextpdf.text.pdf.parser.TextRenderInfo)
*/
public void RenderText(TextRenderInfo renderInfo) { }
}
}
|
By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.
If a file you wish to view isn't highlighted, and is a text file (not binary), please
let us know and we'll add colourisation support for it.
WPF and MVVM fan, I practice C # in all its forms from the beginning of the NET Framework without mentioning C ++ / MFC and other software packages such as databases, ASP, WCF, Web & Windows services, Application, and now Core and UWP.
In my wasted hours, I am guilty of having fathered C.B.R. and its cousins C.B.R. for WinRT and UWP on the Windows store.
But apart from that, I am a great handyman ... the house, a rocket stove to heat the jacuzzi and the last one: a wood oven for pizza, bread, and everything that goes inside
https://guillaumewaser.wordpress.com/
https://fouretcompagnie.wordpress.com/