如何在JSRuntime中打印窗口以显示所有记录?
P粉139351297
P粉139351297 2024-03-19 19:57:53
[CSS3讨论组]

我正在开发 Blazor 服务器项目。要求之一是在弹出窗口中显示记录,然后将其打印为 PDF 文档。如果记录太多而无法容纳在一页上,PDF 将仅保存为单页。我的意思是只有几条记录适合显示在 PDF 的第一页上。如何让PDF显示所有记录? 是CSS的原因吗?

这里是模态:

@page "/dialogcard/{Order}"
     @using IMS.CoreBusiness
     @using IMS.UseCases.Interfaces.OrderDetail
     @using System.Globalization
     @inject IViewOrderDetailsByOrderIdUseCase ViewOrderDetailsByOrderIdUseCase
     @inject DialogService DialogService
     @inject IJSRuntime JsRuntime
        
     
        
     @if (orderDetails != null)
     {
         

Order Date: @Order.OrderDateTime

@{ var detailVendorId = 0; } @foreach (var detail in orderDetails) { @if (detailVendorId != detail.VendorId) {

Contact

Company
Vorlance
Responsible
@detail.Order.DoneBy
Vendor
@detail?.Vendor.Name

Delivery Information

Company Name
@switch (detail.Warehouse) { case "Shenzhen Warehouse": @string.Format(new CultureInfo("en-US"), "test")
Address
@string.Format(new CultureInfo("en-US"), "test")
Contact Name
@string.Format(new CultureInfo("en-US"), "test")
Email
@string.Format(new CultureInfo("en-US"), "test")
Phone
@string.Format(new CultureInfo("en-US"), "+1233455") break; case "USA Warehouse": @string.Format(new CultureInfo("en-US"), "Company Name: TRADING LLC")
Address
@string.Format(new CultureInfo("en-US"), "1243445,Coconut Creek, FL, ZIP Code: 33073")
Contact Name
@string.Format(new CultureInfo("en-US"), "Test")
Email
@string.Format(new CultureInfo("en-US"), "[email protected]")
Phone
@string.Format(new CultureInfo("en-US"), "+123242422") break; case "Private Shipping": @string.Format(new CultureInfo("en-US"), "ELEKTRONIK SANAYI VE TICARET LTD. STI.")
Address
@string.Format(new CultureInfo("en-US"), "test")
Contact Name
@string.Format(new CultureInfo("en-US"), "Test")
Email
@string.Format(new CultureInfo("en-US"), "[email protected]")
Phone
@string.Format(new CultureInfo("en-US"), "111122") break; } @*
Address
@(detail?.Warehouse) *@
@string.Format(new CultureInfo("tr-TR"), "{0:G}", orderDetails?.Where(x => x.VendorId == detail.VendorId).Sum(o => o.Quantity)) @switch (detail.Currency) { case "USD": @string.Format(new CultureInfo("en-US"), "{0:N2}", orderDetails?.Where(x => x.VendorId == detail.VendorId).Sum(o => o.TotalBuyPrice)) break; case "EURO": @string.Format(new CultureInfo("en-FR"), "{0:N2}", orderDetails?.Where(x => x.VendorId == detail.VendorId).Sum(o => o.TotalBuyPrice)) break; default: @string.Format(new CultureInfo("tr-TR"), "{0:N2}", orderDetails?.Where(x => x.VendorId == detail.VendorId).Sum(o => o.TotalBuyPrice)) break; }
} detailVendorId = detail.VendorId; }
}
@**@
@code { [Parameter] public ReportViewModel Order { get; set; } IEnumerable orderDetails; protected override async Task OnInitializedAsync() { orderDetails = await ViewOrderDetailsByOrderIdUseCase.ExecuteAsync(Order.OrderId); } private void PrintDocument() { JsRuntime.InvokeVoidAsync("print"); } }

这是模式的屏幕截图:

这是打印预览:

这是相关的CSS:

@media print {
     body * {
         visibility: hidden;
     }
    
     #printarea1, #printarea1 *{
         visibility: visible;
     }
     #printarea, #printarea * {
         visibility: visible;
     }
     .rz-tabview-nav li:not(.rz-tabview-selected) {
         display: none;
     }
     #printarea1 {
         position: fixed;
         left: 0;
         top: 170px;
     }
     #printarea {
         position: fixed;
         left: 15px;
         top: 0;
     }
     button[type=button], input[type=text] {
         display: none;
     }
     .rz-data-grid {
            
         height: unset!important;
     }
       
 }

编辑 1

我研究了一下,像这样改变了CSS,但仍然是一页:(

.rz-data-grid {
        height: auto !important;
        overflow: visible !important;
        page-break-after: always;
    }

P粉139351297
P粉139351297

全部回复(1)
P粉495955986

浏览器默认使用A4作为页面尺寸选项来打印页面,为了适应页面尺寸,浏览器打印预览会自动隐藏溢出的内容。因此,具有大量列的数据网格将被剪掉以适应打印页面的大小。

要打印大量列,请根据内容大小调整打印选项面板中的缩放选项。

当数据网格包含大量数据时,考虑到浏览器性能,一次打印所有数据并不是最佳选择。因为在单个页面中渲染所有 DOM 元素会在浏览器中产生性能问题。这会导致浏览器速度变慢或无响应。 DataGrid 可以选择通过虚拟化处​​理大量数据。但是,在打印时,无法对行和列使用虚拟化。

如果仍然需要打印所有数据,我们建议您将数据网格导出到 Excel 或 CSV 或 Pdf 文件,然后从另一个非基于 Web 的应用程序进行打印。

生成PDF的方法和库有很多,比如syncfusion

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号