簡體   English   中英

如何在其中打印帶有 canvas 的 div 元素

[英]How to print div element with canvas inside it

我有一個頁面,其中包含我想要抓取和打印的 div 元素。 在 div 里面有一個包含條形碼圖像的 canvas,我也希望打印圖像。

這是頁面代碼:

<div data-v-78bfab32="" class="trx-slip" data-testid="trx-print-slip-2892470852">
<div class="row"> SOME LOGO HERE</div>
    <div data-testid="trx-info-booking-code">
    <hr>
        <div class="row section-logistic-booking">
        <canvas data-testid="trx-barcode" class="barcode" width="166" height="65"></canvas>
            <div>TEXT 1
            </div>
                <div class="c-trx-slip--font-large">TEXT 2
                </div>
                <div class="c-trx-slip--notice-outset">
                    <div class="u-txt--upcase u-txt--bold">TEXT 3 
                    </div>
                </div>
        </div>
    </div>

這是帶有 CSS 的該頁面的預覽:

在此處輸入圖像描述

但是,每次我嘗試抓取“.trx-slip”元素時,它都不會抓取 canvas 上的圖像。

這是我用來抓取和打印元素的腳本:

function printAll(){
var containers = document.querySelectorAll(".trx-slip");
if(!containers){
    alert("Nothing to print");
}
var content = "";
for(var i =0; i < containers.length; i++){
    var addEOL = i + 1 != containers.length;
    content = content + addWrapperDiv(containers[i].outerHTML, addEOL);
}
print(content);
}

function print(content){
var mywindow = window.open('', 'Print', 'height=600,width=800');
mywindow.document.write('<html><head><title>Print</title>');
mywindow.document.write(getCssPart());
mywindow.document.write('</head><body >');
mywindow.document.write(content);
mywindow.document.write('</body></html>');

mywindow.document.close();
mywindow.focus();
mywindow.onload = function(){
mywindow.print();
mywindow.close();
}
}
function addWrapperDiv(content,  addEOL = true){
content = '<div class=".trx-slip">' + content + '</div>';
if(addEOL){
    content = content + '<p style="page-break-after: always" />';
}
return content;
}

function getCssPart(){
var links = document.querySelectorAll("link,style");
var link = "";
for(var i =0; i < links.length; i++){
    link += links[i].outerHTML.replace(/@page[^}]+}/gm,'');
}
return link;
}
printAll();

如何讓 canvas 上的圖像也打印出來?

我建議將 canvas 替換為 img。 當 src 等於原始 dataUrl 時,您將把繪圖傳輸到預覽頁面並能夠打印它。

請記住,如果繪圖是原始不干凈的,則 toDataURL 方法可能會引發異常。 https://html.spec.whatwg.org/multipage/canvas.html#dom-canvas-todataurl

在您的 printAll function 中收集容器的克隆並用 img 替換 canvas

var containers = [...document.querySelectorAll(".trx-slip")]
                         .map((el)=>{ 
                            var cl = el.cloneNode(true);
                            var cvs = cl.querySelector(".barcode");
                            var dataUrl = cvs.toDataUrl();
                            var img = document.createElement("img");
                            img.src = dataUrl;
                            // set size?
                            cvs.parentElement.replaceChild(img,cvs);
                            return cl;
                         });

然后繼續您的代碼。

無法使用<canvas>里面的元素<div>元素</div><div id="text_translate"><p>我無法在 &lt;div&gt; 元素中添加 &lt;canvas&gt; animation 。 使用當前代碼,animation 占據整頁,我想將 &lt;canvas&gt; 封裝在 &lt;div&gt; 中,以便 animation 進入單個部分。 類似於 &lt;div&gt;&lt;canvas&gt; &lt;/canvas&gt;&lt;/div&gt;</p><pre> HTML: &lt;canvas&gt;&lt;/canvas&gt; &lt;h2&gt;hi&lt;/h2&gt;</pre><pre> CSS: * { padding: 0; margin: 0; box-sizing: border-box; } body { width: 100%; height: 100vh; font-family: 'Poppins', sans-serif; background-color: #121212; display: flex; align-items: center; justify-content: center; } canvas { width: 100%; height: 100%; position: fixed; top: 0; left: 0; z-index: 0; } h2 { font-size: 80px; color: white; position: relative; }</pre></div></canvas>

[英]Unable to use <canvas> element inside <div> element

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM