Skip to content

Commit 40d1046

Browse files
committed
fixed list report and print review
1 parent cbd149c commit 40d1046

4 files changed

Lines changed: 106 additions & 27 deletions

File tree

src/Tender.Desktop/Services/PrintHelper.cs

Lines changed: 15 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -4,28 +4,23 @@
44
using System.Windows.Media;
55
using Microsoft.Win32;
66
using Tender.Desktop.ViewModels;
7+
using Tender.Desktop.Views;
78

89
namespace Tender.Desktop.Services;
910

1011
/// <summary>
11-
/// 把 TenderItemViewModel 集合產出 FlowDocument 並透過 PrintDialog 列印
12+
/// 把 TenderItemViewModel 集合產出 FlowDocument 並透過列印預覽視窗送印
1213
/// </summary>
1314
public static class PrintHelper
1415
{
1516
public static void Print(IReadOnlyList<TenderItemViewModel> items, string title)
1617
{
17-
var dlg = new System.Windows.Controls.PrintDialog();
18-
if (dlg.ShowDialog() != true) return;
19-
2018
var doc = BuildFlowDocument(items, title);
21-
doc.PageHeight = dlg.PrintableAreaHeight;
22-
doc.PageWidth = dlg.PrintableAreaWidth;
23-
doc.PagePadding = new Thickness(40);
24-
doc.ColumnGap = 0;
25-
doc.ColumnWidth = double.PositiveInfinity;
26-
27-
IDocumentPaginatorSource src = doc;
28-
dlg.PrintDocument(src.DocumentPaginator, title);
19+
var window = new PrintPreviewWindow(doc, title)
20+
{
21+
Owner = Application.Current?.MainWindow,
22+
};
23+
window.ShowDialog();
2924
}
3025

3126
private static FlowDocument BuildFlowDocument(IReadOnlyList<TenderItemViewModel> items, string title)
@@ -60,12 +55,14 @@ private static FlowDocument BuildFlowDocument(IReadOnlyList<TenderItemViewModel>
6055
BorderBrush = Brushes.Gray,
6156
BorderThickness = new Thickness(0.5),
6257
};
63-
table.Columns.Add(new TableColumn { Width = new GridLength(150) }); // 機關
64-
table.Columns.Add(new TableColumn { Width = new GridLength(1, GridUnitType.Star) }); // 標案名稱
65-
table.Columns.Add(new TableColumn { Width = new GridLength(80) }); // 招標方式
66-
table.Columns.Add(new TableColumn { Width = new GridLength(80) }); // 公告日期
67-
table.Columns.Add(new TableColumn { Width = new GridLength(80) }); // 截止
68-
table.Columns.Add(new TableColumn { Width = new GridLength(90) }); // 預算
58+
// FlowDocument Table 不支援 GridUnitType.Star,所有欄位需用固定 px。
59+
// 總和約 690 px,配 A4 縱向頁寬 793.92 - PagePadding 80 = 713.92 可用區域。
60+
table.Columns.Add(new TableColumn { Width = new GridLength(120) }); // 機關名稱
61+
table.Columns.Add(new TableColumn { Width = new GridLength(255) }); // 標案名稱(最長)
62+
table.Columns.Add(new TableColumn { Width = new GridLength(70) }); // 招標方式
63+
table.Columns.Add(new TableColumn { Width = new GridLength(70) }); // 公告日期
64+
table.Columns.Add(new TableColumn { Width = new GridLength(70) }); // 截止投標
65+
table.Columns.Add(new TableColumn { Width = new GridLength(95) }); // 預算金額
6966

7067
// 表頭
7168
var headerGroup = new TableRowGroup();

src/Tender.Desktop/Views/DailyQueryView.xaml

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -428,7 +428,9 @@
428428
Background="{StaticResource BgMainBrush}"
429429
BorderBrush="{StaticResource BorderBrush}"
430430
Foreground="{StaticResource TextPrimaryBrush}"
431-
HeadersVisibility="Column">
431+
HeadersVisibility="Column"
432+
ScrollViewer.HorizontalScrollBarVisibility="Auto"
433+
ScrollViewer.VerticalScrollBarVisibility="Auto">
432434
<DataGrid.InputBindings>
433435
<MouseBinding MouseAction="LeftDoubleClick"
434436
Command="{Binding OpenDetailCommand}"
@@ -521,13 +523,13 @@
521523
</DataTemplate>
522524
</DataGridTemplateColumn.CellTemplate>
523525
</DataGridTemplateColumn>
524-
<DataGridTextColumn Header="機關名稱" Binding="{Binding AgencyName}" Width="180" />
525-
<DataGridTextColumn Header="標案名稱" Binding="{Binding TenderName}" Width="*" />
526-
<DataGridTextColumn Header="招標方式" Binding="{Binding TenderMethod}" Width="120" />
527-
<DataGridTextColumn Header="採購性質" Binding="{Binding ProcurementType}" Width="80" />
528-
<DataGridTextColumn Header="公告日期" Binding="{Binding AnnouncementDate}" Width="90" />
529-
<DataGridTextColumn Header="截止投標" Binding="{Binding BidDeadline}" Width="90" />
530-
<DataGridTextColumn Header="預算金額" Binding="{Binding BudgetAmount, StringFormat='{}{0:N0}'}" Width="120">
526+
<DataGridTextColumn Header="機關名稱" Binding="{Binding AgencyName}" Width="180" MinWidth="140" />
527+
<DataGridTextColumn Header="標案名稱" Binding="{Binding TenderName}" Width="*" MinWidth="320" />
528+
<DataGridTextColumn Header="招標方式" Binding="{Binding TenderMethod}" Width="120" MinWidth="100" />
529+
<DataGridTextColumn Header="採購性質" Binding="{Binding ProcurementType}" Width="80" MinWidth="70" />
530+
<DataGridTextColumn Header="公告日期" Binding="{Binding AnnouncementDate}" Width="90" MinWidth="80" />
531+
<DataGridTextColumn Header="截止投標" Binding="{Binding BidDeadline}" Width="90" MinWidth="80" />
532+
<DataGridTextColumn Header="預算金額" Binding="{Binding BudgetAmount, StringFormat='{}{0:N0}'}" Width="120" MinWidth="100">
531533
<DataGridTextColumn.ElementStyle>
532534
<Style TargetType="TextBlock">
533535
<Setter Property="HorizontalAlignment" Value="Right" />
@@ -536,7 +538,7 @@
536538
</DataGridTextColumn>
537539
<DataGridTextColumn Header="命中關鍵字"
538540
Binding="{Binding MatchedKeywords, Converter={StaticResource ListJoinConverter}}"
539-
Width="180" />
541+
Width="180" MinWidth="140" />
540542
</DataGrid.Columns>
541543
</DataGrid>
542544

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
<Window x:Class="Tender.Desktop.Views.PrintPreviewWindow"
2+
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
3+
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
4+
Title="列印預覽"
5+
Height="820" Width="1180"
6+
WindowStartupLocation="CenterOwner"
7+
Background="{StaticResource BgMainBrush}"
8+
FontFamily="Microsoft JhengHei UI">
9+
<DockPanel>
10+
<Border DockPanel.Dock="Top" Padding="10,8"
11+
Background="{StaticResource BgCardBrush}"
12+
BorderBrush="{StaticResource BorderBrush}"
13+
BorderThickness="0,0,0,1">
14+
<StackPanel Orientation="Horizontal">
15+
<Button Content="🖨 列印..." Click="Print_Click"
16+
Style="{StaticResource PrimaryButtonStyle}"
17+
Padding="20,5" Margin="0,0,8,0" />
18+
<Button Content="關閉" Click="Close_Click"
19+
Padding="20,5" IsCancel="True" />
20+
<TextBlock Text="(捲動瀏覽 / 滑鼠滾輪縮放)" VerticalAlignment="Center"
21+
Margin="14,0,0,0"
22+
Foreground="{StaticResource TextMutedBrush}" FontSize="11" />
23+
</StackPanel>
24+
</Border>
25+
<FlowDocumentReader x:Name="Reader"
26+
ViewingMode="Page"
27+
Background="{StaticResource BgSubtleBrush}" />
28+
</DockPanel>
29+
</Window>
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
using System.Windows;
2+
using System.Windows.Documents;
3+
4+
namespace Tender.Desktop.Views;
5+
6+
public partial class PrintPreviewWindow : Window
7+
{
8+
private readonly FlowDocument _document;
9+
private readonly string _title;
10+
11+
public PrintPreviewWindow(FlowDocument document, string title)
12+
{
13+
InitializeComponent();
14+
_document = document;
15+
_title = title;
16+
17+
// 預覽用 A4 縱向(96 dpi);實際列印時會以 PrintDialog 選定的 PrintableArea 覆寫。
18+
document.PageHeight = 1122.24; // ~11.69 inches
19+
document.PageWidth = 793.92; // ~8.27 inches
20+
document.PagePadding = new Thickness(40);
21+
document.ColumnGap = 0;
22+
document.ColumnWidth = double.PositiveInfinity;
23+
24+
Reader.Document = document;
25+
}
26+
27+
private void Print_Click(object sender, RoutedEventArgs e)
28+
{
29+
var dlg = new System.Windows.Controls.PrintDialog();
30+
if (dlg.ShowDialog() != true) return;
31+
32+
// FlowDocument 同時被 Reader 持有,需暫時卸下才能更換頁面尺寸並送印
33+
Reader.Document = null;
34+
try
35+
{
36+
_document.PageHeight = dlg.PrintableAreaHeight;
37+
_document.PageWidth = dlg.PrintableAreaWidth;
38+
IDocumentPaginatorSource src = _document;
39+
dlg.PrintDocument(src.DocumentPaginator, _title);
40+
}
41+
finally
42+
{
43+
// 還原預覽尺寸並重新掛回 Reader(讓使用者能再次預覽 / 列印)
44+
_document.PageHeight = 1122.24;
45+
_document.PageWidth = 793.92;
46+
Reader.Document = _document;
47+
}
48+
}
49+
50+
private void Close_Click(object sender, RoutedEventArgs e) => Close();
51+
}

0 commit comments

Comments
 (0)