Parcourir la source

增加导出PDF示例

zuohuaijun il y a 3 ans
Parent
commit
6fb8187d12

+ 9 - 0
Admin.NET/Admin.NET.Application/Admin.NET.Application.csproj

@@ -22,4 +22,13 @@
     <ProjectReference Include="..\Admin.NET.Core\Admin.NET.Core.csproj" />
   </ItemGroup>
 
+  <ItemGroup>
+    <None Update="Temp\CovidReport.html">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+    <None Update="Temp\logo.png">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+  </ItemGroup>
+
 </Project>

+ 0 - 57
Admin.NET/Admin.NET.Application/Service/TestService.cs

@@ -3,11 +3,6 @@ using Furion.DatabaseAccessor;
 using Furion.Localization;
 using Furion.Logging.Extensions;
 using Microsoft.AspNetCore.Authorization;
-using QuestPDF.Fluent;
-using QuestPDF.Helpers;
-using QuestPDF.Infrastructure;
-using QuestPDF.Previewer;
-using System.IO;
 
 namespace Admin.NET.Application.Service;
 
@@ -160,56 +155,4 @@ public class TestService : IDynamicApiController, ITransient
     {
         return "Furion";
     }
-
-    /// <summary>
-    /// 生成PDF文件
-    /// 预览工具:dotnet tool install questpdf.previewer --global
-    /// </summary>
-    public dynamic CreatePDF()
-    {
-        var logoPath = App.WebHostEnvironment.WebRootPath + @"\images\logo.png";
-        byte[] imageByte = null;
-        using (var fs = new FileStream(logoPath, FileMode.Open, FileAccess.Read))
-        {
-            using var br = new BinaryReader(fs);
-            imageByte = br.ReadBytes((int)fs.Length);
-        }
-        var title = "基于Furion/.NET6实现的通用管理平台。整合最新技术,模块插件式开发,前后端分离,开箱即用。集成SqlSugar、多租户、缓存、数据校验、鉴权、事件总线、动态API、通讯、远程请求、任务调度、gRPC等众多黑科技。代码简洁、易扩展,让开发更简单、更通用、更流行!";
-
-        var filePath = App.HostEnvironment.ContentRootPath + $"{DateTimeOffset.Now:yyyyMMddHHmmssfff}.PDF";
-        Document.Create(container =>
-        {
-            container.Page(page =>
-            {
-                page.Size(PageSizes.A4);
-                page.Margin(2, Unit.Centimetre);
-                page.PageColor(Colors.White);
-                page.DefaultTextStyle(x => x.FontSize(18));
-
-                page.Header()
-                    .AlignCenter().Text("Admin.NET3333")
-                    .SemiBold().FontSize(24).FontColor(Colors.Red.Medium);
-
-                page.Content()
-                    .PaddingVertical(1, Unit.Centimetre)
-                    .Column(x =>
-                    {
-                        x.Spacing(30);
-
-                        x.Item().Text(title).FontFamily("simhei");
-                        x.Item().AlignCenter().Height(100).Width(100).Image(imageByte, ImageScaling.Resize);
-                    });
-
-                page.Footer()
-                    .AlignCenter()
-                    .Text(x =>
-                    {
-                        x.Span("Page ");
-                        x.CurrentPageNumber();
-                    });
-            });
-        }).GeneratePdf(filePath); //.ShowInPreviewer();//
-
-        return new FileStreamResult(new FileStream(filePath, FileMode.Open), "application/octet-stream") { FileDownloadName = "xxx.PDF" };
-    }
 }

+ 86 - 0
Admin.NET/Admin.NET.Application/Service/TestService2.cs

@@ -0,0 +1,86 @@
+using Admin.NET.Application.Const;
+using Magicodes.ExporterAndImporter.Core;
+using Magicodes.ExporterAndImporter.Pdf;
+using Microsoft.AspNetCore.Authorization;
+using System.IO;
+
+namespace Admin.NET.Application.Service;
+
+[ApiDescriptionSettings(TestConst.GroupName, Name = "XXX模块", Order = 200)]
+[AllowAnonymous]
+public class TestService2 : IDynamicApiController, ITransient
+{
+    public TestService2()
+    {
+    }
+
+    /// <summary>
+    /// 生成PDF文件
+    /// </summary>
+    /// <returns></returns>
+    public async Task<dynamic> CreatePDFReport()
+    {
+        var tpl = File.ReadAllText(Path.Combine(AppContext.BaseDirectory, "temp/CovidReport.html"));
+        var exporter = new PdfExporter();
+        var pdfAtt = new PdfExporterAttribute();
+        pdfAtt.Orientation = WkHtmlToPdfDotNet.Orientation.Portrait;
+        pdfAtt.PaperKind = WkHtmlToPdfDotNet.PaperKind.A4;
+        var result = await exporter.ExportBytesByTemplate(new ReportData
+        {
+            Name = "张三",
+            IdNo = "130430xxxxxxxxxxxx",
+            Sex = "男",
+            Age = 35,
+            TudeNo = "12345678901",
+            CollectTime = "2022-08-01 12:33:33",
+            ReceiveTime = "2022-08-01 18:33:33",
+            CheckTime = "2022-08-02 18:33:33"
+        }, pdfAtt, tpl);
+
+        return new FileStreamResult(new MemoryStream(result), "application/octet-stream") { FileDownloadName = "核酸.PDF" };
+    }
+}
+
+[Exporter(Name = "核酸报告")]
+public class ReportData
+{
+    /// <summary>
+    /// 姓名
+    /// </summary>
+    public string Name { get; set; }
+
+    /// <summary>
+    /// 身份证
+    /// </summary>
+    public string IdNo { get; set; }
+
+    /// <summary>
+    /// 性别
+    /// </summary>
+    public string Sex { get; set; }
+
+    /// <summary>
+    /// 年龄
+    /// </summary>
+    public int Age { get; set; }
+
+    /// <summary>
+    /// 试管编号
+    /// </summary>
+    public string TudeNo { get; set; }
+
+    /// <summary>
+    /// 采样时间
+    /// </summary>
+    public string CollectTime { get; set; }
+
+    /// <summary>
+    /// 收样时间
+    /// </summary>
+    public string ReceiveTime { get; set; }
+
+    /// <summary>
+    /// 检测时间
+    /// </summary>
+    public string CheckTime { get; set; }
+}

Fichier diff supprimé car celui-ci est trop grand
+ 92 - 0
Admin.NET/Admin.NET.Application/Temp/CovidReport.html


+ 4 - 4
Admin.NET/Admin.NET.Core/Admin.NET.Core.csproj

@@ -25,14 +25,14 @@
   <ItemGroup>
     <PackageReference Include="AspNetCoreRateLimit" Version="4.0.2" />
     <PackageReference Include="Caching.CSRedis" Version="3.8.3" />
-    <PackageReference Include="Furion.Extras.Authentication.JwtBearer" Version="4.2.6" />
-    <PackageReference Include="Furion.Extras.ObjectMapper.Mapster" Version="4.2.6" />
-    <PackageReference Include="Furion.Pure" Version="4.2.6" />
+    <PackageReference Include="Furion.Extras.Authentication.JwtBearer" Version="4.2.7" />
+    <PackageReference Include="Furion.Extras.ObjectMapper.Mapster" Version="4.2.7" />
+    <PackageReference Include="Furion.Pure" Version="4.2.7" />
     <PackageReference Include="Magicodes.IE.Excel" Version="2.6.4" />
+    <PackageReference Include="Magicodes.IE.Pdf" Version="2.6.4" />
     <PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="6.0.8" />
     <PackageReference Include="NETCore.MailKit" Version="2.1.0" />
     <PackageReference Include="OnceMi.AspNetCore.OSS" Version="1.1.8" />
-    <PackageReference Include="QuestPDF" Version="2022.8.1" />
     <PackageReference Include="SKIT.FlurlHttpClient.Wechat.Api" Version="2.16.0" />
     <PackageReference Include="SKIT.FlurlHttpClient.Wechat.TenpayV3" Version="2.11.0" />
     <PackageReference Include="SqlSugarCore" Version="5.1.2.3" />

+ 1 - 1
Admin.NET/Admin.NET.UnitTest/Admin.NET.UnitTest.csproj

@@ -8,7 +8,7 @@
   </PropertyGroup>
 
   <ItemGroup>
-    <PackageReference Include="Furion.Pure.Xunit" Version="4.2.6" />
+    <PackageReference Include="Furion.Pure.Xunit" Version="4.2.7" />
     <PackageReference Include="Microsoft.AspNetCore.Mvc.Testing" Version="6.0.8" />
     <PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.3.0" />
     <PackageReference Include="xunit" Version="2.4.2" />

Certains fichiers n'ont pas été affichés car il y a eu trop de fichiers modifiés dans ce diff