Извлечение изображения типа "FLATEDECODE" из pdf с использованием PdfSharp - PullRequest
3 голосов
/ 24 ноября 2011

Я пытаюсь извлечь изображения из PDF. Изображение фильтра "FlateDecode". Я получаю изображение, но это просто черный путь. Я новичок в этом, пожалуйста, помогите мне в этом. Код:

int width = xObject.Elements.GetInteger(PdfImage.Keys.Width);
int height = xObject.Elements.GetInteger(PdfImage.Keys.Height);
int bitsPerComponent = xObject.Elements.GetInteger  (PdfSharp.Pdf.Advanced.PdfImage.Keys.BitsPerComponent);
System.Drawing.Imaging.PixelFormat pixelFormat = new   System.Drawing.Imaging.PixelFormat();
switch (bitsPerComponent)
{   
            case 1:
                pixelFormat = System.Drawing.Imaging.PixelFormat.Format1bppIndexed;
                break;
            case 8:
                pixelFormat = System.Drawing.Imaging.PixelFormat.Format8bppIndexed;
                break;
            case 24:
                pixelFormat = System.Drawing.Imaging.PixelFormat.Format24bppRgb;
                break;
            default:
                throw new Exception("Unknown pixel format " + bitsPerComponent);
 }
 Bitmap bitmap = new Bitmap(width, height, pixelFormat);
 byte[] raw = xObject.Stream.Value;
 BitmapData bitmapData = bitmap.LockBits(new Rectangle(0, 0, width, height),      ImageLockMode.WriteOnly, pixelFormat);
 Marshal.Copy(raw, 0, bitmapData.Scan0, raw.Length);
 bitmap.UnlockBits(bitmapData);
 using (MemoryStream imageStream = new MemoryStream())
 {
            bitmap.Save(imageStream, ImageFormat.png);
            System.Drawing.Image img = System.Drawing.Image.FromStream(imageStream);

            img.Save("D:\\trial.png", System.Drawing.Imaging.ImageFormat.png);
 }

Ответы [ 2 ]

0 голосов
/ 04 августа 2017

Я сделал это с помощью iTextSharp. Ниже приведен код, который я сделал для [filter.Equals (PdfName.FLATEDECODE)] этого изображения.

добавить using System.Runtime.InteropServices; для доступа к маршалу

Bitmap bmp = new Bitmap(width, height, pixelFormat);
var bmd = bmp.LockBits(new System.Drawing.Rectangle(0, 0, width, height), ImageLockMode.WriteOnly, pixelFormat);
int length = (int)Math.Ceiling(Convert.ToInt32(width) * i_bpp / 8.0);
for (int j = 0; j < height; j++)
{
int offset = j * length;
int scanOffset = j * bmd.Stride;
Marshal.Copy(bytes, offset, new IntPtr(bmd.Scan0.ToInt32() + scanOffset), length);
}
bmp.UnlockBits(bmd);
using (FileStream fs = new FileStream(Server.MapPath("~/Temp") + "\\" + String.Format("Image{0}.png", page_i), FileMode.Create, FileAccess.Write))
{
bmp.Save(fs, System.Drawing.Imaging.ImageFormat.Png);
PdfImg_ = (System.Drawing.Image)bmp;
}
0 голосов
/ 24 ноября 2011
img.Save("D:\\trial.png", System.Drawing.Imaging.ImageFormat.Jpeg);

Разве это не должно быть .Png?

...