using Docnet.Core.Models; using Docnet.Core.Readers; using Docnet.Core; using System.Drawing; using System.Drawing.Imaging; using System.Runtime.InteropServices; using Docnet.Core.Exceptions; #region Main Code if (args.Length == 0) { Console.WriteLine("No PDF specified"); return 1; } Console.WriteLine($"Conversion for {args[0]}"); Console.WriteLine("Using configuration"); Console.WriteLine("\tA4 at 96dpi"); Console.WriteLine(); return ReadPDF(args[0]); #endregion #region Functions int ReadPDF(string path) { string outPath = ""; try { outPath = Path.GetFileNameWithoutExtension(path); Directory.CreateDirectory(outPath); } catch (Exception e) { Console.Error.WriteLine("Error creating file directory"); Console.Error.WriteLine(e.Message); Console.ReadKey(); return 2; } try { using (IDocReader docReader = DocLib.Instance.GetDocReader(path, new PageDimensions(794, 1122))) { int pages = docReader.GetPageCount(); Console.WriteLine($"Converting {pages} pages"); for (int i = 0; i < pages; i++) { using (IPageReader pageReader = docReader.GetPageReader(i)) { byte[] rawBytes = pageReader.GetImage(); int width = pageReader.GetPageWidth(); int height = pageReader.GetPageHeight(); using (Bitmap doc = new Bitmap(width, height, PixelFormat.Format32bppArgb)) using (Bitmap bmp = new Bitmap(width, height, PixelFormat.Format32bppArgb)) { AddBytes(bmp, rawBytes); Graphics g = Graphics.FromImage(doc); g.FillRegion(Brushes.White, new Region(new Rectangle(0, 0, width, height))); g.DrawImage(bmp, new Point(0, 0)); g.Save(); if (i == 0) { Bitmap thumb = new Bitmap(doc, new Size(doc.Width / 10, doc.Height / 10)); using (MemoryStream stream = new MemoryStream()) { //saving and exporting thumb.Save(stream, ImageFormat.Jpeg); Console.WriteLine($"Ouputing tumbnail"); File.WriteAllText($"{outPath}\\thumb.bjpg", Convert.ToBase64String(stream.ToArray())); }; } using (MemoryStream stream = new MemoryStream()) { //saving and exporting doc.Save(stream, ImageFormat.Jpeg); Console.WriteLine($"Ouputing page {i + 1}"); File.WriteAllText($"{outPath}\\{i + 1}.bjpg", Convert.ToBase64String(stream.ToArray())); }; }; }; }; } } catch(DocnetLoadDocumentException) { Console.Error.WriteLine("File is not a PDF"); Console.ReadKey(); return 3; } Console.ReadKey(); return 0; } void AddBytes(Bitmap bmp, byte[] rawBytes) { Rectangle rect = new Rectangle(0, 0, bmp.Width, bmp.Height); BitmapData bmpData = bmp.LockBits(rect, ImageLockMode.WriteOnly, bmp.PixelFormat); nint pNative = bmpData.Scan0; Marshal.Copy(rawBytes, 0, pNative, rawBytes.Length); bmp.UnlockBits(bmpData); } #endregion