我正在使用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) 我正在使用 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 截取最新网页的屏幕截图,或者这是不可能的。
有人有使用其他插件的经验吗?这可能是一个不错的选择?谢谢你的帮助!
我正在使用 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)
我将要捕获的元素的 ID 更改为“table”,这样我就只能对表进行屏幕截图。但看起来屏幕截图只占据了目标 div 的一半(就高度而言)。

现在当我选择全身时:
function capture() {
html2canvas(document.body, {
onrendered: function(canvas) {
var img = canvas.toDataURL();
window.open(img);
}
});
Run Code Online (Sandbox Code Playgroud)
我正在使用 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)
请帮助
我已经使用html2canvas.js来截取特定 div 的屏幕截图,现在我想知道是否可以使用 js 将canvas元素作为图像复制到剪贴板,然后用户只需单击即可在剪贴板上获得他们想要的图像,他们所需要做的就是粘贴它。
我尝试打印页面的屏幕,然后将其保存到 中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)
有什么提示可能会导致这种情况吗?
通过查看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 没有找到画布。
编辑:
因此,在深入研究 JSDom 代码后,我发现 JSDom 实际上正在寻找画布。我通过修改node_modules/jsdom/lib/jsdom/utils.js中的代码来解决这个问题,添加一些控制台日志来验证是否已找到画布:
exports.Canvas = null; …Run Code Online (Sandbox Code Playgroud) 使用 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) 我正在尝试使用 html2pdf 在我的 html 中制作合理数量的文本和图形的 PDF。到目前为止一切顺利,PDF 制作完成,看起来不错。它大约有 20 页。但是,缺少多个图形。一些相关资料:
缩放会影响它们是否被渲染,这一事实让我觉得时间/超时之类的东西在这里是一个问题。更大的比例显然意味着更长的渲染时间,但它似乎没有等待它完成。或类似的东西。
下面是制作 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) 我有一个盒子,一旦你选择盒子然后选择颜色,它就可以改变颜色。
但是,还有一个显示框轮廓的背景图像。我使用 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)html2canvas ×10
javascript ×8
canvas ×3
css ×3
html ×3
jquery ×3
jspdf ×2
screenshot ×2
express ×1
html2pdf ×1
html5-canvas ×1
jsdom ×1
math ×1
pdf ×1
positioning ×1
svg ×1