public static void ReplaceStream(PRStream orig, PdfStream stream) { orig.Clear(); MemoryStream ms = new MemoryStream(); stream.WriteContent(ms); orig.SetData(ms.ToArray(), false); Console.WriteLine("Iterating keys"); foreach (System.Collections.Generic.KeyValuePair <PdfName, PdfObject> keyValuePair in stream) { orig.Put(keyValuePair.Key, stream.Get(keyValuePair.Key)); } }
private void UpdateImageStream(PRStream imageStream, byte[] newData) { PdfImage image = new PdfImage(Image.GetInstance(newData), "", null); if (imageStream.Contains(PdfName.SMASK)) { image.Put(PdfName.SMASK, imageStream.Get(PdfName.SMASK)); } if (imageStream.Contains(PdfName.MASK)) { image.Put(PdfName.MASK, imageStream.Get(PdfName.MASK)); } if (imageStream.Contains(PdfName.SMASKINDATA)) { image.Put(PdfName.SMASKINDATA, imageStream.Get(PdfName.SMASKINDATA)); } imageStream.Clear(); imageStream.PutAll(image); imageStream.SetDataRaw(image.GetBytes()); }
private void Do_Image(PdfStream stream) { byte[] imageBuffer = null; PdfName filter = PdfName.NONE; if (stream.Contains(PdfName.FILTER)) { filter = stream.GetAsName(PdfName.FILTER); } int imageWidth = stream.GetAsNumber(PdfName.WIDTH).IntValue; int imageHeight = stream.GetAsNumber(PdfName.HEIGHT).IntValue; int imageBpp = stream.GetAsNumber(PdfName.BITSPERCOMPONENT).IntValue; PRStream prStream = stream as PRStream; bool cannotReadImage = false; Bitmap image = null; try { PdfImageObject pdfImage = new PdfImageObject(prStream); image = pdfImage.GetDrawingImage() as Bitmap; string strFile = "C:\\PDF_Print\\pdf" + bmpfileidx.ToString() + ".bmp"; image.Save(strFile); bmpfileidx++; } catch { try { if (filter == PdfName.FLATEDECODE) { byte[] streamBuffer = PdfReader.GetStreamBytes(prStream); image = this.CreateBitmapFromFlateDecodeImage(streamBuffer, imageWidth, imageHeight, imageBpp); string strFile = "C:\\PDF_Print\\pdf_" + bmpfileidx.ToString() + ".bmp"; image.Save(strFile); bmpfileidx++; } } catch { cannotReadImage = true; } } if (!cannotReadImage) { image = this.ConvertToGrayscale(image); //image = this.ConvertToBlackWhite(image); using (var ms = new MemoryStream()) { System.Drawing.Imaging.Encoder myEncoder = System.Drawing.Imaging.Encoder.Quality; ImageCodecInfo jgpEncoder = GetEncoder(ImageFormat.Jpeg); EncoderParameters myEncoderParameters = new EncoderParameters(1); EncoderParameter myEncoderParameter = new EncoderParameter(myEncoder, 80L); myEncoderParameters.Param[0] = myEncoderParameter; image.Save(ms, jgpEncoder, myEncoderParameters); imageBuffer = ms.ToArray(); //imageBuffer = ms.GetBuffer(); iTextSharp.text.Image newImage = iTextSharp.text.Image.GetInstance(imageBuffer); newImage.SimplifyColorspace(); // PdfImage tempPdfImage = new PdfImage(newImage, newImage.ToString(), null); // prStream.Clear(); // prStream.SetDataRaw(imageBuffer); // prStream.Merge(tempPdfImage); // imageBuffer = newImage.OriginalData; // prStream.Clear(); prStream.SetData(imageBuffer, false, PRStream.NO_COMPRESSION); prStream.Put(PdfName.TYPE, PdfName.XOBJECT); prStream.Put(PdfName.SUBTYPE, PdfName.IMAGE); prStream.Put(PdfName.FILTER, PdfName.DCTDECODE); prStream.Put(PdfName.WIDTH, new PdfNumber(image.Width)); prStream.Put(PdfName.HEIGHT, new PdfNumber(image.Height)); prStream.Put(PdfName.BITSPERCOMPONENT, new PdfNumber(8)); prStream.Put(PdfName.COLORSPACE, PdfName.DEVICERGB); prStream.Put(PdfName.LENGTH, new PdfNumber(imageBuffer.LongLength)); } } }
private void Do_Image(PdfStream stream) { byte[] imageBuffer = null; PdfName filter = PdfName.NONE; if (stream.Contains(PdfName.FILTER)) { filter = stream.GetAsName(PdfName.FILTER); } int imageWidth = stream.GetAsNumber(PdfName.WIDTH).IntValue; int imageHeight = stream.GetAsNumber(PdfName.HEIGHT).IntValue; int imageBpp = stream.GetAsNumber(PdfName.BITSPERCOMPONENT).IntValue; PRStream prStream = stream as PRStream; bool cannotReadImage = false; Bitmap image = null; try { PdfImageObject pdfImage = new PdfImageObject(prStream); image = pdfImage.GetDrawingImage() as Bitmap; } catch { try { if (filter == PdfName.FLATEDECODE) { byte[] streamBuffer = PdfReader.GetStreamBytes(prStream); image = this.CreateBitmapFromFlateDecodeImage(streamBuffer, imageWidth, imageHeight, imageBpp); } } catch { cannotReadImage = true; } } if (!cannotReadImage) { image = this.ConvertToGrayscale(image); using (var ms = new MemoryStream()) { System.Drawing.Imaging.Encoder myEncoder = System.Drawing.Imaging.Encoder.Quality; ImageCodecInfo jgpEncoder = GetEncoder(ImageFormat.Jpeg); EncoderParameters myEncoderParameters = new EncoderParameters(1); //EncoderParameter myEncoderParameter = new EncoderParameter(myEncoder, 80L); EncoderParameter myEncoderParameter = new EncoderParameter(myEncoder, 15L); myEncoderParameters.Param[0] = myEncoderParameter; image.Save(ms, jgpEncoder, myEncoderParameters); imageBuffer = ms.GetBuffer(); } Image compressedImage = Image.GetInstance(imageBuffer); imageBuffer = compressedImage.OriginalData; prStream.Clear(); //prStream.SetData(imageBuffer, false, PRStream.NO_COMPRESSION); prStream.SetData(imageBuffer, false, PRStream.BEST_COMPRESSION); prStream.Put(PdfName.TYPE, PdfName.XOBJECT); prStream.Put(PdfName.SUBTYPE, PdfName.IMAGE); prStream.Put(PdfName.FILTER, PdfName.DCTDECODE); prStream.Put(PdfName.WIDTH, new PdfNumber(image.Width)); prStream.Put(PdfName.HEIGHT, new PdfNumber(image.Height)); prStream.Put(PdfName.BITSPERCOMPONENT, new PdfNumber(8)); prStream.Put(PdfName.COLORSPACE, PdfName.DEVICERGB); prStream.Put(PdfName.LENGTH, new PdfNumber(imageBuffer.LongLength)); } }