返回顶部
首页 > 资讯 > 精选 >怎么使用Net将HTML简历导出为PDF格式
  • 356
分享到

怎么使用Net将HTML简历导出为PDF格式

2023-07-05 18:07:30 356人浏览 薄情痞子
摘要

这篇“怎么使用Net将html简历导出为pdf格式”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“怎么使用Net将HTML简历

这篇“怎么使用Net将html简历导出为pdf格式”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“怎么使用Net将HTML简历导出为PDF格式”文章吧。

正文

现在有许多将HTML导出PDF的第三方包,这里介绍使用的是Select.HtmlToPdf.netcore

使用Select.HtmlToPdf.netcore

  • 整体思路是将cshtml内容读出来,然后再转为Pdf文档

  • 读取cshtml内容有两种方法,第一种使用第三方包 RazorEngine.netCore,第二种使用官方方法进行读取。(注意两种方法的cshtml内容略有不同)

首先使用ChatGPT生成个人简历信息

怎么使用Net将HTML简历导出为PDF格式

代码部分

HomeController.cs :

public async Task<IActionResult> ToPdf(){    PdfDocument pdfDocument = new PdfDocument();    HtmlToPdf converter = new HtmlToPdf();//实例化一个html到pdf转换器对象    converter.Options.PdfPageOrientation = PdfPageOrientation.Portrait;//设置页面方向    converter.Options.PdfPageSize = PdfPageSize.A4;//设置页面大小    converter.Options.MarginTop = 10;//设置页边距    converter.Options.MarginBottom = 10;    converter.Options.MarginLeft = 10;    converter.Options.MarginRight = 10;    PdfReportModel model = new PdfReportModel { Name = "彭于晏", Email = "pengyuyan@outlook.com" };    //string htmlResult = readByEngineRazor(model);//第一种方法,使用RazorEngine.NetCore读取Cshtml文件    string htmlResult = await readCshtml(model);//第二种方法    if (!string.IsNullOrEmpty(htmlResult))    {        pdfDocument = converter.ConvertHtmlString(htmlResult);    }    string savePath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), $@"ExportPDF\{DateTime.Now.ToString("yyyyMMdd")}");    Directory.CreateDirectory(savePath);    string filename = Path.Combine(savePath, $"{DateTime.Now.ToString("yyyyMMddHHmmssffff")}.pdf");    pdfDocument.Save(filename);    byte[] bytes = System.IO.File.ReadAllBytes(filename);    return File(bytes, "application/pdf", Path.GetFileName(filename));} private string readByEngineRazor(PdfReportModel model){    string template = System.IO.File.ReadAllText("Views/Report/PdfReport.cshtml");    string htmlResult = Engine.Razor.RunCompile(template, "PdfReport", typeof(PdfReportModel), model);    return htmlResult;}private async Task<string> readCshtml(PdfReportModel model){    string htmlResult = await _viewRenderService.RenderToStringAsync("Report/PdfReport", model);    return htmlResult;}

TemplateGadgetProvider.cs :

public class TemplateGadgetProvider{    public static TemplateGadgetProvider _instance;    public static TemplateGadgetProvider Instance    {        get        {            if (_instance == null)                _instance = new TemplateGadgetProvider();            return _instance;        }    }    public string Load(string virtualPath)    {        return File.ReadAllText(virtualPath);    }}

pdfReport.CSS :

Css样式文件:

html {    font-family: 'Open Sans', sans-serif;    background: whitesmoke;}a {    text-decoration: none;    color: black;}hr {    background: grey;}#container {    position: relative;    display: flex;}#profile {    flex: 15%;    display: block;    position: relative;    margin: 5% 2% 0 10%;    width: 100%;    height: 100%;}#info-cards {    flex: 55%;    display: block;    margin-top: 5%;    margin-right: 10%;    width: 100%;    height: 100%;}#image {    position: relative;    overflow: hidden;}#image,#profile-photo {    position: relative;    width: 80px;    height: 80px;    border-radius: 10px;}    #image > a {        position: absolute;        top: 0;        left: 0;        background: rgba(0, 0, 0, 0.5) !important;        height: 100%;        width: 100%;        display: none;    }        #image > a > i {            -WEBkit-text-stroke: 1px #ffffffdd;            padding: 40%;        }    #image:hover a {        display: block;    }#name {    font-size: 23px !important;    line-height: 20px !important;}#about,.card > ul > li {    padding: 0 0 0 15px;    position: relative;    display: inline-block;    width: 100%;}#about {    font-size: 20px !important;    padding: 0 !important;}    #name,    #about > p {        font-weight: bolder;        font-family: 'Open Sans', sans-serif;    }#email {    font-size: 15px !important;    font-weight: bold !important;    font-family: 'Cutive Mono', monospace;}#college,#email,#year-graduation,#education,#more-about,#telephone,#fax {    color: #555;    font-size: 13.5px;}strong,span {    color: black;    font-size: 16px;}#social-links,#about {    display: inline-block;}#social-links {    margin-bottom: 12px;}    #social-links a {        margin: 0 10px;    }#edit-intro {    display: block;    color: #097bbf;    font-family: 'Nunito', sans-serif;}.fab {    font-size: 1.1em;}.fab,.fas {    color: whitesmoke;}#about > a {    top: 4px;    right: 8px;}.edit {    top: 19px;    right: 10px;}#about > a,.edit {    position: absolute;    font-size: 15px !important;}.stroke-transparent {    -webkit-text-stroke: 1px #000;    -webkit-text-fill-color: transparent;}.blue {    color: #097bbf !important;    font-size: 13px;}.stroke-transparent-blue {    -webkit-text-stroke: 1px #097bbf;    -webkit-text-fill-color: transparent;}.card {    box-shadow: 0 3px 10px 0 rgba(0, 0, 0, .1);    overflow-x: hidden;    margin-bottom: 30px;    padding: 15px 30px 30px 30px;    background-color: #fff;}    .card > p {        color: #0e141e;        font-weight: bolder;        font-size: 18px;        line-height: 2;    }        .card > p > i {            font-size: 18px;        }    .card > a {        font-weight: 400;        font-size: 15px;        margin: 0;        margin-left: 25px;        padding: 0;        border: 0;        height: auto;        background: transparent;        color: #097bbf;        outline: none;        cursor: pointer;    }    .card > ul {        list-style-type: none;    }.tags {    font-size: 17px;    font-weight: bolder;}    .tags ~ a {        display: none !important;    }    .tags span {        font-size: 14px;        font-weight: nORMal;        color: #0e141e;    }        .tags span span {            color: #738f93;        }@media screen and (max-width:1090px) {    #profile {        margin-left: 5%;    }}@media screen and (max-width:850px) {    #container {        display: block;    }    #profile {        width: 90%;    }    .card {        margin: 0 5%;        margin-bottom: 30px;    }}

PdfReport.cshtml :

使用RazorEngine.NetCore需要修改下面两处地方

删除 @model PdfReportModel

@Html.Raw(@style) 修改为 @@Raw(@style)

视图文件:点击查看详细内容

@using exportPdf.common@model PdfReportModel   <!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <meta Http-equiv="X-UA-Compatible" content="IE=edge">    <meta name="viewport" content="width=device-width, initial-scale=1.0">    <title>Document</title>    @{        string style = TemplateGadgetProvider.Instance.Load(@"wwwroot\css\pdfReport.css");    }    <style>@Html.Raw(@style)</style></head><body>    <div id="inner-nav"></div>    <div id="container">        <div id="profile">            <div id="image">                <img id="profile-photo" src="https://img2023.cnblogs.com/blog/233608/202303/233608-20230308165653594-2049775608.jpg" alt="Profile-Image">                <a href="#" rel="external nofollow"  rel="external nofollow"  rel="external nofollow"  rel="external nofollow"  rel="external nofollow" ><i class="fas fa-pen stroke-transparent"></i></a>            </div>            <p id="name">@Model.Name<br><span id="email">@Model.Email</span></p>            <p id="designation">前端开发工程师<br><span id="college">天将降大任于斯人也,必先苦其心志,劳其筋骨,饿其体肤,空乏其身,行拂乱其所为也,所以动心忍性,增益其所不能。——《孟子》 </span></p>            <div id="social-links"><a href="#" rel="external nofollow"  rel="external nofollow"  rel="external nofollow"  rel="external nofollow"  rel="external nofollow" ><i class="fab fa-facebook-f stroke-transparent"></i></a><a><i                        class="fab fa-twitter stroke-transparent"></i></a><a><i                        class="fab fa-linkedin-in stroke-transparent"></i></a><a><i                        class="fab fa-GitHub stroke-transparent"></i></a></div>            <a id="edit-intro" href="#" rel="external nofollow"  rel="external nofollow"  rel="external nofollow"  rel="external nofollow"  rel="external nofollow" ><i class="fas fa-pen-alt blue"></i>  </a>            <hr width="100%">            <div id="about">                <p >个人详情</p>                <a href="#" rel="external nofollow"  rel="external nofollow"  rel="external nofollow"  rel="external nofollow"  rel="external nofollow" ><i class="fas fa-pen stroke-transparent-blue"></i></a>            </div>            <p id="year-graduation">预计毕业年份<br><strong>2023年6月</strong></p>            <p id="education">学历<br><strong>湖南大学 本科</strong></p>            <p id="more-about">专业<br><strong> 计算机科学与技术专业</strong></p>            <p id="telephone">电话<br><strong>0532-2271351</strong></p>            <p id="fax">传真<br><strong>+91-532-25453441</strong></p>        </div>        <div id="info-cards">            <div class="card">                <p><i class="fas fa-briefcase stroke-transparent"></i>   专业技能</p>                <ul>                    <li>                        <p class="tags">1. 熟练掌握HTML、CSS、javascript前端基础技术</p>                    </li>                    <li>                        <p class="tags">2. 熟悉Jquery、Bootstrap等常用前端框架和库</p>                    </li>                    <li>                        <p class="tags">3. 了解node.js、Express等后端开发技术</p>                    </li>                    <li>                        <p class="tags">4. 掌握gitwebpack等常用开发工具</p>                    </li>                    <li>                        <p class="tags">5. 具备良好的编码风格和文档习惯</p>                    </li>                </ul>            </div>            <div class="card">                <p><i class="fas fa-briefcase stroke-transparent"></i>   工作检验</p>                <ul>                    <li>                        <p class="tags">1. 依帆网站首页制作(个人项目)<br>    - 使用HTML、CSS、JavaScript实现了一个响应式的网站首页<br>    - 使用Bootstrap进行布局和样式美化,使用jQuery实现轮播图和导航栏效果<br>    - 使用Webpack进行打包和优化,使用Git进行版本控制和部署</p>                    </li>                    <li>                        <p class="tags">2. 艺风网站后台管理系统(实习项目)<br>    - 参与了一个基于node.js和Express的后台管理系统的开发<br>    - 负责前端页面的编写,使用EJS模板引擎渲染数据<br>    - 使用ajax和Fetch进行数据交互,使用Element UI组件库提升用户体验<br>    - 遵循mvc架构,使用MonGoose操作MongoDB数据库</p>                    </li>                </ul>            </div>            <div class="card">                <p><i class="fas fa-graduation-cap stroke-transparent"></i>   自我评价</p>                <ul>                    <li>                        <p class="tags">具备较强的学习能力和逻辑思维能力,喜欢接触新技术和新知识</p>                    </li>                    <li>                        <p class="tags">具备良好的沟通能力和团队协作能力,能够积极配合团队完成任务</p>                    </li>                    <li>                        <p class="tags">具备一定的创新能力和解决问题能力,能够针对不同需求提出合理方案</p>                    </li>                </ul>                <a href="#" rel="external nofollow"  rel="external nofollow"  rel="external nofollow"  rel="external nofollow"  rel="external nofollow" >+ Add new</a>            </div>        </div>    </div></body></html>


ViewRenderService :

public class ViewRenderService{    private readonly IRazorViewEngine _razorViewEngine;    private readonly ITempDataProvider _tempDataProvider;    private readonly IServiceProvider _serviceProvider;    public ViewRenderService(IRazorViewEngine razorViewEngine,        ITempDataProvider tempDataProvider,        IServiceProvider serviceProvider)    {        _razorViewEngine = razorViewEngine;        _tempDataProvider = tempDataProvider;        _serviceProvider = serviceProvider;    }    public async Task&lt;string&gt; RenderToStringAsync(string viewName, object model)    {        var httpContext = new DefaultHttpContext { RequestServices = _serviceProvider };        var actionContext = new ActionContext(httpContext, new RouteData(), new ActionDescriptor());        using (var sw = new StringWriter())        {            var viewResult = _razorViewEngine.FindView(actionContext, viewName, false);            if (viewResult.View == null)            {                throw new ArgumentNullException($"{viewName} does not match any available view");            }            var viewDictionary = new ViewDataDictionary(new EmptyModelMetadataProvider(), new ModelStateDictionary())            {                Model = model            };            var viewContext = new ViewContext(                actionContext,                viewResult.View,                viewDictionary,                new TempDataDictionary(actionContext.HttpContext, _tempDataProvider),                sw,                new HtmlHelperOptions()            );            await viewResult.View.RenderAsync(viewContext);            return sw.ToString();        }    }}

Program.cs :

builder.Services.AddTransient<ViewRenderService>();

以上就是关于“怎么使用Net将HTML简历导出为PDF格式”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注编程网精选频道。

--结束END--

本文标题: 怎么使用Net将HTML简历导出为PDF格式

本文链接: https://lsjlt.com/news/354653.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 怎么使用Net将HTML简历导出为PDF格式
    这篇“怎么使用Net将HTML简历导出为PDF格式”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“怎么使用Net将HTML简历...
    99+
    2023-07-05
  • Java怎么将Excel转为PDF格式
    本篇内容主要讲解“Java怎么将Excel转为PDF格式”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java怎么将Excel转为PDF格式”吧!本文将介绍在程序中如何将Excel工作簿转为PD...
    99+
    2023-06-02
  • C#怎么将PDF转为其他格式
    本篇内容介绍了“C#怎么将PDF转为其他格式”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!必要步骤:步骤一:dll文件获取及导入。方法1.通...
    99+
    2023-06-03
  • 怎么将axure文件导出为html
    小编给大家分享一下怎么将axure文件导出为html,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!axure文件导出为html的方法:首先使用软件打开需要进行操作...
    99+
    2023-06-15
  • Nodejs中使用phantom将html转为pdf或图片格式的方法
    最近在项目中遇到需要把html页面转换为pdf的需求,并且转换成的pdf文件要保留原有html的样式和图片。也就是说,html页面的图片、表格、样式等都需要完整的保存下来。 最初找到三种方法来实现这个需求,...
    99+
    2022-06-04
    图片格式 方法 phantom
  • php怎么将Excel文件转为PDF格式
    随着互联网的飞速发展,越来越多的企业和个人开始使用网络来处理和存储各种数据。在这个背景下,各种数据格式的转换变得越来越重要,其中将Excel文件转换为PDF格式的需求也日益增加。作为一种流行的编程语言,PHP不仅可以处理网页开发和服务器端编...
    99+
    2023-05-14
  • 使用JAVA怎么将PDF转换为HTML文档
    使用JAVA怎么将PDF转换为HTML文档?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。引入Maven依赖<!-- https://mvnrepositor...
    99+
    2023-06-15
  • php怎么将word转换为html格式
    本篇内容主要讲解“php怎么将word转换为html格式”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“php怎么将word转换为html格式”吧!PHP将上传word文件,转化为Html格式,(...
    99+
    2023-06-20
  • 怎么用python包pdfkit将HTML转换为PDF
    本篇内容介绍了“怎么用python包pdfkit将HTML转换为PDF”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!python包-pdfk...
    99+
    2023-06-30
  • Python怎么实现将Excel内容批量导出为PDF文件
    本篇内容介绍了“Python怎么实现将Excel内容批量导出为PDF文件”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!序言部分数据然后需要安...
    99+
    2023-06-30
  • 怎么将JSON转换为HTML格式并显示
    这篇文章主要介绍怎么将JSON转换为HTML格式并显示,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!html有什么特点1、简易性:超级文本标记语言版本升级采用超集方式,从而更加灵活方便,适合初学前端开发者使用。2、可...
    99+
    2023-06-14
  • 怎么在将html转换为word文档格式
    怎么在将html转换为word文档格式?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。1、首先在HTML网页任意位置点击鼠标右键,选择“网页另存为”。2、根据需要将HTML网...
    99+
    2023-06-14
  • 实例讲解怎么将php格式转为html
    随着互联网时代的发展,网站已经成为人们获取信息,交流沟通的重要平台。而网站的建设离不开一种很重要的语言——HTML语言。不过,对于开发人员来说,要想手写HTML代码是一件比较费时间、费力的事情。而且,即使在使用HTML编辑器的情况下,也经常...
    99+
    2023-05-14
  • Java怎么将Excel转为图片及html等格式
    本篇内容主要讲解“Java怎么将Excel转为图片及html等格式”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java怎么将Excel转为图片及html等格式”吧!使用工具:Free Spir...
    99+
    2023-06-02
  • 怎么使用PHP将数组转换为JSON格式
    这篇文章主要介绍“怎么使用PHP将数组转换为JSON格式”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“怎么使用PHP将数组转换为JSON格式”文章能帮助大家解决问题。PHP是一种广泛使用的服务器端脚...
    99+
    2023-07-05
  • .NET Core API格式化输出对象OutputFormatter怎么用
    这篇“.NET Core API格式化输出对象OutputFormatter怎么用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,...
    99+
    2023-06-30
  • 怎么使用PHP将时间戳转为美式时间格式
    今天小编给大家分享一下怎么使用PHP将时间戳转为美式时间格式的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一、时间戳是什么首...
    99+
    2023-07-05
  • 怎么使用pandoc将Markdown转换为格式化文档
    小编给大家分享一下怎么使用pandoc将Markdown转换为格式化文档,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!基本转换首先,在你的计算机上安装 pando...
    99+
    2023-06-16
  • 怎么使用php将时间戳转为时间格式
    这篇“怎么使用php将时间戳转为时间格式”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“怎么使用php将时间戳转为时间格式”文...
    99+
    2023-07-05
  • 怎么用VBS将一篇txt后缀的内容保存为html格式
    这篇文章主要介绍了怎么用VBS将一篇txt后缀的内容保存为html格式,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。do.vbs代码如下:'BY Coo_boi If...
    99+
    2023-06-08
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作