[#15] MailWindow: Add feature to print
This commit is contained in:
@ -16,6 +16,8 @@ namespace Elwig.Documents {
|
||||
protected TempFile? _pdfFile = null;
|
||||
protected string? _pdfPath;
|
||||
protected string? PdfPath => _pdfPath ?? _pdfFile?.FilePath;
|
||||
public int? TotalPages { get; private set; }
|
||||
public int? Pages => TotalPages / (DoubleSided ? 2 : 1);
|
||||
|
||||
public bool ShowFoldMarks = App.Config.Debug;
|
||||
public bool DoubleSided = false;
|
||||
@ -114,7 +116,8 @@ namespace Elwig.Documents {
|
||||
progress?.Report(GenerationProportion * 100 * i / n);
|
||||
}
|
||||
progress?.Report(GenerationProportion * 100);
|
||||
await Pdf.Convert(tmpFiles, pdf.FileName, DoubleSided, new Progress<double>(v => progress?.Report(GenerationProportion * 100 + v * (1 - GenerationProportion))));
|
||||
var pages = await Pdf.Convert(tmpFiles, pdf.FileName, DoubleSided, new Progress<double>(v => progress?.Report(GenerationProportion * 100 + v * (1 - GenerationProportion))));
|
||||
TotalPages = pages.Pages;
|
||||
foreach (var tmp in tmpHtmls) {
|
||||
tmp.Dispose();
|
||||
}
|
||||
@ -124,7 +127,8 @@ namespace Elwig.Documents {
|
||||
using (var tmpHtml = new TempFile("html")) {
|
||||
await File.WriteAllTextAsync(tmpHtml.FilePath, await Render(), Utils.UTF8);
|
||||
progress?.Report(50.0);
|
||||
await Pdf.Convert(tmpHtml.FilePath, pdf.FilePath, DoubleSided);
|
||||
var pages = await Pdf.Convert(tmpHtml.FilePath, pdf.FilePath, DoubleSided);
|
||||
TotalPages = pages.Pages;
|
||||
}
|
||||
_pdfFile = pdf;
|
||||
}
|
||||
|
@ -49,11 +49,11 @@ namespace Elwig.Helpers.Printing {
|
||||
return Task.CompletedTask;
|
||||
}
|
||||
|
||||
public static async Task<IEnumerable<int>> Convert(string htmlPath, string pdfPath, bool doubleSided = false, IProgress<double>? progress = null) {
|
||||
public static async Task<(int Pages, IEnumerable<int> PerDoc)> Convert(string htmlPath, string pdfPath, bool doubleSided = false, IProgress<double>? progress = null) {
|
||||
return await Convert([htmlPath], pdfPath, doubleSided, progress);
|
||||
}
|
||||
|
||||
public static async Task<IEnumerable<int>> Convert(IEnumerable<string> htmlPath, string pdfPath, bool doubleSided = false, IProgress<double>? progress = null) {
|
||||
public static async Task<(int Pages, IEnumerable<int> PerDoc)> Convert(IEnumerable<string> htmlPath, string pdfPath, bool doubleSided = false, IProgress<double>? progress = null) {
|
||||
if (WinziPrintProc == null) throw new InvalidOperationException("The WinziPrint process has not been initialized yet");
|
||||
progress?.Report(0.0);
|
||||
using var client = new TcpClient("127.0.0.1", 30983);
|
||||
@ -71,8 +71,8 @@ namespace Elwig.Helpers.Printing {
|
||||
var parts = line[9..].Trim().Split('/').Select(int.Parse).ToArray();
|
||||
progress?.Report(100.0 * parts[0] / parts[1]);
|
||||
} else if (line.StartsWith("success:")) {
|
||||
var m = Regex.Match(line, @"\(([0-9, ]+)\)");
|
||||
return m.Groups[1].Value.Split(", ").Select(int.Parse).ToList();
|
||||
var m = Regex.Match(line, @"([0-9]+) pages \(([0-9, ]+)\)");
|
||||
return (int.Parse(m.Groups[1].Value), m.Groups[2].Value.Split(", ").Select(int.Parse).ToList());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -249,9 +249,11 @@
|
||||
Grid.Row="0" Grid.Column="2" Grid.ColumnSpan="3" FontSize="14"
|
||||
Click="PreviewButton_Click"/>
|
||||
<Button x:Name="PrintButton" Content="Drucken" IsEnabled="False"
|
||||
Grid.Row="2" Grid.Column="2" FontSize="14"/>
|
||||
Grid.Row="2" Grid.Column="2" FontSize="14"
|
||||
Click="PrintButton_Click"/>
|
||||
<Button x:Name="EmailButton" Content="E-Mails verschicken" IsEnabled="False"
|
||||
Grid.Row="2" Grid.Column="4" FontSize="14"/>
|
||||
Grid.Row="2" Grid.Column="4" FontSize="14"
|
||||
Click="EmailButton_Click"/>
|
||||
</Grid>
|
||||
|
||||
<Button x:Name="BackButton" Content="Zurück" Grid.Row="1"
|
||||
|
@ -543,7 +543,7 @@ namespace Elwig.Windows {
|
||||
GenerateButton.IsEnabled = true;
|
||||
Mouse.OverrideCursor = null;
|
||||
PreviewButton.IsEnabled = true;
|
||||
//PrintButton.IsEnabled = true;
|
||||
PrintButton.IsEnabled = true;
|
||||
//EmailButton.IsEnabled = true;
|
||||
}
|
||||
|
||||
@ -571,6 +571,24 @@ namespace Elwig.Windows {
|
||||
}
|
||||
}
|
||||
|
||||
private async void PrintButton_Click(object sender, RoutedEventArgs evt) {
|
||||
if (PrintDocument == null) return;
|
||||
var res = MessageBox.Show($"Sollen {PrintDocument.Pages} Blätter ({PrintDocument.TotalPages} Seiten) gedruckt werden?\n" +
|
||||
$"Sind die \"Duplex-Einstellungen\" des Standarddruckers entsprechend eingestellt (doppelseitig bzw. einseitig)?",
|
||||
"Rundschreiben drucken", MessageBoxButton.YesNo, MessageBoxImage.Question, MessageBoxResult.No);
|
||||
if (res == MessageBoxResult.Yes) {
|
||||
if (App.Config.Debug) {
|
||||
PrintDocument.Show();
|
||||
} else {
|
||||
await PrintDocument.Print();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void EmailButton_Click(object sender, RoutedEventArgs evt) {
|
||||
// TODO
|
||||
}
|
||||
|
||||
public void AddDeliveryConfirmation() {
|
||||
AvaiableDocumentsList.SelectedIndex = 1;
|
||||
if (AvaiableDocumentsList.SelectedItem is not string s || SelectedDocs.Any(d => d.Type == DocType.DeliveryConfirmation))
|
||||
|
Reference in New Issue
Block a user