标签: html2canvas

html2canvas 无法在 Chrome 中使用 @font-face 字体

我正在使用http://html2canvas.hertzen.com/将我的 html 转换为画布。这是一个很棒的剧本。
它与英文字体配合得很好......但我正在使用古吉拉蒂字体。我包括来自 css (@font-face) 的字体,
它在 Firefox 中运行良好,但在 chrome 中它不显示确切的字符。
这段代码中我缺少任何选项吗?

html2canvas(document.body, {
  onrendered: function(canvas) {
    document.body.appendChild(canvas);
  },
  width: 300,
  height: 300
});
Run Code Online (Sandbox Code Playgroud)

html canvas html5-canvas html2canvas

5
推荐指数
0
解决办法
1874
查看次数

元素缩放时 html2canvas 不起作用

我正在使用 html2canvas 插件对我的网页进行屏幕截图,效果非常好。然而,页面上的一个 div 是可以缩放的,这在截图时似乎会引起问题。这是截取屏幕截图的代码。

 function screenshot(fileName){

        html2canvas(document.body, {
            onrendered: function(canvas) {
                var myImage = canvas.toDataURL("image/png");
                var image = myImage.replace('data:image/png;base64','');
                window.open(myImage);
            }

         });
Run Code Online (Sandbox Code Playgroud)

有没有一种简单的方法来更新 dom,以便在缩放 div 时,html2canvas 截取最新网页的屏幕截图,或者这是不可能的。

有人有使用其他插件的经验吗?这可能是一个不错的选择?谢谢你的帮助!

javascript css jquery screenshot html2canvas

5
推荐指数
1
解决办法
1397
查看次数

我想使用 Html2canvas 截取 div 的屏幕截图

我正在使用 Html2canvas 来截取 div 的屏幕截图并将其显示在新窗口中。这是我的 JavaScript 函数

function capture() {
html2canvas(document.getElementById('screenshot'), {
onrendered: function(canvas) {
var img = canvas.toDataURL("image/png");    
window.open(img);
}}
);
}
Run Code Online (Sandbox Code Playgroud)

这段代码的问题是它只捕获了 div 的一半,如下图所示: 形式

我将要捕获的元素的 ID 更改为“table”,这样我就只能对表进行屏幕截图。但看起来屏幕截图只占据了目标 div 的一半(就高度而言)。 仅表

现在当我选择全身时:

function capture() {
html2canvas(document.body, {
onrendered: function(canvas) {
var img = canvas.toDataURL();
window.open(img);
}
});
Run Code Online (Sandbox Code Playgroud)

结果如下: 身体

javascript css screenshot html2canvas

5
推荐指数
1
解决办法
7439
查看次数

使用 html2canvas.js 的 jsPdf:未捕获错误:提供的数据不是 JPEG

我正在使用 jsPDF 和 html2Canvas 生成 PDF。

如果我以 document.body 为目标,它就会起作用。

<script type="text/javascript">
  function pdfDownload() {
  var pdf = new jsPDF('p', 'pt', 'a4');
  pdf.addHTML(document.body, function () {
  pdf.save('test.pdf');
  });
}</script>
Run Code Online (Sandbox Code Playgroud)

但是,如果我尝试在 div #pdfcontent 上使用 id,我会得到:

“未捕获错误:提供的数据不是 JPEG”

<script type="text/javascript">
  function pdfDownload() {
  var pdf = new jsPDF('p', 'pt', 'a4');
  pdf.addHTML($('#pdfcontent')[0], function () {
  pdf.save('test.pdf');
  });
}</script>
Run Code Online (Sandbox Code Playgroud)

请帮助

javascript jquery html2canvas jspdf

5
推荐指数
1
解决办法
3697
查看次数

如何使用 Javascript 以编程方式将画布作为图像复制到剪贴板

我已经使用html2canvas.js来截取特定 div 的屏幕截图,现在我想知道是否可以使用 js 将canvas元素作为图像复制到剪贴板,然后用户只需单击即可在剪贴板上获得他们想要的图像,他们所需要做的就是粘贴它。

Codepen 演示

javascript html2canvas

5
推荐指数
1
解决办法
4578
查看次数

html2canvas 忽略我的 svg 元素

我尝试打印页面的屏幕,然后将其保存到 中base64,效果很好,但看起来svg元素被忽略,并且某些css样式效果不好,例如:before:after,原始页面看起来 -在此输入图像描述

但转换后看起来像这样 -在此输入图像描述

您可以看到右侧的圆圈:before被忽略,顶部菜单中的箭头和:after选项卡上的箭头以及添加新选项卡按钮 (+) 相同。我的转换代码看起来 -

printOnePage(){
        document.getElementById('helpPage').style.display= 'none';
        let page = document.getElementById('appContainer');
        html2canvas(page,{
            onrendered: function(canvas) {
                $('#img_val').val(canvas.toDataURL("image/png"));
                console.log(document.getElementById('img_val'));
                //document.getElementById("phpSendForm").submit();
            }
        });
        document.getElementById('helpPage').style.display= '';

    }
Run Code Online (Sandbox Code Playgroud)

有什么提示可能会导致这种情况吗?

html javascript svg canvas html2canvas

5
推荐指数
1
解决办法
7182
查看次数

将canvas集成到jsdom中

通过查看jsdom的文档,似乎支持canvas。然而给出的唯一解释是:

jsdom 支持使用 canvas 或 canvas-prebuilt 包通过 canvas API 扩展任何元素。为了实现这一点,您需要将 canvas 作为项目中的依赖项,作为 jsdom 的对等项。如果 jsdom 可以找到 canvas 包,它将使用它,但如果它不存在,则元素的行为将类似于 s。

这对我一点帮助都没有。我通过npm安装了canvas-prebuilt并在 jsdom 之前导入了 canvas-prebuilt

import canvas from 'canvas-prebuilt';
import jsdom from 'jsdom';
Run Code Online (Sandbox Code Playgroud)

接下来我想创建一些 html 片段的 dom 对象,然后使用html2canvas将 html 插入到画布中:

const dom = new JSDOM(html);
let domcanvas = await html2canvas(dom, {
  dpi: dpi,
  useCORS: true,
  timeout: 20000
});
Run Code Online (Sandbox Code Playgroud)

执行代码时会抛出错误:

No canvas support
Run Code Online (Sandbox Code Playgroud)

我假设 jsdom 没有找到画布。

因此我的问题是如何将canvas集成到jsdom中?

编辑

因此,在深入研究 JSDom 代码后,我发现 JSDom 实际上正在寻找画布。我通过修改node_modules/jsdom/lib/jsdom/utils.js中的代码来解决这个问题,添加一些控制台日志来验证是否已找到画布:

exports.Canvas = null; …
Run Code Online (Sandbox Code Playgroud)

canvas express jsdom html2canvas

5
推荐指数
1
解决办法
7103
查看次数

如何使用 jsPDF 在页面中央放置图像?

使用 html2canvas 和 jsPDF,我试图DIV在我的屏幕上打印一个完整的内容,我已经做到了这一点:

const printAsPdf = () => {
  html2canvas(pageElement.current, {
    useCORS: true,
    allowTaint: true,
    scrollY: -window.scrollY,
  }).then(canvas => {
    const image = canvas.toDataURL('image/jpeg', 1.0);
    const doc = new jsPDF('p', 'px', 'a4');
    const pageWidth = doc.internal.pageSize.getWidth();
    const pageHeight = doc.internal.pageSize.getHeight();

    const widthRatio = pageWidth / canvas.width;
    const heightRatio = pageHeight / canvas.height;
    const ratio = widthRatio > heightRatio ? heightRatio : widthRatio;

    const canvasWidth = canvas.width * ratio;
    const canvasHeight = canvas.height * ratio;

    doc.addImage(image, 'JPEG', 0, …
Run Code Online (Sandbox Code Playgroud)

javascript math positioning html2canvas jspdf

5
推荐指数
1
解决办法
3209
查看次数

根据 html2canvas (html2pdf) 中的比例丢失图像

我正在尝试使用 html2pdf 在我的 html 中制作合理数量的文本和图形的 PDF。到目前为止一切顺利,PDF 制作完成,看起来不错。它大约有 20 页。但是,缺少多个图形。一些相关资料:

  • 大多数缺失的图表都在文档的末尾。然而,最终的图形是渲染的,所以它在最后不是一个明确的切断
  • 图表随附的文字在那里,但图表本身没有
  • 缺失的图形都是相同的类型。这种类型的其他图形被渲染并且看起来很好。好像不是类型的问题
  • 如果我将 html2canvas 配置的比例减少到大约 0.8,每个图形都会被渲染(但质量当然会降低)。我希望比例为 2。

缩放会影响它们是否被渲染,这一事实让我觉得时间/超时之类的东西在这里是一个问题。更大的比例显然意味着更长的渲染时间,但它似乎没有等待它完成。或类似的东西。

下面是制作 PDF 的大部分代码。onClone 是正确渲染图形所必需的。如果去掉了,还是会出现上面描述的问题(但是渲染出来的图很难看)。

    const options = {
      filename: 'test.pdf',
      margin: [15, 0, 15, 0],
      image: { type: 'jpeg', quality: 1 }
      html2canvas: {
        scale: 2,
        scrollY: 0,
        onclone: (element) => {
          const svgElements = element.body.querySelectorAll('svg');
          Array.from(svgElements).forEach((item: any) => {
            item.setAttribute('width', item.getBoundingClientRect().width.toString());
            item.setAttribute('height', item.getBoundingClientRect().height.toString());
            item.style.width = null;
            item.style.height = null;
          });
        }
      },
      jsPDF: { orientation: 'portrait', format: 'a4' }
    }; …
Run Code Online (Sandbox Code Playgroud)

javascript pdf html2pdf html2canvas

5
推荐指数
1
解决办法
448
查看次数

如何将可自定义的颜色更改框下载为带有背景图像的图像?

我有一个盒子,一旦你选择盒子然后选择颜色,它就可以改变颜色。

但是,还有一个显示框轮廓的背景图像。我使用 HTML2canvas 和 jquery 作为库,因此我可以将自定义颜色更改框下载为图像,但只有在隐藏图像时才能在本地下载 - 如 CSS 所示。

我的问题是,如何下载带有背景轮廓框图像的可自定义颜色更改框?- 或 - 是否有另一种方法可以使用下载按钮在本地保存背景图像和 SVG?

//////// carousel ////////

let sliderImages = document.querySelectorAll('.slide'),
  arrowLeft = document.querySelector('#arrow-left'),
  arrowRight = document.querySelector('#arrow-right'),
  current = 0;

//Clear all images
function reset() {
  for (let i = 0; i < sliderImages.length; i++) {
    sliderImages[i].style.display = 'none';
  }
}
// initialize slider
function startSlide() {
  reset();
  sliderImages[0].style.display = "block";
}

//show previous
function slideLeft() {
  reset();
  sliderImages[current - 1].style.display = "block";
  current--;
}

//show next
function slideRight() …
Run Code Online (Sandbox Code Playgroud)

html javascript css jquery html2canvas

5
推荐指数
1
解决办法
214
查看次数