无法将View HTML上的CSS应用于PDF转换MVC Core

如何解决无法将View HTML上的CSS应用于PDF转换MVC Core

我不确定是什么溜走了,尝试了互联网上的所有文章,但无法解析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,sans-serif;">Travel Limited UK</p>
                <p style="font-family: Arial,sans-serif;">Valid Untill 15 September 2020</p>
                <p style="font-family: Arial,sans-serif;"><b>DEPARTURE DATE: </b>15 September 2020</p>
                <p style="font-family: Arial,sans-serif;"><b>TOTAL NUMBER TRAVELLERS: </b>10</p>
                <p style="font-family: Arial,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 result;
    }

解决方法

之所以不能应用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);                              
     }

希望这可以为您提供帮助。 enter image description here

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


依赖报错 idea导入项目后依赖报错,解决方案:https://blog.csdn.net/weixin_42420249/article/details/81191861 依赖版本报错:更换其他版本 无法下载依赖可参考:https://blog.csdn.net/weixin_42628809/a
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下 2021-12-03 13:33:33.927 ERROR 7228 [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPL
错误1:gradle项目控制台输出为乱码 # 解决方案:https://blog.csdn.net/weixin_43501566/article/details/112482302 # 在gradle-wrapper.properties 添加以下内容 org.gradle.jvmargs=-Df
错误还原:在查询的过程中,传入的workType为0时,该条件不起作用 &lt;select id=&quot;xxx&quot;&gt; SELECT di.id, di.name, di.work_type, di.updated... &lt;where&gt; &lt;if test=&qu
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct redisServer’没有名为‘server_cpulist’的成员 redisSetCpuAffinity(server.server_cpulist); ^ server.c: 在函数‘hasActiveC
解决方案1 1、改项目中.idea/workspace.xml配置文件,增加dynamic.classpath参数 2、搜索PropertiesComponent,添加如下 &lt;property name=&quot;dynamic.classpath&quot; value=&quot;tru
删除根组件app.vue中的默认代码后报错:Module Error (from ./node_modules/eslint-loader/index.js): 解决方案:关闭ESlint代码检测,在项目根目录创建vue.config.js,在文件中添加 module.exports = { lin
查看spark默认的python版本 [root@master day27]# pyspark /home/software/spark-2.3.4-bin-hadoop2.7/conf/spark-env.sh: line 2: /usr/local/hadoop/bin/hadoop: No s
使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-