使用nginx+HTML2canvas将任意html网页转为png图片自定义张数

这篇具有很好参考价值的文章主要介绍了使用nginx+HTML2canvas将任意html网页转为png图片自定义张数。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

概述

  • 本文简述如何使用nginx+html2canvas将任意网页html转为png图片

网页的转换

  1. 如果是本地网页,直接进行nginx反向代理就行
  2. 如果不是本地网页,需要简单利用工具转为本地网页

html2canvas的使用

导入

  1. 导入,不能使用在线的库,只能下载到本地才能导入,因为会有同源限制,否则会报跨域错误。
  2. 下载导入
  • 由于在线使用的方式为:
 <script src="https://html2canvas.hertzen.com/dist/html2canvas.min.js"></script>

所以我们只需要点击衔接,把js文件保存到本地即可
衔接为:

> https://html2canvas.hertzen.com/dist/html2canvas.min.js

导入HTML2canvas库
  • 下载完毕后,导入库,我这里放在js目录下
  • 使用nginx+HTML2canvas将任意html网页转为png图片自定义张数,nginx,html,前端
    网页中引入
<script src="./js/html2canvas.min.js"></script>

使用nginx+HTML2canvas将任意html网页转为png图片自定义张数,nginx,html,前端

函数定义

在页面中js部分定义函数,实现截图功能

 window.onload = function() {
      var element = document.body;

      html2canvas(element, {
        useCORS: true,

      }).then(function(canvas) {
        var link = document.createElement('a');
        link.href = canvas.toDataURL();
        link.download = '网页截图.png';
        link.click();

      });
    };

使用nginx+HTML2canvas将任意html网页转为png图片自定义张数,nginx,html,前端

nginx部署

由于要实现自定义图片张数,并且要实现能够正常访问外部的数据
解决跨域问题
所以需要在nginx中配置可以跨域
比如这个需要截图的网页是index.html
就需要反向代理到nginx中htm也买了中index.html中
并且配置可以跨域

代码为:

    location / {
        root   html;
        index  index.html index.htm;
       add_header 'Access-Control-Allow-Origin' '*';
  add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
  add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range';
  add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range';
    }

如图
使用nginx+HTML2canvas将任意html网页转为png图片自定义张数,nginx,html,前端

这样就实现了反向代理与解决了跨域问题

编写控制截图网页代码

iframe

这里使用iframe引入外部网页,实现控制iframe里面引用的网页就是需要同源,也就是需要解决我们上面提到已经解决到的跨域问题

网页控制代码

<!DOCTYPE html>
<html lang="zh-cn">

<head>
  <meta charset="utf-8" />
  <title>网页转图片</title>
  <style>
    /* 按钮样式 */
    .button {
      background-color: #4CAF50;
      border: none;
      color: white;
      padding: 10px 20px;
      text-align: center;
      text-decoration: none;
      display: inline-block;
      font-size: 16px;
      margin: 4px 2px;
      cursor: pointer;
    }

    /* 输入框样式 */
    .input {
      padding: 10px;
      font-size: 16px;
      border-radius: 5px;
      border: 1px solid #ccc;
      transition: border-color 0.3s ease;
    }

    /* 输入框容器样式 */
    .input-container {
      margin-bottom: 10px;
    }
  </style>
  <script>
    function refreshIframe() {
      var delayInput = document.getElementById("delayInput");
      var countInput = document.getElementById("countInput");

      var delay = parseInt(delayInput.value);
      var count = parseInt(countInput.value);

      if (isNaN(delay) || delay <= 0 || isNaN(count) || count <= 0) {
        alert("请输入大于0的数字!");
        return;
      }

      var iframe = document.getElementById("myIframe");
      var remainingCount = count;

      function refresh() {
        if (remainingCount > 0) {
          iframe.contentWindow.location.reload();
          remainingCount--;
          document.getElementById("remainingCount").innerText = remainingCount;
        } else {
          clearInterval(interval);
        }
      }

      var interval = setInterval(refresh, delay * 1000);
    }
  </script>
</head>

<body>
  <div class="input-container">
    <label for="delayInput">刷新延迟时间(秒):</label>
    <input type="number" id="delayInput" class="input" placeholder="输入刷新延迟时间" />
  </div>
  <div class="input-container">
    <label for="countInput">刷新次数:</label>
    <input type="number" id="countInput" class="input" placeholder="输入刷新次数" />
  </div>
  
  <button onclick="refreshIframe()" class="button">刷新</button>

  <p>剩余次数: <span id="remainingCount">0</span></p>

  <iframe id="myIframe" src="http://localhost:90" width="100%" height="2500px"></iframe>
</body>

</html>

###网页控制代码解释说明

  <iframe id="myIframe" src="http://localhost:90" width="100%" height="2500px"></iframe>

引入我们上面的网页要截图的网页,这里需要开启nginx才能截图

网页运行效果为

使用nginx+HTML2canvas将任意html网页转为png图片自定义张数,nginx,html,前端
由于简化处理,这里的延迟时间需要根据直接的点电脑性能来进行配置

测试

使用nginx+HTML2canvas将任意html网页转为png图片自定义张数,nginx,html,前端

出现的截图就会出现在下载这里文章来源地址https://www.toymoban.com/news/detail-795935.html

说明

  1. 用的是chrome浏览器
  2. 要允许浏览器的自动下载,运行下载多个文件等权限
  3. 如果截图不完整需要自己调整或者缩放浏览器的大小。

到了这里,关于使用nginx+HTML2canvas将任意html网页转为png图片自定义张数的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • vue中使用html2canvas+jsPDF实现pdf的导出

    html2canvas依赖 jspdf依赖 pdf导出 以导出横向,A4大小的pdf为例 规律:1. html2canvas 中,在保持jsPDF中的宽高不变的情况下,设置html2canvas中的 width 和 height 值越小,导出的pdf越显示不全(会被放大,只能看到局部),反之值越大,导出的pdf越显示完整(值也不能过大,过大在pdf中就显

    2024年02月12日
    浏览(35)
  • html2canvas截图模糊问题

    最近项目中使用的html2canvas插件打印报表时,发现出现报表模糊的问题,而实际上是插件生成的图片中的像素发生了偏移。 后来查阅html2canvas源码中,发现了以下参数: 参数名称 默认值 描述 scale 1 按比例增加分辨率(2=双倍) dpi 96 将分辨率提高到特定的DPI(每英寸点数)

    2024年01月17日
    浏览(42)
  • Vue使用html2canvas将DOM节点生成对应的PDF

    要通过Vue使用html2canvas将DOM节点生成对应的PDF,您需要安装html2canvas和jspdf这两个库。html2canvas用于将DOM节点转换为Canvas,而jspdf用于将Canvas转换为PDF。以下是一个简单的示例代码,展示了如何使用html2canvas和jspdf生成PDF文件: 首先,安装html2canvas和jspdf依赖: 然后,在Vue组件中

    2024年02月11日
    浏览(43)
  • html2canvas截图生产海报图片

    图片地址后添加?time=${new Date().valueOf()},不然会报图片跨域报错 原因:这是因为你img是在缓存数据中读取的 并没有访问远程这个图片的时候没有携带请求头。 确保你的图片服务器支持CORS访问,也就是会返回Access-Control-Allow-Origin等响应头;

    2024年02月02日
    浏览(40)
  • 小程序采用html2canvas实现html转canvas保存图片

    mpaas小程序中采用html2canvas实现html转canvas保存图片 使用uniapp将代码打包一份h5部署到服务器 h5要保存的图片组件页面report.vue 安装 npm install --save html2canvas 或 yarn add html2canvas 引入import html2canvas from ‘html2canvas’; ts 小程序中采用webview跳转到h5页面

    2024年02月11日
    浏览(34)
  • vue3中,使用html2canvas截图包含视频、图片、文字的区域

    需求:将页面中指定区域进行截图,区域中包含了图片、文字、视频。 第一步,先安装 第二步,在页面引入: 第三步,页面使用: 1)html部分: 2)js部分: 刚开始我截出的图只有文字,插图和视频部分是空白的,并没有将页面的插图和视频截进去,最终发现是 跨域 导致的

    2024年02月06日
    浏览(41)
  • (vue)Vue项目中使用jsPDF和html2canvas生成PDF

    效果: 1.:安装jsPDF和html2canvas 2.在需要生成PDF文档的组件中引入jsPDF和html2canvas 解决参考: 1.https://www.jianshu.com/p/31d37bef539b 2.https://www.php.cn/faq/556634.html 3.https://blog.csdn.net/m0_54967474/article/details/123820384

    2024年02月10日
    浏览(40)
  • html2Canvas常见问题以及解决

    近期开发在vue中引用了html2Canvas后,使用时遇到一些常见问题,简单总结下: 简单代码使用格式: 阐述:生成图片后,图片下载通过添加a标签,添加download属性进行图片下载 但是在微信开发里面失效了,理由很简单,微信环境下不兼容download属性,解决办法,图片可以通过长

    2024年02月04日
    浏览(51)
  • vue2 -- 截图工具html2canvas

    可以将网页中的指定元素或整个页面截取为图片,以便保存或分享。 在 Vue 中使用 html2canvas 实现 1:安装 html2canvas 库。你可以使用 npm 安装,命令如下: 2:在需要使用 html2canvas 的 Vue 组件中,引入 html2canvas 库: :3:编写截图逻辑。你可以在组件的方法中编写,例如:

    2024年01月19日
    浏览(44)
  • 解决前端html2canvas生成图片慢问题

    分享一个小发现 这里首先直接说结论:         由于html2canvas生成图片的过程会从html的head、body层标签开始遍历,所以对于项目较大,但是只需要对 某个dom (下文以D称呼)生成图片的情况非常不友好!          所以,一定要通过ignoreElements过滤掉大部分没用的标签。

    2024年02月13日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包