Printing/Pdf: Update WinziPrint version to 0.2.3

This commit is contained in:
2024-03-02 18:49:32 +01:00
parent 37e10136f4
commit 9139557cc4
6 changed files with 119 additions and 66 deletions

View File

@ -109,7 +109,7 @@ namespace Elwig.Documents {
var tmpHtml = new TempFile("html"); var tmpHtml = new TempFile("html");
await File.WriteAllTextAsync(tmpHtml.FilePath, await doc.Render(), Utils.UTF8); await File.WriteAllTextAsync(tmpHtml.FilePath, await doc.Render(), Utils.UTF8);
tmpHtmls.Add(tmpHtml); tmpHtmls.Add(tmpHtml);
tmpFiles.Add(tmpHtml.FileName); tmpFiles.Add((doc is Letterhead ? "#" : "") + tmpHtml.FileName);
i++; i++;
progress?.Report(GenerationProportion * 100 * i / n); progress?.Report(GenerationProportion * 100 * i / n);
} }

View File

@ -54,14 +54,13 @@ namespace Elwig.Helpers.Printing {
while (true) { while (true) {
var line = await WinziPrintProc.StandardOutput.ReadLineAsync() ?? throw new IOException("Invalid response from WinziPrint"); var line = await WinziPrintProc.StandardOutput.ReadLineAsync() ?? throw new IOException("Invalid response from WinziPrint");
if (line.StartsWith("error:")) { if (line.StartsWith("error:")) {
MessageBox.Show(line[6..].Trim(), "Fehler", MessageBoxButton.OK, MessageBoxImage.Error); throw new IOException($"WinziPrint: {line[6..].Trim()}");
return Array.Empty<int>();
} else if (line.StartsWith("progress:")) { } else if (line.StartsWith("progress:")) {
var parts = line[9..].Trim().Split('/').Select(int.Parse).ToArray(); var parts = line[9..].Trim().Split('/').Select(int.Parse).ToArray();
progress?.Report(100.0 * parts[0] / parts[1]); progress?.Report(100.0 * parts[0] / parts[1]);
} else if (line.StartsWith("success:")) { } else if (line.StartsWith("success:")) {
var m = Regex.Match(line, @"\(([0-9, ]+)\)"); var m = Regex.Match(line, @"\(([0-9, ]+)\)");
return m.Groups[1].Value.Split(", ").Select(int.Parse); return m.Groups[1].Value.Split(", ").Select(int.Parse).ToList();
} }
} }
} }

View File

@ -126,19 +126,27 @@ namespace Elwig.Windows {
private async void Menu_Print_ShowDeliveryNote_Click(object sender, RoutedEventArgs evt) { private async void Menu_Print_ShowDeliveryNote_Click(object sender, RoutedEventArgs evt) {
if (DeliveryList.SelectedItem is not Delivery d) return; if (DeliveryList.SelectedItem is not Delivery d) return;
Mouse.OverrideCursor = Cursors.AppStarting; Mouse.OverrideCursor = Cursors.AppStarting;
using var doc = new DeliveryNote(d, Context); try {
await doc.Generate(); using var doc = new DeliveryNote(d, Context);
await doc.Generate();
doc.Show();
} catch (Exception exc) {
MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error);
}
Mouse.OverrideCursor = null; Mouse.OverrideCursor = null;
doc.Show();
} }
private async void Menu_Print_PrintDeliveryNote_Click(object sender, RoutedEventArgs evt) { private async void Menu_Print_PrintDeliveryNote_Click(object sender, RoutedEventArgs evt) {
if (DeliveryList.SelectedItem is not Delivery d) return; if (DeliveryList.SelectedItem is not Delivery d) return;
Mouse.OverrideCursor = Cursors.AppStarting; Mouse.OverrideCursor = Cursors.AppStarting;
using var doc = new DeliveryNote(d, Context); try {
await doc.Generate(); using var doc = new DeliveryNote(d, Context);
await doc.Generate();
await doc.Print();
} catch (Exception exc) {
MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error);
}
Mouse.OverrideCursor = null; Mouse.OverrideCursor = null;
await doc.Print();
} }
private async void Menu_Export_Bki_Click(object sender, RoutedEventArgs evt) { private async void Menu_Export_Bki_Click(object sender, RoutedEventArgs evt) {
@ -160,36 +168,52 @@ namespace Elwig.Windows {
private async void Menu_Print_DeliveryJournal_ShowToday_Click(object sender, RoutedEventArgs evt) { private async void Menu_Print_DeliveryJournal_ShowToday_Click(object sender, RoutedEventArgs evt) {
Mouse.OverrideCursor = Cursors.AppStarting; Mouse.OverrideCursor = Cursors.AppStarting;
var doc = new DeliveryJournal(Context, DateOnly.FromDateTime(Utils.Today)); try {
await doc.Generate(); var doc = new DeliveryJournal(Context, DateOnly.FromDateTime(Utils.Today));
await doc.Generate();
doc.Show();
} catch (Exception exc) {
MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error);
}
Mouse.OverrideCursor = null; Mouse.OverrideCursor = null;
doc.Show();
} }
private async void Menu_Print_DeliveryJournal_PrintToday_Click(object sender, RoutedEventArgs evt) { private async void Menu_Print_DeliveryJournal_PrintToday_Click(object sender, RoutedEventArgs evt) {
Mouse.OverrideCursor = Cursors.AppStarting; Mouse.OverrideCursor = Cursors.AppStarting;
var doc = new DeliveryJournal(Context, DateOnly.FromDateTime(Utils.Today)); try {
await doc.Generate(); var doc = new DeliveryJournal(Context, DateOnly.FromDateTime(Utils.Today));
await doc.Generate();
await doc.Print();
} catch (Exception exc) {
MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error);
}
Mouse.OverrideCursor = null; Mouse.OverrideCursor = null;
await doc.Print();
} }
private async void Menu_Print_DeliveryJournal_ShowFilter_Click(object sender, RoutedEventArgs evt) { private async void Menu_Print_DeliveryJournal_ShowFilter_Click(object sender, RoutedEventArgs evt) {
Mouse.OverrideCursor = Cursors.AppStarting; Mouse.OverrideCursor = Cursors.AppStarting;
var (f, _, d, _, _) = await GetFilters(); try {
var doc = new DeliveryJournal(string.Join(" / ", f), d); var (f, _, d, _, _) = await GetFilters();
await doc.Generate(); var doc = new DeliveryJournal(string.Join(" / ", f), d);
await doc.Generate();
doc.Show();
} catch (Exception exc) {
MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error);
}
Mouse.OverrideCursor = null; Mouse.OverrideCursor = null;
doc.Show();
} }
private async void Menu_Print_DeliveryJournal_PrintFilter_Click(object sender, RoutedEventArgs evt) { private async void Menu_Print_DeliveryJournal_PrintFilter_Click(object sender, RoutedEventArgs evt) {
Mouse.OverrideCursor = Cursors.AppStarting; Mouse.OverrideCursor = Cursors.AppStarting;
var (f, _, d, _, _) = await GetFilters(); try {
var doc = new DeliveryJournal(string.Join(" / ", f), d); var (f, _, d, _, _) = await GetFilters();
await doc.Generate(); var doc = new DeliveryJournal(string.Join(" / ", f), d);
await doc.Generate();
doc.Show();
} catch (Exception exc) {
MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error);
}
Mouse.OverrideCursor = null; Mouse.OverrideCursor = null;
doc.Show();
} }
private void Menu_Settings_EnableFreeEditing_Checked(object sender, RoutedEventArgs evt) { private void Menu_Settings_EnableFreeEditing_Checked(object sender, RoutedEventArgs evt) {
@ -1153,14 +1177,18 @@ namespace Elwig.Windows {
await RefreshDeliveryParts(); await RefreshDeliveryParts();
if (p?.Delivery != null) { if (p?.Delivery != null) {
Mouse.OverrideCursor = Cursors.AppStarting; Mouse.OverrideCursor = Cursors.AppStarting;
using var doc = new DeliveryNote(p.Delivery, Context); try {
await doc.Generate(); using var doc = new DeliveryNote(p.Delivery, Context);
Mouse.OverrideCursor = null; await doc.Generate();
if (App.Config.Debug) { if (App.Config.Debug) {
doc.Show(); doc.Show();
} else { } else {
await doc.Print(2); await doc.Print(2);
}
} catch (Exception exc) {
MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error);
} }
Mouse.OverrideCursor = null;
} }
FinishButton.Cursor = null; FinishButton.Cursor = null;
DeliveryList.SelectedItem = null; DeliveryList.SelectedItem = null;

View File

@ -487,12 +487,17 @@ namespace Elwig.Windows {
return docs; return docs;
}); });
var emailRecipients = email.Select(d => d.Key.MgNr).ToHashSet(); var emailRecipients = email.Select(d => d.Key.MgNr).ToHashSet();
foreach (var item1 in email.Select((e, i) => new { Index = i, e.Key, e.Value })) { try {
foreach (var item2 in item1.Value.Select((d, i) => new { Index = i, Doc = d})) { foreach (var item1 in email.Select((e, i) => new { Index = i, e.Key, e.Value })) {
await item2.Doc.Generate(new Progress<double>(v => { foreach (var item2 in item1.Value.Select((d, i) => new { Index = i, Doc = d })) {
ProgressBar.Value = v * (item2.Index + 1) / item1.Value.Count / totalNum + 100.0 * item1.Index / totalNum; await item2.Doc.Generate(new Progress<double>(v => {
})); ProgressBar.Value = v * (item2.Index + 1) / item1.Value.Count / totalNum + 100.0 * item1.Index / totalNum;
}));
}
} }
} catch (Exception exc) {
MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error);
return;
} }
if (email.Count > 0) { if (email.Count > 0) {
EmailDocuments = email; EmailDocuments = email;
@ -516,12 +521,17 @@ namespace Elwig.Windows {
.ToList(); .ToList();
if (printDocs.Count > 0) { if (printDocs.Count > 0) {
var print = Document.Merge(printDocs); try {
print.DoubleSided = doublePaged; var print = Document.Merge(printDocs);
await print.Generate(new Progress<double>(v => { print.DoubleSided = doublePaged;
ProgressBar.Value = 100.0 * emailNum / totalNum + v * printNum / totalNum; await print.Generate(new Progress<double>(v => {
})); ProgressBar.Value = 100.0 * emailNum / totalNum + v * printNum / totalNum;
PrintDocument = print; }));
PrintDocument = print;
} catch (Exception exc) {
MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error);
return;
}
} }
ProgressBar.Value = 100.0; ProgressBar.Value = 100.0;

View File

@ -432,14 +432,18 @@ namespace Elwig.Windows {
if (MemberList.SelectedItem is not Member m) if (MemberList.SelectedItem is not Member m)
return; return;
Mouse.OverrideCursor = Cursors.AppStarting; Mouse.OverrideCursor = Cursors.AppStarting;
using var doc = new Letterhead(m); try {
await doc.Generate(); using var doc = new Letterhead(m);
Mouse.OverrideCursor = null; await doc.Generate();
if (App.Config.Debug) { if (App.Config.Debug) {
doc.Show(); doc.Show();
} else { } else {
await doc.Print(); await doc.Print();
}
} catch (Exception exc) {
MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error);
} }
Mouse.OverrideCursor = null;
} }
private async Task PrintLetterheads(int ordering) { private async Task PrintLetterheads(int ordering) {
@ -468,14 +472,18 @@ namespace Elwig.Windows {
.ThenBy(m => m.MgNr); .ThenBy(m => m.MgNr);
break; break;
} }
using var doc = Document.Merge((await members.ToListAsync()).Select(m => new Letterhead(m))); try {
await doc.Generate(); using var doc = Document.Merge((await members.ToListAsync()).Select(m => new Letterhead(m)));
Mouse.OverrideCursor = null; await doc.Generate();
if (App.Config.Debug) { if (App.Config.Debug) {
doc.Show(); doc.Show();
} else { } else {
await doc.Print(); await doc.Print();
}
} catch (Exception exc) {
MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error);
} }
Mouse.OverrideCursor = null;
} }
private async void Menu_Print_Letterheads_MgNr_Click(object sender, RoutedEventArgs evt) { private async void Menu_Print_Letterheads_MgNr_Click(object sender, RoutedEventArgs evt) {
@ -494,24 +502,32 @@ namespace Elwig.Windows {
if (MemberList.SelectedItem is not Member m) if (MemberList.SelectedItem is not Member m)
return; return;
Mouse.OverrideCursor = Cursors.AppStarting; Mouse.OverrideCursor = Cursors.AppStarting;
using var doc = new MemberDataSheet(m, Context); try {
await doc.Generate(); using var doc = new MemberDataSheet(m, Context);
Mouse.OverrideCursor = null; await doc.Generate();
if (App.Config.Debug) { if (App.Config.Debug) {
doc.Show(); doc.Show();
} else { } else {
await doc.Print(); await doc.Print();
}
} catch (Exception exc) {
MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error);
} }
Mouse.OverrideCursor = null;
} }
private async void Menu_Show_MemberDataSheet_Click(object sender, RoutedEventArgs evt) { private async void Menu_Show_MemberDataSheet_Click(object sender, RoutedEventArgs evt) {
if (MemberList.SelectedItem is not Member m) if (MemberList.SelectedItem is not Member m)
return; return;
Mouse.OverrideCursor = Cursors.AppStarting; Mouse.OverrideCursor = Cursors.AppStarting;
using var doc = new MemberDataSheet(m, Context); try {
await doc.Generate(); using var doc = new MemberDataSheet(m, Context);
await doc.Generate();
doc.Show();
} catch (Exception exc) {
MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error);
}
Mouse.OverrideCursor = null; Mouse.OverrideCursor = null;
doc.Show();
} }
private void FocusSearchInput(object sender, RoutedEventArgs evt) { private void FocusSearchInput(object sender, RoutedEventArgs evt) {

Binary file not shown.