前端生成pdf,jspdf+html2Canvas的使用(vue)

前端生成pdf,jspdf+html2Canvas的使用(vue),第1张

2、安装html2Canvas: npm install --save html2canvas

这里使用 iframe 嵌套需要转成pdf的html文件

如果pdf内容是动态的,可以将html丢给后端,让后端使用freemarker ftl模板语言或是啥其他的模板语言更改即可,然后将整个html作为字符串传给前端,前端再使用iframe 的 srcdoc属性将内容渲染出来。

不存在分页内容裂开的情况,但对样式呈现不太友好,有时会出现内容偏移情况,时好时坏的,经过不断的尝试,发生偏移的时候,可以将html2Canvas的width写死,但是值具体是多少,需要你自己猜

分页会出现问题:比如图片裂开,表格的某一行从中间断开了等等....我用的笨方法手动去调整iframe的宽、高+html2Canvas的width、height+contentWidth、contentHeight,一点点试出来合适的值(应该有更好的方法,但是技术有限)

1. 生成多页pdf,分页内容裂开的问题

pdf转换和html格式  步骤如下:

在电脑上安装好pdf转换器

打开安装好的pdf转换器,选择右侧倒数第二栏栏“pdf转html文件”

选择后出现如下 *** 作框

选择左上角的“添加文件”添加需要转换的pdf文件或直接将pdf文件往 *** 作中拉进

添加好文件后,选择好右下角输出目录,点“立刻开始转换”

转换完成后,转换器显示转换完成,同时在输出目录生成一个跟源pdf文件同名的文件夹件,打开文件夹里面有有一个文件夹和一个网页html文件,文件夹内都是图片,此时转换已经完成

比如说,现在有一个外部的html文件test.html,内容是:

<input type="button" value="外部文件按钮" />

<p>外部文件p标签</p>

现在在这个网页中加载test.html中的内容,这个网页的源码为:

<html>

<head>

    <meta http-equiv="Content-Type" content="text/html charset=utf-8" />

    <title></title>

    <script src="../Scripts/jquery-1.8.2.min.js"></script>

    <script type="text/javascript">

        function GetHtml() {

            $.ajax({

                type: "POST",

                url: 'Handler.ashx',      //提交到一般处理程序请求数据     

                success: LoadHtml

            })

        }

        function LoadHtml(data) {

            var div = document.getElementById("out")

            div.innerHTML = data//注意这里,要是想展示test.heml中的内容就用这个,如果显示源代码则用innerText

        }

    </script>

</head>

<body>

    <input type="button" value="加载外部Html文件内容" onclick="GetHtml()" />

    <div id="out">

    </div>

</body>

</html>

上面脚本中写的Handler.ashx是一个一般处理程序,代码是这样的:

public void ProcessRequest(HttpContext context)

{

    context.Response.ContentType = "text/plain"

    string html = GetOutsideContent("test.html")

    context.Response.Write(html)

}

public static string GetOutsideContent(string Path)

{

    try

    {

        StreamReader sr = new StreamReader(HttpContext.Current.Server.MapPath(Path), System.Text.Encoding.GetEncoding("utf-8"))

        string content = sr.ReadToEnd().ToString()

        sr.Close()

        return content

     }

     catch

     {

         return "错误"

     }

}

public bool IsReusable

{

    get

    {

        return false

    }

}

这是asp.net下的,如果你是使用其他语言的都大同小异,从后台读取文件中的内容,使用Ajax获取后台传递的文件中的内容,思路就是这样。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/zaji/6196515.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-17
下一篇 2023-03-17

发表评论

登录后才能评论

评论列表(0条)

保存