致电时:
html2canvas(document.getElementsByClassName('console'), {
onrendered: function(canvas) {
var img = canvas.toDataURL()
var iframe = '<iframe src="' + img + '" frameborder="0" style="border:0; top:0px; left:0px; bottom:0px; right:0px; width:100%; height:100%;" allowfullscreen></iframe>'
var x = window.open();
x.document.open();
x.document.write(iframe);
x.document.close();
},
letterRendering: true,
});
不论是否带有letterRendering
,Chrome都会输出以下内容:
在Firefox中的输出为:
它为何如此渲染有任何特定的原因?
字母间距(在这种情况下为单词间距)实际上看起来是正确的,但看起来不正确的是字体系列。 您正在使用哪个版本的html2canvas? 您可以在jsfiddle上复制该问题吗?
编辑:使用letterRendering时,它应呈现与您提到的不同的外观。
感谢您的回复,
我正在使用0.5.0-beta4
。
您的工作间隔看起来正确是什么意思? 您是指我分享的第一张照片吗? 字体会在单词之间产生这样的间距吗?
请注意,我将CodeMirror用于呈现的文本编辑器,特别是Angular包装器: ng2-codemirror 。
我试图在这里无济于事。
我也在firefox和chrome中发现了同样的问题。 如果您在文本上使用字母间距的css规则,它将使文本在每个单词之间留有很大的空隙。 在0.4.1版本中不是这种情况,它曾经可以完美地呈现文本,但是缺少伪元素(:before:after)
删除letter-spacing
规则后,一切恢复正常吗? 我既不在组件的css中也不在自定义code-mirror
的css文件中使用它。
是从CSS删除字母间距规则后,问题消失了。 单词之间没有大的空格。 这是页面间距中字母间隔部分的渲染中的某种东西。
更新! 我只是从master的最新资源构建的库,它运行良好。 到目前为止,一切看起来都很不错。 以前,我尝试使用v0.5.0-beta4版本。
编辑:在firefox上发现1个问题。 当背景图像没有被剪切到文本时
-webkit-background-clip:文本;
-webkit-text-fill-color:透明;
被使用。
虽然在chrome中效果很好。
我没有在CSS中使用任何letter-spacing
属性,但问题仍然存在。 我正在使用v0.5.0-beta4
。
尝试从最新的主要资源进行构建。
完成,但这不能解决问题,显示保持不变。
似乎问题依旧存在:
这是我渲染元素的方式:
html2canvas(document.body).then(function(canvas) {
document.body.appendChild(canvas);
});
我已经下载了您提到的最新预发行版本,并替换了旧版本。
如果设置选项letterRendering: true
@ christopherkade会解决吗?
不幸的是,这不是我的做法:
let element = document.getElementById('console');
const options = {
letterRendering: true
};
html2canvas(element, options).then(function(canvas) {
document.body.appendChild(canvas);
var url = canvas.toDataURL();
var img = '<img src="' + url + '" style="border:0;"></img>'
var x = window.open();
x.document.open();
x.document.write(img);
x.document.close();
});
如果我尝试存储库中给出的示例,则结果相同。
我找到了解决此问题的方法(而且不是很干净):
// Package used to detect the browser used by the user
const browser = detect();
const element = document.getElementById('console');
// Set up my options
let options = {};
// For some reason foreignObjectRendering solves the spacing issue on Chrome but gives an error on Firefox, so I detect the browser and apply the adequate options.
if (browser && browser.name === 'chrome') {
options = {
useCORS: true,
foreignObjectRendering: true
};
}
// Open the canvas in a new window
html2canvas(element, options).then(function(canvas) {
const url = canvas.toDataURL();
const img = '<img src="' + url + '" style="border:0;"></img>'
const x = window.open();
x.document.open();
x.document.write(img);
x.document.close();
});
请注意,使用第二个选项时在Firefox上出现的错误如下:
未捕获(承诺):[异常... \“方法未实现\” ...
同样的问题!!
通过从HTML正文中删除CSS属性font-variant-numeric:比例数字来解决此问题。
修复了删除font-variant: tabular-nums;
( in antd.css
)的类似问题
同样的阿拉伯语问题有什么建议吗?
@mohafouad +1
您是否找到了解决办法? 谢谢。
@ 2xSamurai no:(
我也通过转到要截图的div来解决此问题,然后设置“ font-variant: normal;
”,这对我很有用,希望对您有所帮助。
修复如果我在整个内容的外部div中添加font-variant: normal !important
(在antd项目中)
同样的问题,让我发疯
font-variant:正常!重要不起作用
@ Malarkey- Jhu和
我遇到的问题是:字体家族无法正常工作,并且间距非常不稳定。 有时我会有重叠的字母。
我的工作:在导出过程中,我在带有文本的元素上调用element.style.setProperty('font-variant','normal'),这允许字体家族正确显示,并且间距也不是唯一的。 然后,我在完成导出后删除该属性。
根据上述解决方案,通过将codemirror css文件中的-webkit-font-variant-ligatures
和font-variant-ligatures
更改normal
,为我解决了此问题。 我正在使用CodeMirror版本5.42.2
。
最有用的评论
我也通过转到要截图的div来解决此问题,然后设置“
font-variant: normal;
”,这对我很有用,希望对您有所帮助。