|
@@ -29,6 +29,7 @@ using System.Runtime;
|
|
|
using System.Text;
|
|
|
using SharpVectors.Converters;
|
|
|
using SharpVectors.Renderers.Wpf;
|
|
|
+using Syncfusion.PdfToImageConverter;
|
|
|
using Encoder = System.Drawing.Imaging.Encoder;
|
|
|
|
|
|
namespace InABox.WPF
|
|
@@ -822,7 +823,9 @@ namespace InABox.WPF
|
|
|
|
|
|
public enum ImageEncoding
|
|
|
{
|
|
|
- JPEG
|
|
|
+ JPEG,
|
|
|
+ TIFF,
|
|
|
+ PNG,
|
|
|
}
|
|
|
|
|
|
public static ImageCodecInfo? GetEncoder(ImageFormat format)
|
|
@@ -887,20 +890,52 @@ namespace InABox.WPF
|
|
|
|
|
|
public static byte[] GetPDFThumbnail(byte[] pdfData, int width, int height)
|
|
|
{
|
|
|
- PdfLoadedDocument loadeddoc = new PdfLoadedDocument(pdfData);
|
|
|
- Bitmap image = loadeddoc.ExportAsImage(0, new SizeF(width, height), true);
|
|
|
- MemoryStream stream = new MemoryStream();
|
|
|
- image.Save(stream, ImageFormat.Jpeg);
|
|
|
- return stream.ToArray();
|
|
|
+
|
|
|
+ using (var inData = new MemoryStream(pdfData))
|
|
|
+ {
|
|
|
+ using (var converter = new PdfToImageConverter(inData))
|
|
|
+ {
|
|
|
+ using (var outData = new MemoryStream())
|
|
|
+ {
|
|
|
+ converter.Convert(0, new SizeF(width, height), true, false, false)
|
|
|
+ .CopyTo(outData);
|
|
|
+ return outData.ToArray();
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
public static byte[] PDFToBitmap(byte[] pdfData, int page)
|
|
|
{
|
|
|
- PdfLoadedDocument loadeddoc = new PdfLoadedDocument(pdfData);
|
|
|
- Bitmap image = loadeddoc.ExportAsImage(page, new ImageExportSettings() { KeepAspectRatio = true });
|
|
|
- MemoryStream stream = new MemoryStream();
|
|
|
- image.Save(stream, ImageFormat.Jpeg);
|
|
|
- return stream.ToArray();
|
|
|
+ using (var inData = new MemoryStream(pdfData))
|
|
|
+ {
|
|
|
+ using (var converter = new PdfToImageConverter(inData))
|
|
|
+ {
|
|
|
+ using (var outData = new MemoryStream())
|
|
|
+ {
|
|
|
+ converter.Convert(page, false, false).CopyTo(outData);
|
|
|
+ return outData.ToArray();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ private static Bitmap[] PDFToBitmapArray(byte[] pdfData)
|
|
|
+ {
|
|
|
+ Bitmap[] images = [];
|
|
|
+ using (var ms = new MemoryStream(pdfData))
|
|
|
+ {
|
|
|
+ using (var converter = new PdfToImageConverter(ms))
|
|
|
+ {
|
|
|
+ images = converter.Convert(0, converter.PageCount - 1, false, false)
|
|
|
+ .Select(x => new Bitmap(x))
|
|
|
+ .ToArray();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return images;
|
|
|
}
|
|
|
|
|
|
[System.Runtime.InteropServices.DllImport("gdi32.dll")]
|
|
@@ -910,9 +945,8 @@ namespace InABox.WPF
|
|
|
using var profiler = new Profiler(true);
|
|
|
var rendered = new List<ImageSource>();
|
|
|
|
|
|
- var loadeddoc = new PdfLoadedDocument(pdfData);
|
|
|
- loadeddoc.FlattenAnnotations();
|
|
|
- var images = loadeddoc.ExportAsImage(0, loadeddoc.Pages.Count - 1);
|
|
|
+
|
|
|
+ var images = PDFToBitmapArray(pdfData);
|
|
|
|
|
|
if (images != null)
|
|
|
foreach (var image in images)
|
|
@@ -937,28 +971,38 @@ namespace InABox.WPF
|
|
|
return rendered;
|
|
|
}
|
|
|
|
|
|
+
|
|
|
+
|
|
|
public static List<byte[]> RenderPDFToImageBytes(byte[] pdfData, ImageEncoding encoding = ImageEncoding.JPEG)
|
|
|
{
|
|
|
var rendered = new List<byte[]>();
|
|
|
+ Bitmap[] images = PDFToBitmapArray(pdfData);
|
|
|
|
|
|
- PdfLoadedDocument loadeddoc = new PdfLoadedDocument(pdfData);
|
|
|
- loadeddoc.FlattenAnnotations();
|
|
|
- Bitmap[] images = loadeddoc.ExportAsImage(0, loadeddoc.Pages.Count - 1);
|
|
|
-
|
|
|
- var jpgEncoder = GetEncoder(ImageFormat.Jpeg)!;
|
|
|
- var quality = Encoder.Quality;
|
|
|
- var encodeParams = new EncoderParameters(1);
|
|
|
- encodeParams.Param[0] = new EncoderParameter(quality, 100L);
|
|
|
+ ImageCodecInfo encoder;
|
|
|
+ EncoderParameters? parameters = null;
|
|
|
+ if (encoding == ImageEncoding.JPEG)
|
|
|
+ {
|
|
|
+ encoder = GetEncoder(ImageFormat.Jpeg)!;
|
|
|
+ parameters = new EncoderParameters(1);
|
|
|
+ parameters.Param[0] = new EncoderParameter(Encoder.Quality, 100L);
|
|
|
+ }
|
|
|
+ else if (encoding == ImageEncoding.TIFF)
|
|
|
+ {
|
|
|
+ encoder = GetEncoder(ImageFormat.Tiff)!;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ encoder = GetEncoder(ImageFormat.Png)!;
|
|
|
+ }
|
|
|
|
|
|
- if (images != null)
|
|
|
- foreach (var image in images)
|
|
|
+ foreach (var image in images)
|
|
|
+ {
|
|
|
+ using (var data = new MemoryStream())
|
|
|
{
|
|
|
- using (var data = new MemoryStream())
|
|
|
- {
|
|
|
- image.Save(data, jpgEncoder, encodeParams);
|
|
|
- rendered.Add(data.ToArray());
|
|
|
- }
|
|
|
+ image.Save(data, encoder, parameters);
|
|
|
+ rendered.Add(data.ToArray());
|
|
|
}
|
|
|
+ }
|
|
|
|
|
|
return rendered;
|
|
|
}
|
|
@@ -980,10 +1024,9 @@ namespace InABox.WPF
|
|
|
|
|
|
using var docStream = new MemoryStream();
|
|
|
pdfDocument.Save(docStream);
|
|
|
-
|
|
|
- var loadeddoc = new PdfLoadedDocument(docStream.ToArray());
|
|
|
- Bitmap[] bmpImages = loadeddoc.ExportAsImage(0, loadeddoc.Pages.Count - 1);
|
|
|
-
|
|
|
+
|
|
|
+ Bitmap[] bmpImages = PDFToBitmapArray(docStream.ToArray());
|
|
|
+
|
|
|
var jpgEncoder = GetEncoder(ImageFormat.Jpeg)!;
|
|
|
var quality = Encoder.Quality;
|
|
|
var encodeParams = new EncoderParameters(1);
|