68 lines
2.6 KiB
C#
68 lines
2.6 KiB
C#
using System.Threading.Tasks;
|
|
using Elwig.Helpers;
|
|
using Elwig.Windows;
|
|
using System.Diagnostics;
|
|
using Balbarak.WeasyPrint;
|
|
using System;
|
|
using System.IO;
|
|
|
|
namespace Elwig.Documents {
|
|
public static class Pdf {
|
|
|
|
private static readonly string PdfToPrinter = App.ExePath + "PDFtoPrinter.exe";
|
|
private static readonly FilesManager WeasyPrintManager = new();
|
|
private static string? WeasyPrintPython = null;
|
|
private static string? WeasyPrintDir => WeasyPrintManager.FolderPath;
|
|
public static bool IsReady => WeasyPrintPython != null && WeasyPrintDir != null;
|
|
|
|
public static async Task Init(Action evtHandler) {
|
|
if (!WeasyPrintManager.IsFilesExsited()) {
|
|
await WeasyPrintManager.InitFilesAsync();
|
|
}
|
|
WeasyPrintPython = Path.Combine(WeasyPrintManager.FolderPath, "python.exe");
|
|
evtHandler();
|
|
}
|
|
|
|
public static async Task Convert(string htmlPath, string pdfPath) {
|
|
var p = new Process() { StartInfo = new() {
|
|
FileName = WeasyPrintPython,
|
|
CreateNoWindow = true,
|
|
WorkingDirectory = WeasyPrintDir,
|
|
RedirectStandardError = true,
|
|
} };
|
|
p.StartInfo.EnvironmentVariables["PATH"] = "Scripts;gtk3;" + Environment.GetEnvironmentVariable("PATH");
|
|
p.StartInfo.ArgumentList.Add("scripts/weasyprint.exe");
|
|
p.StartInfo.ArgumentList.Add("-e");
|
|
p.StartInfo.ArgumentList.Add("utf8");
|
|
p.StartInfo.ArgumentList.Add(htmlPath);
|
|
p.StartInfo.ArgumentList.Add(pdfPath);
|
|
p.Start();
|
|
await p.WaitForExitAsync();
|
|
var stderr = await p.StandardError.ReadToEndAsync();
|
|
if (p.ExitCode != 0) throw new Exception(stderr);
|
|
}
|
|
|
|
public static void Show(TempFile file, string title) {
|
|
App.MainDispatcher.BeginInvoke(() => {
|
|
var w = new DocumentViewerWindow(title, file);
|
|
w.Show();
|
|
});
|
|
}
|
|
|
|
public static void Show(string path, string title) {
|
|
App.MainDispatcher.BeginInvoke(() => {
|
|
var w = new DocumentViewerWindow(title, path);
|
|
w.Show();
|
|
});
|
|
}
|
|
|
|
public static async Task Print(string path, int copies = 1) {
|
|
var p = new Process() { StartInfo = new() { FileName = PdfToPrinter } };
|
|
p.StartInfo.ArgumentList.Add(path);
|
|
p.StartInfo.ArgumentList.Add($"copies={copies}");
|
|
p.Start();
|
|
await p.WaitForExitAsync();
|
|
}
|
|
}
|
|
}
|