将HTML转化为PDF格式

参考文档https://github.com/vilppu/OpenHtmlToPdf
在项目中引用,这里使用了.NET Framework 4.5

在页面中把要转化的html代码传到控制器

var html = document.documentElement.outerHTML;

 


获取页面输出的html源码
这里的引用文件会全部失效,包括bootstrap、jquery
需要写内部样式,并且脚本代码运行完毕后再运行转化的请求

function GetPdf() {
var html = document.documentElement.outerHTML;
$.ajax({
url: "/Home/GetPdf",
type: "Post",
dataType: "json",
data: {
html: html
},
success: function(data) {
//alert(data);
}
})
}

 

也可以通过这种方式直接获取html源码

string html = string.Empty;
WebClient wc;
try {
wc = new WebClient();
wc.Encoding = Encoding.UTF8;
string requestUrl = "https://localhost:44353/Home/Page_PDF";
html = wc.DownloadString(requestUrl);
} catch(Exception) {
throw;
}

 

 

完整的控制器方法

string html = string.Empty;
WebClient wc;
try {
wc = new WebClient();
wc.Encoding = Encoding.UTF8;
string requestUrl = "https://localhost:44353/Home/Page_PDF";
html = wc.DownloadString(requestUrl);
} catch(Exception) {
throw;
}

 

 

如果转化的页面中有Echart输出?

可以将原来图表的位置空出来给一个Img标签,通过以下方法将Echart转化为图片放到Img里

var picInfo = barChart.getConnectedDataURL();
$(".Re_barChart").attr("src", picInfo);

 


代替的Img标签就用原本图表容器的样式
.Re_barChart { width: 100%; height: 500px; margin: 20px 0px; display: block; }
原本的图表容器可以隐藏
.barChart { width: 50%; height: 500px; visibility: hidden; position: absolute; }


水印的方案
普通图片的路径转换成PDF后不能读取,只能是base64格式

页面中有一个Img:watermark

<img id="watermark" src="~/images/watermark.png" style="display:none;" />

 


水印的样式

.Canves { position: absolute; top: 0; left: 0;
width: 100%; height: 1600px; z-index: 1000;
pointer-events: none; background-repeat: no-repeat;
background-position: center; background-size: 80%; }

 


获取body的高度,每隔一定距离放一个div作水印容器
再获取watermark的src把它转换为base64格式

var height = $("body").height();
for (let i = 0; i < height / 1600; i++) {
$("body").append("<div class=\"Canves\" style=\"top: " + 1600 * i + "px\"></div>");
}
var image = document.getElementById("watermark");
var base64 = getBase64Image(image);
$(".Canves").css({
"background-image": "url(" + base64 + ")"
});

 

获取一个Img的图片里的src(Base64)

function getBase64Image(img) {
var canvas = document.createElement("canvas");
canvas.width = img.width;
canvas.height = img.height;
var ctx = canvas.getContext("2d");
ctx.drawImage(img, 0, 0, img.width, img.height);
var ext = img.src.substring(img.src.lastIndexOf(".") + 1).toLowerCase();
var dataURL = canvas.toDataURL("image/" + ext);
return dataURL;
}

 

posted @ 2020-05-21 17:49  LoloJia  阅读(685)  评论(0编辑  收藏  举报