#html #css #asp.net-core-mvc
#HTML #css #asp.net-core-mvc
Вопрос:
Я не уверен, что ускользает, перепробовал все статьи в Интернете, но не смог разрешить css, наконец, сохранил CSS встроенным в HTML для проверки, но безуспешно.
Визуализировал представление и преобразовал представление в HTML и проанализировал то же самое, но css не применяется. Пожалуйста, посоветуйте.
<!DOCTYPE html>
<html>
<head>
<title>Template Preview</title>
</head>
<body style="background: rgb(204,204,204);">
<!-- /.container -->
<div class="MainContainer">
<main role="main" class="pb-3">
<style>
@media print {
body {
height: 0;
margin: 0;
border-top: none;
}
}
@page {
size: A4;
margin: 0;
}
</style>
<page size="A4" style="background: white;display: block;margin: 0 auto;width: 21cm;height: 29.7cm;">
<header>
<div style="width: 100%;height: 125px;position: relative;">
<img style="width: 100%;height: 100%;" src="https://homepages.cae.wisc.edu/~ece533/images/monarch.png" alt="headerbgimg" />
<div style="position: absolute;left: 20px;top: 5px;display: flex;flex-direction: column;">
<div style="font-size: large;font-weight: bold;color: white;text-transform: uppercase;letter-spacing: 1px;">
<h2>Company Name</h2>
</div>
<span style="font-size: large;font-weight: bold;color: black;text-transform: uppercase;letter-spacing: 1px;">Header Text</span>
</div>
<div style="position: absolute;right: 5px;top: 5px;width: 140px;height: 120px;">
<img style="margin-left: 5px;margin-bottom: 5px;height: 100%;width: 100%;" src="https://homepages.cae.wisc.edu/~ece533/images/monarch.png" alt="companyLogo" />
</div>
</div>
</header>
<div class="container">
<div style="position: relative;width: 100%;height: 350px;">
<div style="position: absolute;display: flex;flex-direction: column;left: 10px;top: 5px;">
<p style="font-family: Arial, Helvetica, sans-serif;">13 September 2020</p>
<p style="font-family: Arial, Helvetica, sans-serif;">Travel Limited UK</p>
<p style="font-family: Arial, Helvetica, sans-serif;">Valid Untill 15 September 2020</p>
<p style="font-family: Arial, Helvetica, sans-serif;"><b>DEPARTURE DATE: </b>15 September 2020</p>
<p style="font-family: Arial, Helvetica, sans-serif;"><b>TOTAL NUMBER TRAVELLERS: </b>10</p>
<p style="font-family: Arial, Helvetica, sans-serif;"><b>NUMBER OF DAYS: </b>3</p>
</div>
</div>
</div>
</page>
</main>
</div>
</body>
</html>
Метод действия для отображения PDF в браузере
public async Task<IActionResult> GetPDF()
{
MemoryStream msPDF = new MemoryStream(await ParsePDFDocument());
return new FileStreamResult(msPDF, "application/pdf");
}
public async Task<byte[]> ParsePDFDocument()
{
Document document = new Document();
byte[] result = null;
#region HTML
DummyData dummyData = new DummyData()
{
CompanyName = "Company Name.",
HeaderText = "Header Text",
ItineraryDate = DateTime.Now.ToLongDateString(),
TravelCompanyName = "Travel Limited UK",
ValidityPeriod = "Valid Untill " DateTime.Now.AddDays(2).ToLongDateString(),
TravellersCount = 10,
DaysCount = 3,
DepartureDate = DateTime.Now.AddDays(2).ToLongDateString(),
ItineraryCode = "DS_001",
EmailAddress = "ABC@XYZ.COM",
Telephone = " 91 1234 123 123"
};
#endregion
//This will parse the cshtml view and give the HTML string
var viewHtml = await this.RenderViewAsync<DummyData>("Index", dummyData);
List<string> cssFiles = new List<string>();
cssFiles.Add("NewStyle.css");
using (MemoryStream memoryStream = new MemoryStream())
{
PdfWriter writer = PdfWriter.GetInstance(document, memoryStream);
writer.CloseStream = false;
document.Open();
HtmlPipelineContext htmlContext = new HtmlPipelineContext(null);
htmlContext.SetTagFactory(Tags.GetHtmlTagProcessorFactory());
ICSSResolver cssResolver = XMLWorkerHelper.GetInstance().GetDefaultCssResolver(false);
cssFiles.ForEach(i => cssResolver.AddCssFile(Path.Combine(hostEnvironment.WebRootPath, "lib\bootstrap\dist\css\" i), true));
IPipeline pipeline = new CssResolverPipeline(cssResolver, new HtmlPipeline(htmlContext, new PdfWriterPipeline(document, writer)));
XMLWorker worker = new XMLWorker(pipeline, true);
XMLParser xmlParser = new XMLParser(worker);
xmlParser.Parse(new MemoryStream(Encoding.UTF8.GetBytes(viewHtml)));
document.Close();
result = memoryStream.GetBuffer();
}
return resu<
}
Ответ №1:
Причина, по которой вы не можете применить CSS, заключается в том, что вы не смогли успешно получить путь к вложенным файлам в папке «lib bootstrap dist css «.
Вот демонстрация, которая может успешно получить путь, попробуйте изменить свой код следующим образом:
List<string> cssFiles = new List<string>();
cssFiles.Add("NewStyle.css");
DirectoryInfo d = new DirectoryInfo(Path.Combine(hostEnvironment.WebRootPath, "lib\bootstrap\dist\css\"));
//your code
ICSSResolver cssResolver = XMLWorkerHelper.GetInstance().GetDefaultCssResolver(false);
foreach (var file in d.GetFiles("*.css"))
{
cssResolver.AddCssFile(Path.Combine(hostEnvironment.WebRootPath, "lib\bootstrap\dist\css\" file.Name), true);
}
Комментарии:
1. Спасибо, что пришли помочь, но я получаю то же самое и просто использую здесь только один CSS-файл. Действительно ли мне нужно добавлять другие файлы? Я чувствую, что, вероятно, упускаю что-то еще при преобразовании. Не могли бы вы опубликовать свой демонстрационный код, чтобы я мог попробовать оттуда?
2. Если вы просто добавляете CSS-файл, вам нужно только использовать cssResolver. AddCssFile(путь. Объединить (hostEnvironment. WebRootPath, «lib\bootstrap\dist\css\bootstrap.min.css» ), true); Кроме того, я хочу сказать, что iTextSharp и xmlworker несовместимы в .net Core, поэтому я предлагаю вам использовать iText7.