html2pdf取消隐藏后不会打印隐藏的div?

Posted

技术标签:

【中文标题】html2pdf取消隐藏后不会打印隐藏的div?【英文标题】:html2pdf won't print hidden div after unhiding it? 【发布时间】:2020-06-18 18:41:39 【问题描述】:

我正在尝试使用 html2pdf 创建 PDF。我希望 html2pdf 捕获隐藏的 div,为此,我试图在创建 PDF 时短暂“取消隐藏”我的 div,然后在 PDF 生成后“重新隐藏”该 div:

function generatePDF() 
    // Choose the element that our invoice is rendered in.
    const element = document.getElementById("nodeToRenderAsPDF");
    // Display the PDF div
    $(element).css("display", "block");
    // Choose the element and save the PDF for our user.
    html2pdf(element);
    //Hide the PDF div
    $(element).css("display", "none");

但是当 PDF 打印时,我的 div 不存在。我相信我曾尝试使用 html2pdf 提供的回调函数重新隐藏 div,并且成功了;但是,当 PDF 在消失之前生成时,我的隐藏 div 会短暂出现在屏幕上(0.5-1 秒)。我不能让这种事情发生。另外,我不太喜欢将 div 放在远离视口的地方以弥补隐藏问题,因为我听说这种方法与某些浏览器有冲突。

关于如何解决此问题的任何想法?非常感谢任何帮助。谢谢!

【问题讨论】:

您是在 div 上使用内联样式还是 css 样式规则,还是两者都使用?通常 css 样式不能覆盖内联样式,因为后者是“级联”链中最重要的因素。 @GetSet 我正在使用我的 styles.css 文件中的 CSS,所以我认为不应该有任何覆盖。 您的divs 是否具有display:nonedisplay:block 的内联样式?如果是这样,请将其删除并通过 <style> 标签定义您的默认值。 万一,当您更改样式然后调用 pdf lib 时,DOM 没有完全重新渲染?稍后我将在您对我最后一个问题/疑虑的回答中解决这个问题。为您投票,因为可能其他人可以立即解决这个好问题。 您能否包含指向您正在使用的 html2pdf 库的链接(在您的问题中)以及您正在使用的版本?谢谢。 【参考方案1】:

您可以使用cloneNode 创建元素的克隆并将其用于创建 PDF。除非您将其附加到文档中,否则此克隆的元素将不可见。

下面的代码将创建一个你的元素的克隆,改变它的显示属性,然后使用这个克隆的元素创建 pdf,最后删除这个克隆的元素。

function generatePDF() 

    // Choose the element that our invoice is rendered in.
    const element = document.getElementById("nodeToRenderAsPDF");

    // clone the element
    var clonedElement = element.cloneNode(true);

    // change display of cloned element 
    $(clonedElement).css("display", "block");

    // Choose the clonedElement and save the PDF for our user.
    html2pdf(clonedElement);

    // remove cloned element
    clonedElement.remove();

【讨论】:

不幸的是,这仍然给了我一个空白的 PDF。很坚持这个。 其实我很傻。我之前正在测试一些“不透明度:0”CSS,但忘记删除它。它现在实际上正在工作。感谢您的帮助! 这是最好的答案。它为我节省了数小时的研究时间。谢谢as-if-i-code

以上是关于html2pdf取消隐藏后不会打印隐藏的div?的主要内容,如果未能解决你的问题,请参考以下文章

取消事件冒泡

JavaScript:如何隐藏/取消隐藏 <div>

前端使用JS和JQuery显示隐藏标签

如何使用 javascript 隐藏/取消隐藏 div? [复制]

LODOP打印table表格宽度固定-超宽隐藏

如何让layui中的内容不居中