.NET 使用 itext7.pdfhtml把html转成pdf

11 篇文章 0 订阅
3 篇文章 0 订阅

.NET 使用 itext7.pdfhtml把html转成pdf

使用环境 vs2022 .net6

需要使用 itext7.pdfhtml,用NuGet管理

可以直接保存成pdf文件,也可以保存成文件流

  • 前端代码
<body>

    <div>
        <div style="margin-top:10px;">
            <input id="saveFile" type="button" value="html保存为pdf文件" onclick="saveFileFun()" />
        </div>
        <div style="margin-top:10px;">
            <button id="saveStream" onclick="saveStreamFun()">html保存为文件流</button>
        </div>
    </div>

    <script>
        function saveFileFun() {
            var xhr = new XMLHttpRequest();
            xhr.onreadystatechange = function () {
                if (this.readyState == 4 && this.status == 200) {

                }
            }
            xhr.open("post", "../../Test/SaveFile")
            xhr.send();
        }
        function saveStreamFun() {
            var xhr = new XMLHttpRequest();
            xhr.onreadystatechange = function () {
                debugger
                if (this.readyState == 4 && this.status == 200) {
                    debugger
                    var url = window.URL.createObjectURL(new Blob([this.response], {type:"text/plain,charset=UTF-8"}));
                    var link = document.createElement("a");
                    link.style.display = "none";
                    link.href = url;
                    link.setAttribute("download", "ApiDocument.pdf");
                    document.body.appendChild(link);
                    link.click();
                }
            }
            xhr.open("post", "../../Test/SaveStream")
            xhr.responseType = "blob"
            xhr.send();
        }
    </script>
</body>
  • 后端代码
public FileContentResult SaveStream()
        {
            StringBuilder stringBuilder = new StringBuilder();
            stringBuilder.Append("<div style='display: block;font-size: 17px; color: #FF0000; font-weight: bold;'>" + "测试数据" + "</div>");
            stringBuilder.Append(@"<table style='border-right:solid 0.5px #000000; border-bottom:solid 0.5px #000000;'>
<tbody><tr>
<th style='border-top:solid 0.5px #000000; border-left:solid 0.5px #000000; padding:5px;'><b>姓名</b>
</th>
<th style='border-top:solid 0.5px #000000; border-left:solid 0.5px #000000; padding:5px;'><b>年龄</b>
</th></tr>
<tr>
<td style='border-top:solid 0.5px #000000; border-left:solid 0.5px #000000; padding:5px;'>张三
</td>
<td style='border-top:solid 0.5px #000000; border-left:solid 0.5px #000000; padding:5px;'>21
</td></tr>
</tbody></table>");

            var pageSize = PageSize.A4;
            var properties = new ConverterProperties();
            properties.SetCharset("utf-8");
            var provider = new DefaultFontProvider(true, true, true);       // 第三个参数为True,以支持系统字体,否则不支持中文
            properties.SetFontProvider(provider);
            var mediaDeviceDescription = new MediaDeviceDescription(MediaType.PRINT);      // 指当前设备类型,如果是预览使用SCREEN
            mediaDeviceDescription.SetWidth(pageSize.GetWidth());
            properties.SetMediaDeviceDescription(mediaDeviceDescription);

            var stream = new MemoryStream();
            var writer = new PdfWriter(stream);
            writer.SetCloseStream(false);
            HtmlConverter.ConvertToPdf(stringBuilder.ToString(), writer, properties);
            writer.Close();
            stream.Seek(0, SeekOrigin.Begin);
            stream.Close();

            byte[] byteInfo = stream.ToArray();//pdf字节数组

            return new FileContentResult(byteInfo, Microsoft.Net.Http.Headers.MediaTypeHeaderValue.Parse("application/pdf"));
        }

        public void SaveFile(string fullFileName)
        {
            StringBuilder stringBuilder = new StringBuilder();
            stringBuilder.Append("<div style='display: block;font-size: 17px; color: #FF0000; font-weight: bold;'>" + "测试数据" + "</div>");
            stringBuilder.Append(@"<table style='border-right:solid 0.5px #000000; border-bottom:solid 0.5px #000000;'>
<tbody><tr>
<th style='border-top:solid 0.5px #000000; border-left:solid 0.5px #000000; padding:5px;'><b>姓名</b>
</th>
<th style='border-top:solid 0.5px #000000; border-left:solid 0.5px #000000; padding:5px;'><b>年龄</b>
</th></tr>
<tr>
<td style='border-top:solid 0.5px #000000; border-left:solid 0.5px #000000; padding:5px;'>张三
</td>
<td style='border-top:solid 0.5px #000000; border-left:solid 0.5px #000000; padding:5px;'>21
</td></tr>
</tbody></table>");

            // FileInfo fi = new FileInfo(fullFileName);
            FileInfo fi = new FileInfo("E:\\NewPdfFile.pdf");
            PdfWriter writer = new PdfWriter(fi);

            //用法1 -- 使用默认参数直接转换(A4,)
            //HtmlConverter.ConvertToPdf(stringBuilder.ToString(), writer);

            //用法2 -- 自定义页面大小、留白尺寸
            PdfDocument pdf = new PdfDocument(writer);
            PageSize a4 = PageSize.A4;
            a4.ApplyMargins(20, 20, 20, 20, false);     //if true the rectangle will expand, otherwise it will shrink
            pdf.SetDefaultPageSize(a4);
            ConverterProperties prop = new ConverterProperties();
            prop.SetCharset("utf-8");
            var provider1 = new DefaultFontProvider(true, true, true);       // 第三个参数为True,以支持系统字体,否则不支持中文
            prop.SetFontProvider(provider1);
            HtmlConverter.ConvertToPdf(stringBuilder.ToString(), pdf, prop);
        }

在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值