如何在控制台应用程序中使用实体框架从数据库填充html字段?

ckx4rj1h  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(301)

我创建了一个html文件,我将使用selectpdf生成一个pdf表单。这个html有文本字段和复选框,需要用mysql数据库中的数据填充/检查它们。我想用 c# 与我的数据库通信,所以我使用实体框架。其思想是让控制台应用程序运行,从数据库中获取信息,填充html文件中的字段,然后程序从中生成pdf。到目前为止,html到pdf部分按预期工作。
我不知道的是,如何将数据从数据库中的表传递到简单的html文件,因为我不使用razor页面/aspx文件。
我该如何处理实体框架模型呢?
目前,我正在使用一个带有5个表的小型数据库进行测试—真正的数据库有20多个表。
pdf示例

解决方案资源管理器

program.cs代码:

//assign html file to string, add directory location of file.
string HtmlString = (@"C:\Users\UserName\Documents\Visual Studio 2017\ConsoleTest\ConsoleTest\IIAForm30.html");

    // instantiate a html to pdf converter object
    HtmlToPdf converter = new HtmlToPdf();

/*********************************************************
 *                                                       *
 *                                                       *
 *                      PDF Settings                     *      
 *                                                       *
 *                                                       *

********************************************************/

//set PDF page size 
//supports:(A0 to A10),(B0 to B5),(ArchA to ArchE),(Letter, HalfLetter, Letter11x17, Note, Flsa, Ledger)
converter.Options.PdfPageSize = PdfPageSize.A4;

//set PDF page orientation
//Supports Landscape and Portrait
converter.Options.PdfPageOrientation = PdfPageOrientation.Portrait;

//ShrinkOnly: the html content is resized only if the content width is 
//larger than the destination space (pdf page or rectangle) width. 
converter.Options.AutoFitWidth = HtmlToPdfPageFitMode.ShrinkOnly;

// NoAdjustment: the html content is not resized vertically in any way to fit the available space. 
//If the content is larger, it will be cut and not all of it will be displayed in the generated pdf file.
converter.Options.AutoFitHeight = HtmlToPdfPageFitMode.NoAdjustment;

// header settings
converter.Options.DisplayHeader = true;
converter.Header.DisplayOnFirstPage = false;
converter.Header.DisplayOnOddPages = true;
converter.Header.DisplayOnEvenPages = true;
converter.Header.Height = 20;

//Page Layout
//SinglePage: Displays one page at a time when open.
converter.Options.ViewerPreferences.PageLayout = PdfViewerPageLayout.SinglePage;

//converts html to pdf.
PdfDocument doc1 = converter.ConvertUrl(HtmlString);
PdfDocument doc2 = converter.ConvertUrl(HtmlString);
PdfDocument doc3 = converter.ConvertUrl(HtmlString);

// save pdf document
doc1.Save("Sample1.pdf");
doc2.Save("Sample2.pdf");
doc3.Save("Sample3.pdf");

// create a new pdf document
PdfDocument doc = new PdfDocument();

// add the pages of these documents to the new document
doc.Append(doc1);
doc.Append(doc2);
doc.Append(doc3);

// save pdf document
doc.Save("MergedDoc.pdf");

// close pdf document
doc.Close();

// close the original pdf documents
doc1.Close();
doc2.Close();
doc3.Close();

//original pdf files are discarded/deleted
File.Delete("Sample1.pdf");
File.Delete("Sample2.pdf");
File.Delete("Sample3.pdf");

上下文的html代码段(仅使用纯文本占据数据库日期的位置):

<table class="tg-3" style="undefined;table-layout: fixed; width: 100%">
	<colgroup>
		<col style="width: 130px">
		<col style="width: 120px">
		<col style="width: 120px">
		<col style="width: 110px">
		<col style="width: 100px">
		<col style="width: 100px">
		<col style="width: 150px">
	</colgroup>
	<tr>
		<td class="tg-576q" colspan="7" style="border-top: none;">I. Inspector Information</td>
	</tr>
	<tr>
		<td class="tg-r0wx" style="border-bottom: none;">Date of Inspection</td>
		<td class="tg-es7u" style="border-bottom: none;border-right: none;">Inspected by:</td>
		<td class="tg-9vem" rowspan="3" style="border-right: none;border-left: none;border-right: none;">John Doe</td>
		<td class="tg-r0wx" style="border-bottom: none; border-right: none;border-left: none;"></td>
		<td class="tg-9vem" rowspan="3" style="border-left: none; border-right: none;">Inspector</td>
		<td class="tg-es7u" style="border-left: none;border-right: none;border-bottom: none;"></td>
		<td class="tg-9vem" rowspan="3" style="border-left: none;">(777)777-7777</td>
	</tr>
	<tr>
		<td class="tg-9vem" rowspan="1" style="border-top: none; border-right-style: solid;border-bottom: none; text-align: right">2018-02-03</td>
		<td class="tg-es7u" rowspan="2" style="border-right: none;border-top: none; border-left-style: solid;">Name:</td>
		<td class="tg-es7u" rowspan="2" style="border-top: none; border-right: none; border-left: none;">Title:</td>
		<td class="tg-es7u" rowspan="2" style="border-left: none; border-top: none; border-right: none;">Phone Number:</td>
	</tr>
	<tr>
		<td rowspan="1" style="border-top: none"></td>
	</tr>
	<tr>
		<td class="tg-r0wx" colspan="3" style="border-bottom: none;">Inspection Company</td>
		<td class="tg-es7u" colspan="1" rowspan="3" style="border-right: none;">Inspector Signature:</td>
		<td class="tg-n603" colspan="3" rowspan="3" style="border-left: none;"><img src="signatureStock.PNG" width="180" height="50"></td>
	</tr>
	<tr>
		<td class="tg-tnbn" colspan="3" rowspan="1" style="border-top: none;">John Doe Company</td>
	</tr>
</table>
6psbrbz9

6psbrbz91#

欢迎光临。我建议你去图书馆看看:
https://github.com/antaris/razorengine
这是一种从模板生成html的方法,通过模型传递。它与用于asp.NETMVC的razor库非常相似,但不需要在web项目中使用。
我将用本地模板替换硬编码的html路径,使用实体框架从db获取数据,将其作为模型传递到模板中,然后将模板输出呈现为pdf。瞧。

相关问题