using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using System.Reflection.Metadata.Ecma335; using System.Text; using System.Threading.Tasks; using PdfSharp.Pdf.IO; using PuppeteerSharp; using PuppeteerSharp.Media; using RazorLight; using WGneu.Windows; namespace WGneu.Documents { public static class Pdf { private static readonly string CHROMIUM = @"C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe"; private static IBrowser? Browser = null; public static bool IsReady => Browser != null; public static async Task Init(Action evtHandler) { Browser = await Puppeteer.LaunchAsync(new LaunchOptions { Headless = true, ExecutablePath = CHROMIUM, }); evtHandler(); } public static async Task Convert(string path_html, string path_pdf) { if (Browser == null) throw new InvalidOperationException("The puppeteer engine has not been initialized yet"); using var page = await Browser.NewPageAsync(); await page.GoToAsync("file://" + path_html); await page.WaitForFunctionAsync("() => window.finished"); await page.PdfAsync(path_pdf, new() { PreferCSSPageSize = true, //Format = PaperFormat.A4, DisplayHeaderFooter = false, MarginOptions = new() { Top = "0mm", Right = "0mm", Bottom = "0mm", Left = "0mm", }, }); } public static void UpdateMetadata(string path, string title, string author) { using var doc = PdfReader.Open(path); doc.Info.Title = title; doc.Info.Author = author; doc.Save(path); } public static void Show(string path, string title) { var w = new DocumentViewerWindow(title, path); w.Show(); } public static void Print(string path) { // TODO print pdf } } }