我正在尝试使用html2canvas.js
(https://html2canvas.hertzen.com/)来截取JavaScript。但是,当页面包含SVG文本元素时,我遇到了问题。
正如您在下面的屏幕截图中看到的那样,文本元素是重复的(并且只有一个副本保留了正确的字体系列)。
这是我的代码
HTML
<svg width="600" height="200" style="background-color:lightblue;">
<text transform="translate(100, 100)" style="font-size:60px; font-family: 'Oswald'">Hello world</text>
</svg>
<br/>
<button id="createCanvasButton">Create canvas !</button>
CSS
@import url(//fonts.googleapis.com/css?family=Oswald);
JS
$('#createCanvasButton').on('click', function() {
html2canvas(document.body).then(function(canvas) {
document.body.appendChild(canvas);
});
});
的jsfiddle
https://jsfiddle.net/AndreLovichi/571t86u4/
注意
我一直在寻找类似的问题,我找到了这个问题:SVG Text attribute is doubling - HTML2CANVAS
但是,NodeParser.prototype.getChildren
上的补丁对我不起作用:剩下的文本元素具有错误的字体系列。
非常感谢!
答案 0 :(得分:-1)
I updated on your code. Please add font base64 in svg. Maybe I answered too late :),This is the first answer I use stackoverflow
The font need change dataURI insert in SVG
const request = new XMLHttpRequest();
request.open("get", './xxx/demo.woff');
request.responseType = "blob";
request.onloadend = () => { let fontDemoDataURI = reader.result }
<svg>
<style>
@font-face {
font-family: 'Oswald';
src: url(data:application/font-woff;base64,d09GRgABAAAAOtXY........ED==);
</style>
</svg>