jquery 打印模式对话框问题-输出不出现在打印预览屏幕上

mfuanj7w  于 2023-10-17  发布在  jQuery
关注(0)|答案(1)|浏览(169)

我正在尝试在Blazor服务器应用程序上打印(PDF)模式对话框。模式对话框打开,但遗憾的是,输出不会出现在打印预览窗口上。如何打印模态对话框?有什么我错过了,我恳请您的帮助?
下面是Radzen Modal对话框:

下面是打印预览窗口:

对话框剃刀:

  1. @page "/dialogcard/{OrderID}"
  2. @using IMS.CoreBusiness
  3. @using IMS.UseCases.Interfaces.Order
  4. @using IMS.UseCases.Orders
  5. @inject IViewOrderByIdUseCase ViewOrderByIdUseCase
  6. @inject Radzen.DialogService DialogService
  7. @inject IJSRuntime JsRuntime
  8. <div class="row">
  9. <div class="col-lg-6 d-flex">
  10. <RadzenCard Style="width: 100%; overflow: hidden;">
  11. <h3 class="h5">Contact</h3>
  12. <div class="d-flex flex-row">
  13. @*<RadzenImage Path="@order?.DoneBy" Class="rounded-circle float-left mt-1 mr-3" Style="width: 90px; height: 90px;" />*@
  14. <div>
  15. <div>Employee</div>
  16. <b>@order?.DoneBy</b>
  17. <div class="mt-3">Company</div>
  18. <b>@order?.Customer?.Name</b>
  19. </div>
  20. </div>
  21. </RadzenCard>
  22. </div>
  23. <div class="col-lg-6 d-flex">
  24. <RadzenCard Style="width: 100%; overflow: hidden;">
  25. <h3 class="h5">Delivery Information</h3>
  26. <div class="row">
  27. <div class="col">
  28. <div>Address</div>
  29. <b>@(order?.OrderDetails?.Where(od => od.OrderId == OrderID).Select(x => x.ShippingNumber)), @(order?.OrderDetails?.Where(od => od.OrderId == OrderID).Select(x => x.TrackingNumber))</b>
  30. <div class="mt-3">Vendor</div>
  31. <b>@(order?.OrderDetails?.Where(od => od.OrderId == OrderID).Select(x => x.Vendor.Name))</b>
  32. </div>
  33. </div>
  34. </RadzenCard>
  35. </div>
  36. </div>
  37. <div class="row my-4">
  38. <div class="col-md-12">
  39. <RadzenCard>
  40. <h3 class="h5">
  41. Order @OrderID Details
  42. <RadzenBadge BadgeStyle="BadgeStyle.Secondary" Text=@($"{String.Format(new System.Globalization.CultureInfo("en-US"), "{0:C}", order?.OrderDetails?.Where(od => od.OrderId == OrderID).Select(x => x.TotalBuyPrice))}") Class="float-right" />
  43. </h3>
  44. <RadzenDataGrid AllowFiltering="true" AllowPaging="true" AllowSorting="true" FilterCaseSensitivity="FilterCaseSensitivity.CaseInsensitive"
  45. Data="@(orderDetails?.Where(o => o.Order?.Id == OrderID))" TItem="OrderDetail" ColumnWidth="200px" Class="mt-3">
  46. <Columns>
  47. <RadzenDataGridColumn TItem="OrderDetail" Property="Quantity" Title="Quantity" />
  48. <RadzenDataGridColumn TItem="OrderDetail" Property="Order.OrderDate" Title="Order Date" />
  49. <RadzenDataGridColumn TItem="OrderDetail" Property="Discount" Title="Discount" FormatString="{0:P}" />
  50. </Columns>
  51. </RadzenDataGrid>
  52. </RadzenCard>
  53. </div>
  54. </div>
  55. <div class="row hideWhenPrint">
  56. <div class="col-md-12 text-right">
  57. <RadzenButton Click="@((args) => DialogService.Close(false))" ButtonStyle="ButtonStyle.Secondary" Text="Close" Style="width: 120px" Class="mr-1" />
  58. <RadzenButton Click="PrintDocument" Text="Print" Style="width: 120px" />
  59. </div>
  60. </div>
  61. @code {
  62. [Parameter] public int OrderID { get; set; }
  63. Order? order;
  64. IEnumerable<OrderDetail> orderDetails;
  65. IList<Order?> SelectedOrders { get; set; }
  66. IEnumerable<Order?> _orders = new List<Order?>();
  67. protected override async Task OnInitializedAsync()
  68. {
  69. order = await ViewOrderByIdUseCase.ExecuteAsync(OrderID);
  70. SelectedOrders = new List<Order?> { _orders.FirstOrDefault() };
  71. }
  72. private async Task PrintDocument(){
  73. await JsRuntime.InvokeVoidAsync("Print");
  74. }
  75. }

下面是我的print js:

  1. function Print() {
  2. $(".hideWhenPrint").hide();
  3. window.print();
  4. $(".hideWhenPrint").show();
  5. }

下面是_Layout.cshtml:

  1. @using Microsoft.AspNetCore.Components.Web
  2. @namespace IMS.WebApp.Pages
  3. @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
  4. <!DOCTYPE html>
  5. <html lang="en">
  6. <head>
  7. <meta charset="utf-8"/>
  8. <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
  9. <base href="~/"/>
  10. <link rel="stylesheet" href="css/bootstrap/bootstrap.min.css"/>
  11. <link href="css/site.css" rel="stylesheet"/>
  12. <link href="IMS.WebApp.styles.css" rel="stylesheet"/>
  13. <link rel="stylesheet" href="_content/Radzen.Blazor/css/default.css">
  14. <link href="css/sidebars.css" rel="stylesheet"/>
  15. <component type="typeof(HeadOutlet)" render-mode="ServerPrerendered"/>
  16. </head>
  17. <body>
  18. @RenderBody()
  19. <div id="blazor-error-ui">
  20. <environment include="Staging,Production">
  21. An error has occurred. This application may no longer respond until reloaded.
  22. </environment>
  23. <environment include="Development">
  24. An unhandled exception has occurred. See browser dev tools for details.
  25. </environment>
  26. <a href="" class="reload">Reload</a>
  27. <a class="dismiss">🗙</a>
  28. </div>
  29. <script src="_framework/blazor.server.js"></script>
  30. <script src="_content/Radzen.Blazor/Radzen.Blazor.js"></script>
  31. <script src="~/jquery/jquery.min.js"></script>
  32. <script src="~/bootstrap/js/bootstrap.min.js"></script>
  33. <script src="~/js/myjs.js"></script>
  34. <script>
  35. window.downloadFileFromStream = async (fileName, contentStreamReference) => {
  36. const arrayBuffer = await contentStreamReference.arrayBuffer();
  37. const blob = new Blob([arrayBuffer]);
  38. const url = URL.createObjectURL(blob);
  39. const anchorElement = document.createElement('a');
  40. anchorElement.href = url;
  41. anchorElement.download = fileName ?? '';
  42. anchorElement.click();
  43. anchorElement.remove();
  44. URL.revokeObjectURL(url);
  45. }
  46. </script>
  47. </body>
  48. </html>

编辑1

我检查了Chrome开发人员工具,在我点击对话框上的打印按钮后,它在控制台上给出了这个错误。

  1. Unchecked runtime.lastError: The message port closed before a response was received.
7gs2gvoe

7gs2gvoe1#

正如建议的那样,我把这个作为一个单独的答案。
在对话框剃刀的<div class="row">周围添加<div id="printarea">,并在site.css中使用此CSS解决了我的问题。

  1. @media print {
  2. body * {
  3. visibility: hidden;
  4. }
  5. #printarea, #printarea * {
  6. visibility: visible;
  7. }
  8. #printarea {
  9. position: absolute;
  10. left: 0;
  11. top: 0;
  12. }
  13. }

相关问题