我提取了几个遍布页面的块,通过CanvasRenderingContext2D.drawImage()
将它们绘制到画布上,然后将画布导出为PDF / JPG。
现在,在绘制它们时,我还想整理它们的外观和/或删除/显示某些块的部分,因为从静态的角度来看样式不再有意义。
我可以在body
上添加一个类,不同的样式块,而body
具有该类,构建画布,将其导出为选择的内容类型并删除body
类,但这会使页面看起来古怪1到2秒。 (我猜我可以用装载机覆盖页面)
我可以克隆块,以不同的方式设置样式或应用任何样式(内联或通过类)并从中绘制图像,但这不是最佳的。
有关如何正确做到这一点的任何想法?我倾向于选择仿真这样的东西。在本地@print
下拥有整个“导出样式”,并在将块绘制到画布上之前模拟它,而不会影响在浏览器中呈现的内容,但我不确定这是否可行。
我知道这些不能回答你的具体问题,但也许这些是问题的可行替代方案。
这听起来像是在尝试制作可打印的东西。我认为这是由某种用户交互触发的......
这意味着您有一些界面选项。例如,您可以通过在整个事物上放置一个模式来“隐藏”屏幕,并显示“处理片刻”的消息。然后身体(或另一个元素)类解决方案工作。
您可以按照建议复制元素。如果你走那条路,我会在你改变它们的同时将副本移出屏幕。
.element {
position: fixed;
left: -100vw;
}
在不知道需要多少重复项的情况下,很难推荐这个选项。
或者,你可以将努力卸载到service worker
吗?这需要复制到内存中,但它与DOM完全分离并在不同的线程中运行。
这是一个非常有趣的问题!
我认为你可以使用node.cloneNode(true)
对所有这些块进行深度克隆,将它们放在一个隐藏在用户视图之外的类名范围的公共根中,然后你秘密地修改它们的样式。
由于您修改了节点的克隆版本,因此原始内容保持不变。另外,使用classname范围,您的css可以准确地定位这些克隆。