JSRuntimeでウィンドウを印刷してすべてのレコードを表示するにはどうすればよいですか?
P粉139351297
P粉139351297 2024-03-19 19:57:53
0
1
414

私は Blazor サーバー プロジェクトに取り組んでいます。要件の 1 つは、ポップアップ ウィンドウにレコードを表示し、それを PDF ドキュメントとして印刷することです。 レコードが多すぎて 1 ページに収まらない場合、PDF は 単一ページ としてのみ保存されます。つまり、PDF の最初のページに収まるレコードはわずかしかないということです。 PDF にすべてのレコードを表示するにはどうすればよいですか? CSSのせいでしょうか?

モーダルは次のとおりです:

@ページ「/dialogcard/{注文}」
     @usingIMS.CoreBusiness
     @usingIMS.UseCases.Interfaces.OrderDetail
     @using System.Globalization
     @inject IViewOrderDetailsByOrderIdUseCase ViewOrderDetailsByOrderIdUseCase
     @inject DialogService DialogService
     @inject IJSRuntime JsRuntime
        
     <スタイル>
         .rz-ダイアログ-ラッパー {
             左:0;
         }
        
         /*.rz-カード{
             マージントップ: -1.9rem !重要;
         }*/
         .rz-ダイアログコンテンツ {
              
             マージントップ: -55px;
         }
            
     </スタイル>
        
     @if (orderDetails != null)
     {
         <div id="printarea1">
             <div class="行 my-4">
                 <div class="col-md-12">
        
                     <ラジゼンカード>
                         <h3クラス="h5">
                             注文日: @Order.OrderDateTime
                                
                         </h3>
                         <RadzenTabs>
                             <タブ>
        
                                 @{
                                     var 詳細ベンダー ID = 0;
                                 }
                                 @foreach (orderDetails の var 詳細)
                                 {
                                     @if (詳細ベンダー ID != 詳細.ベンダー ID)
                                     {
                                         <RadzenTabsItem Text="@detail.Vendor.Name">
        
                                             <div class="行">
                                                 <div class="col-lg-6 d-flex">
                                                     <RadzenCard Style="幅: 100%; オーバーフロー: 非表示;">
                                                         <h3 class="h5">連絡先</h3>
                                                         <div class="d-flex flex-row">
                                                             <div>
                                                                 
会社
<b>ヴォーランス</b> <div class="mt-3">責任者</div> <b>@detail.Order.DoneBy</b> <div class="mt-3">ベンダー</div> <b>@detail?.ベンダー名</b> </div> </div> </RadzenCard> </div> <div class="col-lg-6 d-flex"> <RadzenCard Style="幅: 100%; オーバーフロー: 非表示;"> <h3 class="h5">配送情報</h3> <div class="行"> <div class="col"> <div>会社名</div> @switch (詳細.倉庫) { ケース「深セン倉庫」: <b>@string.Format(new CultureInfo("en-US"), "test")</b> <div>アドレス</div> <b>@string.Format(new CultureInfo("en-US"), "test")</b> <div>連絡先名</div> <b>@string.Format(new CultureInfo("en-US"), "test")</b> <div>メール</div> <b>@string.Format(new CultureInfo("en-US"), "test")</b> <div>電話</div> <b>@string.Format(new CultureInfo("en-US"), " 1233455")</b> 壊す; ケース「米国倉庫」: <b>@string.Format(new CultureInfo("en-US"), "会社名: TRADING LLC")</b> <div>アドレス</div> <b>@string.Format(new CultureInfo("en-US"), "1243445,Coconut Creek, FL, ZIP Code: 33073")</b> <div>連絡先名</div> <b>@string.Format(new CultureInfo("en-US"), "Test")</b> <div>メール</div> <b>@string.Format(new CultureInfo("en-US"), "[email protected]")</b> <div>電話</div> <b>@string.Format(new CultureInfo("en-US"), " 123242422")</b> 壊す; 「個人配送」の場合: <b>@string.Format(new CultureInfo("en-US"), "ELEKTRONIK SANAYI VE TICARET LTD. STI.")</b> <div>アドレス</div> <b>@string.Format(new CultureInfo("en-US"), "test")</b> <div>連絡先名</div> <b>@string.Format(new CultureInfo("en-US"), "Test")</b> <div>メール</div> <b>@string.Format(new CultureInfo("en-US"), "[email protected]")</b> <div>電話</div> <b>@string.Format(new CultureInfo("en-US"), "111122")</b> 壊す; } @*
アドレス
<b>@(詳細?.倉庫)</b> *@ </div> </div> </RadzenCard> </div> </div> <RadzenDataGridAllowFiltering="false"AllowPaging="false"AllowSorting="true" FilterCaseSensitivity="FilterCaseSensitivity.CaseInsensitive" Data="@orderDetails.Where(x => x.VendorId == 詳細.VendorId)" TItem="OrderDetail" Class="mt-3" Style="height:190px"> <列> <RadzenDataGridColumn TItem="OrderDetail" Property="OrderId" Title="注文 ID" width="100px"/> <RadzenDataGridColumn TItem="OrderDetail" Property="Id" Title="商品 ID" width="100px"/> <RadzenDataGridColumn TItem="OrderDetail" Property="ProductCode" Title="商品コード" width="150px"/> <RadzenDataGridColumn TItem="OrderDetail" Property="通貨" Title="通貨" 幅="95px"/> <RadzenDataGridColumn TItem="OrderDetail" Property="数量" Title="数量" 幅="95px"> <フッターテンプレート> <b>@string.Format(new CultureInfo("tr-TR"), "{0:G}", orderDetails?.Where(x => x.VendorId == 詳細.VendorId).Sum(o = > o.数量))</b> </フッターテンプレート> </RadzenDataGridColumn> <RadzenDataGridColumn TItem="OrderDetail" Property="BuyUnitPrice" Title="単価" width="100px"> <テンプレートコンテキスト="詳細"> @switch (詳細.通貨) { ケース「USD」: @string.Format(new CultureInfo("en-US"), "{0}{1:0.#####}",new CultureInfo("en-US").NumberFormat.CurrencySymbol,detail.BuyUnitPrice) 壊す; 「ユーロ」の場合: @string.Format(new CultureInfo("en-FR"), "{0}{1:0.#####}",new CultureInfo("en-FR").NumberFormat.CurrencySymbol,detail.BuyUnitPrice) 壊す; デフォルト: @string.Format(new CultureInfo("tr-TR"), "{0}{1:0.#####}",new CultureInfo("tr-TR").NumberFormat.CurrencySymbol,detail.BuyUnitPrice) 壊す; } </テンプレート> </RadzenDataGridColumn> <RadzenDataGridColumn TItem="OrderDetail" Property="TotalBuyPrice" Title="合計価格" width="100px"> <テンプレートコンテキスト="詳細"> @switch (詳細.通貨) { ケース「USD」: @string.Format(new CultureInfo("en-US"), "{0}{1:0.#####}",new CultureInfo("en-US").NumberFormat.CurrencySymbol,detail.TotalBuyPrice) 壊す; 「ユーロ」の場合: @string.Format(new CultureInfo("en-FR"), "{0}{1:0.#####}",new CultureInfo("en-FR").NumberFormat.CurrencySymbol,detail.TotalBuyPrice) 壊す; デフォルト: @string.Format(new CultureInfo("tr-TR"), "{0}{1:0.#####}",new CultureInfo("tr-TR").NumberFormat.CurrencySymbol,detail.TotalBuyPrice) 壊す; } </テンプレート> <フッターテンプレート> @switch (詳細.通貨) { ケース「USD」: <b>@string.Format(new CultureInfo("en-US"), "{0:N2}", orderDetails?.Where(x => x.VendorId == 詳細.VendorId).Sum(o = > o.合計購入価格))</b> 壊す; 「ユーロ」の場合: <b>@string.Format(new CultureInfo("en-FR"), "{0:N2}", orderDetails?.Where(x => x.VendorId == 詳細.VendorId).Sum(o => o.TotalBuyPrice))</b>; 壊す; デフォルト: <b>@string.Format(new CultureInfo("tr-TR"), "{0:N2}", orderDetails?.Where(x => x.VendorId == 詳細.VendorId).Sum(o = > o.合計購入価格))</b> 壊す; } </フッターテンプレート> </RadzenDataGridColumn> </列> </RadzenDataGrid> </RadzenTabsItem> } 詳細ベンダー ID = 詳細.ベンダー ID; } </タブ> </RadzenTabs> </RadzenCard> </div> </div> </div> } <div class="行"> <div class="col-md-12 text-right"> <RadzenButton Click="@((args) => DialogService.Close(false))" ButtonStyle="ButtonStyle.Secondary" Text="Close" Style="width: 120px" Class="mr-1"/> ; <RadzenButton Click="PrintDocument" Text="Print" Style="width: 120px" /> @*<button type="button" class="btn btn-primary btns" @onclick="PrintDocument">印刷</button>*@ </div> </div> @コード{ [パラメータ] public ReportViewModel Order { get; set; } IEnumerable<OrderDetail> orderDetails; protected オーバーライド非同期タスク OnInitializedAsync() { orderDetails = await ViewOrderDetailsByOrderIdUseCase.ExecuteAsync(Order.OrderId); } プライベート void PrintDocument() { JsRuntime.InvokeVoidAsync("print"); } }

これはパターンのスクリーンショットです:

これは印刷プレビューです:

これは関連する CSS です:

@メディア プリント {
     体 * {
         可視性: 非表示;
     }
    
     #printarea1、#printarea1 *{
         可視性: 可視;
     }
     #printarea、#printarea * {
         可視性: 可視;
     }
     .rz-tabview-nav li:not(.rz-tabview-selected) {
         表示: なし。
     }
     #printarea1 {
         位置: 固定;
         左: 0;
         上: 170ピクセル;
     }
     #printarea {
         位置: 固定;
         左: 15ピクセル;
         トップ: 0;
     }
     button[type=button]、input[type=text] {
         表示: なし。
     }
     .rz-データグリッド {
            
         高さ: 未設定!重要;
     }
       
 }

編集 1

少し調べてCSSをこのように変更しましたが、まだ1ページです:(

.rz-データグリッド {
        高さ: 自動!重要;
        オーバーフロー: 表示されます!重要;
        改ページ後: 常に;
    }

P粉139351297
P粉139351297

全員に返信(1)
P粉495955986

ブラウザでは、デフォルトでページを印刷する際のページ サイズ オプションとして A4 が使用されます。ページ サイズに適応するために、ブラウザの印刷プレビューでははみ出したコンテンツが自動的に非表示になります。したがって、多数の列を含むデータ グリッドは、印刷ページのサイズに合わせて切り取られます。

多数の列を印刷するには、コンテンツ サイズに基づいて [印刷オプション] パネルでスケーリング オプションを調整します。

データ グリッドに大量のデータが含まれている場合、ブラウザのパフォーマンスを考慮すると、すべてのデータを一度に印刷することは最適なオプションではありません。すべての DOM 要素を 1 つのページでレンダリングすると、ブラウザーでパフォーマンスの問題が発生するためです。これにより、ブラウザが遅くなったり、応答しなくなったりする可能性があります。 DataGrid には、仮想化を通じて大量のデータを処理するオプションがあります。ただし、印刷時に行と列の仮想化を使用することはできません。

すべてのデータを印刷する必要がある場合は、データ グリッドを Excel、CSV、または PDF ファイルにエクスポートしてから、別の非 Web ベースのアプリケーションから印刷することをお勧めします。

PDF を生成するには、syncfusion などのメソッドやライブラリが多数あります。

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート