using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; using System.Drawing; using System.Drawing.Imaging; namespace MuPDFLib { public static class MuPdfConverter { public static byte[] ConvertPdfToTiff(byte[] image, float dpi, RenderType type, bool rotateLandscapePages, bool shrinkToLetter, int maxSizeInPdfPixels, string pdfPassword) { byte[] output = null; if (image == null) throw new ArgumentNullException("image"); using (MuPDF pdfDoc = new MuPDF(image, pdfPassword)) { using (MemoryStream outputStream = new MemoryStream()) { ImageCodecInfo info = null; foreach (ImageCodecInfo ice in ImageCodecInfo.GetImageEncoders()) if (ice.MimeType == "image/tiff") info = ice; Bitmap saveTif = null; pdfDoc.AntiAlias = false; for (int i = 1; i <= pdfDoc.PageCount; i++) { int Width = 0;//Zero for no resize. int Height = 0;//Zero for autofit height to width. pdfDoc.Page = i; Bitmap FirstImage = pdfDoc.GetBitmap(Width, Height, dpi, dpi, 0, type, rotateLandscapePages, shrinkToLetter, maxSizeInPdfPixels); if (FirstImage == null) throw new Exception("Unable to convert pdf to tiff!"); using (EncoderParameters ep = new EncoderParameters(2)) { ep.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.SaveFlag, (long)EncoderValue.MultiFrame); ep.Param[1] = new EncoderParameter(System.Drawing.Imaging.Encoder.Compression, (long)EncoderValue.CompressionLZW); if (type == RenderType.Monochrome) { ep.Param[1] = new EncoderParameter(System.Drawing.Imaging.Encoder.Compression, (long)EncoderValue.CompressionCCITT4); } if (i == 1) { saveTif = FirstImage; saveTif.Save(outputStream, info, ep); } else { ep.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.SaveFlag, (long)EncoderValue.FrameDimensionPage); saveTif.SaveAdd(FirstImage, ep); FirstImage.Dispose(); } if (i == pdfDoc.PageCount) { ep.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.SaveFlag, (long)EncoderValue.Flush); saveTif.SaveAdd(ep); saveTif.Dispose(); } } } output = outputStream.ToArray(); } } return output; } public static bool ConvertPdfToTiff(string sourceFile, string outputFile, float dpi, RenderType type, bool rotateLandscapePages, bool shrinkToLetter, int maxSizeInPdfPixels, string pdfPassword) { bool output = false; if (string.IsNullOrEmpty(sourceFile) || string.IsNullOrEmpty(outputFile)) throw new ArgumentNullException(); using (MuPDF pdfDoc = new MuPDF(sourceFile, pdfPassword)) { using (FileStream outputStream = new FileStream(outputFile, FileMode.Create, FileAccess.ReadWrite, FileShare.None)) { ImageCodecInfo info = null; foreach (ImageCodecInfo ice in ImageCodecInfo.GetImageEncoders()) if (ice.MimeType == "image/tiff") info = ice; Bitmap saveTif = null; pdfDoc.AntiAlias = false; for (int i = 1; i <= pdfDoc.PageCount; i++) { pdfDoc.Page = i; Bitmap FirstImage = pdfDoc.GetBitmap(0, 0, dpi, dpi, 0, type, rotateLandscapePages, shrinkToLetter, maxSizeInPdfPixels); if (FirstImage == null) throw new Exception("Unable to convert pdf to tiff!"); using (EncoderParameters ep = new EncoderParameters(2)) { ep.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.SaveFlag, (long)EncoderValue.MultiFrame); ep.Param[1] = new EncoderParameter(System.Drawing.Imaging.Encoder.Compression, (long)EncoderValue.CompressionLZW); if (type == RenderType.Monochrome) { ep.Param[1] = new EncoderParameter(System.Drawing.Imaging.Encoder.Compression, (long)EncoderValue.CompressionCCITT4); } if (i == 1) { saveTif = FirstImage; saveTif.Save(outputStream, info, ep); } else { ep.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.SaveFlag, (long)EncoderValue.FrameDimensionPage); saveTif.SaveAdd(FirstImage, ep); FirstImage.Dispose(); } if (i == pdfDoc.PageCount) { ep.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.SaveFlag, (long)EncoderValue.Flush); saveTif.SaveAdd(ep); saveTif.Dispose(); } } } } if (File.Exists(outputFile)) output = true; } return output; } public static byte[] ConvertPdfToFaxTiff(byte[] image, float dpi, bool shrinkToLetter, string pdfPassword) { byte[] output = null; const long Compression = (long)EncoderValue.CompressionCCITT4; using (MuPDF pdfDoc = new MuPDF(image, pdfPassword)) { using (MemoryStream outputStream = new MemoryStream()) { ImageCodecInfo info = null; foreach (ImageCodecInfo ice in ImageCodecInfo.GetImageEncoders()) if (ice.MimeType == "image/tiff") info = ice; Bitmap saveTif = null; pdfDoc.AntiAlias = false; for (int i = 1; i <= pdfDoc.PageCount; i++) { int Width = 0;//Zero for no resize. //int Height = 0;//Zero for autofit height to width. float DpiX = dpi; float DpiY = dpi; pdfDoc.Page = i; if (dpi == 200) { Width = 1728; DpiX = 204; DpiY = 196; } else if (dpi == 300) Width = 2592; else if (dpi == 400) Width = 3456; Bitmap FirstImage = pdfDoc.GetBitmap(Width, 0, DpiX, DpiY, 0, RenderType.Monochrome, true, shrinkToLetter, 0); if (FirstImage == null) throw new Exception("Unable to convert pdf to tiff!"); using (EncoderParameters ep = new EncoderParameters(2)) { ep.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.SaveFlag, (long)EncoderValue.MultiFrame); ep.Param[1] = new EncoderParameter(System.Drawing.Imaging.Encoder.Compression, Compression); if (i == 1) { saveTif = FirstImage; saveTif.Save(outputStream, info, ep); } else { ep.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.SaveFlag, (long)EncoderValue.FrameDimensionPage); saveTif.SaveAdd(FirstImage, ep); FirstImage.Dispose(); } if (i == pdfDoc.PageCount) { ep.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.SaveFlag, (long)EncoderValue.Flush); saveTif.SaveAdd(ep); saveTif.Dispose(); } } } output = outputStream.ToArray(); } } return output; } public static bool ConvertPdfToFaxTiff(string sourceFile, string outputFile, float dpi, bool shrinkToLetter, string pdfPassword) { bool output = false; const long Compression = (long)EncoderValue.CompressionCCITT4; using (MuPDF pdfDoc = new MuPDF(sourceFile, pdfPassword)) { using (FileStream outputStream = new FileStream(outputFile, FileMode.Create, FileAccess.ReadWrite, FileShare.None)) { ImageCodecInfo info = null; foreach (ImageCodecInfo ice in ImageCodecInfo.GetImageEncoders()) if (ice.MimeType == "image/tiff") info = ice; Bitmap saveTif = null; pdfDoc.AntiAlias = false; for (int i = 1; i <= pdfDoc.PageCount; i++) { int Width = 0;//Zero for no resize. //int Height = 0;//Zero for autofit height to width. float DpiX = dpi; float DpiY = dpi; pdfDoc.Page = i; if (dpi == 200) { Width = 1728; DpiX = 204; DpiY = 196; } else if (dpi == 300) Width = 2592; else if (dpi == 400) Width = 3456; Bitmap FirstImage = pdfDoc.GetBitmap(Width, 0, DpiX, DpiY, 0, RenderType.Monochrome, true, shrinkToLetter, 0); if (FirstImage == null) throw new Exception("Unable to convert pdf to tiff!"); using (EncoderParameters ep = new EncoderParameters(2)) { ep.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.SaveFlag, (long)EncoderValue.MultiFrame); ep.Param[1] = new EncoderParameter(System.Drawing.Imaging.Encoder.Compression, Compression); if (i == 1) { saveTif = FirstImage; saveTif.Save(outputStream, info, ep); } else { ep.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.SaveFlag, (long)EncoderValue.FrameDimensionPage); saveTif.SaveAdd(FirstImage, ep); FirstImage.Dispose(); } if (i == pdfDoc.PageCount) { ep.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.SaveFlag, (long)EncoderValue.Flush); saveTif.SaveAdd(ep); saveTif.Dispose(); } } } } if (File.Exists(outputFile)) output = true; } return output; } } }