溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

ASP.NET Core中如何構(gòu)建PDF文檔

發(fā)布時間:2021-08-25 09:29:58 來源:億速云 閱讀:143 作者:小新 欄目:開發(fā)技術(shù)

這篇文章主要介紹ASP.NET Core中如何構(gòu)建PDF文檔,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

前言#

  您可以通過創(chuàng)建PDF文檔在我的倉庫中,獲取源代碼,歡迎給個免費的Star...

  現(xiàn)在我們創(chuàng)建一個.NET Core 3.0 項目,至于是mvc、Api、這些我并不在意。創(chuàng)建項目后直接Nuget安裝DinkToPDF。隨后您需要下載我的代碼倉庫中的“NativeLibrary”文件夾,在其中,我們將找到兩個文件32bit和64bit,因此我們需要為操作系統(tǒng)選擇合適的庫。我們將從64位文件夾中選擇文件。

  最后,我們需要啟動該庫,并且IOC DinkToPDF。

public void ConfigureServices(IServiceCollection services)
  {
   var context = new CustomAssemblyLoadContext();
   context.LoadUnmanagedLibrary(Path.Combine(Directory.GetCurrentDirectory(), "libwkhtmltox.dll"));

   services.AddSingleton(typeof(IConverter), new SynchronizedConverter(new PdfTools()));
   services.AddControllers();
  }

建立實體#

在真實情況的項目中,我們可以從數(shù)據(jù)庫中收集數(shù)據(jù)或從其他API接收數(shù)據(jù)。但是為了簡單起見,我們將從本地存儲中收集PDF文檔的數(shù)據(jù)。隨后,我們將創(chuàng)建一個HTML模板并將其存儲在PDF文檔中。

public class Employee
 {
  public string Name { get; set; }
  public string LastName { get; set; }
  public int Age { get; set; }
  public string Gender { get; set; }
 }

再隨后,我們要創(chuàng)建一個新的文件夾Services和里面兩類文件 DataServices.cs 和 TemplateGenerator.cs 。完整的結(jié)構(gòu)應(yīng)如下所示:

public class DataServices
 {
  public static List<Employee> GetAllEmployess() =>
   new List<Employee>
   {
    new Employee { Name="Hao Zi Zhang", LastName="Turner", Age=35, Gender="Male"},
    new Employee { Name="Yu Chen", LastName="Markus", Age=22, Gender="Female"},
    new Employee { Name="Jian Zhi Chu", LastName="Martins", Age=40, Gender="Male"},
    new Employee { Name="ElderJames", LastName="Packner", Age=30, Gender="Female"},
    new Employee { Name="BlaZui", LastName="Doe", Age=45, Gender="Male"}
   };
 }

其中添加服務(wù)中返回了某些數(shù)據(jù),用于模擬服務(wù)。我們要生成一個HTML模板,因此我們需要修改 TemplateGenerator.cs 文件:

public class TempleGenertor
 {
  public static string GetHTMLString()
  {
   var employees = DataServices.GetAllEmployess();

   var sb = new StringBuilder();
   sb.Append(@"
      <html>
       <head>
       </head>
       <body>
        <div class='header'><h2>This is the generated PDF report!!!</h2></div>
        <table align='center'>
         <tr>
          <th>Name</th>
          <th>LastName</th>
          <th>Age</th>
          <th>Gender</th>
         </tr>");

   foreach (var emp in employees)
   {
    sb.AppendFormat(@"<tr>
         <td>{0}</td>
         <td>{1}</td>
         <td>{2}</td>
         <td>{3}</td>
         </tr>", emp.Name, emp.LastName, emp.Age, emp.Gender);
   }
   sb.Append(@"
        </table>
       </body>
      </html>");

   return sb.ToString();
  }
 }

如果想要指定css樣式,則可以創(chuàng)建某些文件夾,隨后在API通過服務(wù)器路徑來抉擇配置。

.header {
 text-align: center;
 color: green;
 padding-bottom: 35px;
}

table {
 width: 80%;
 border-collapse: collapse;
}

td, th {
 border: 1px solid gray;
 padding: 15px;
 font-size: 22px;
 text-align: center;
}

table th {
 background-color: green;
 color: white;
}

  就是這樣,我們有用于HTML創(chuàng)建的HTML模板。現(xiàn)在,我們可以繼續(xù)執(zhí)行Controller邏輯。

[Route("api/PdfCreator")]
 [ApiController]
 public class PdfCreatorController : ControllerBase
 {
  private IConverter _converter;

  public PdfCreatorController(IConverter converter)
  {
   _converter = converter;
  }

  [HttpGet]
  public IActionResult CreatePDF()
  {
   var globalSettings = new GlobalSettings
   {
    ColorMode = ColorMode.Color,
    Orientation = Orientation.Portrait,
    PaperSize = PaperKind.A4,
    Margins = new MarginSettings { Top = 10 },
    DocumentTitle = "PDF Report"
   };

   var objectSettings = new ObjectSettings
   {
    PagesCount = true,
    HtmlContent = TempleGenertor.GetHTMLString(),
    WebSettings = { DefaultEncoding = "utf-8", UserStyleSheet = Path.Combine(Directory.GetCurrentDirectory(), "assets", "style.css") },
    HeaderSettings = { FontName = "Arial", FontSize = 9, Right = "Page12下一頁閱讀全文

以上是“ASP.NET Core中如何構(gòu)建PDF文檔”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關(guān)知識,歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI