Skip to content

Instantly share code, notes, and snippets.

@andrewlimaza
Created December 19, 2016 11:31
Show Gist options
  • Save andrewlimaza/490a69417d9fe2df3f668195a7661605 to your computer and use it in GitHub Desktop.
Save andrewlimaza/490a69417d9fe2df3f668195a7661605 to your computer and use it in GitHub Desktop.
Print certain div / elements using window.print()
<script>
function printDiv(divName){
var printContents = document.getElementById(divName).innerHTML;
var originalContents = document.body.innerHTML;
document.body.innerHTML = printContents;
window.print();
document.body.innerHTML = originalContents;
}
</script>
<h1> do not print this </h1>
<div id='printMe'>
Print this only
</div>
<button onclick="printDiv('printMe')">Print only the above div</button>
@Vanilagy
Copy link

Here's a proper, modern solution:

export function printElement(element: HTMLElement) {
    const body = document.body
  
    // Store current children of the body in an array
    const originalChildren: Node[] = [...body.children]
  
    // Clone the element to be printed
    const elementClone = element.cloneNode(true) as HTMLElement
  
    // Remove all current children from the body
    while (body.firstChild) {
        body.firstChild.remove()
    }
  
    // Add the cloned element to be printed
    body.append(elementClone)
  
    // Call window.print and revert the state back after printing
    window.print()
  
    // Revert the state back
    while (body.firstChild) {
        (body.firstChild as HTMLElement).remove()
    }
  
    for (const child of originalChildren) body.append(child)
}

By keeping a reference to the nodes that have been temporarily removed from the DOM, they can be added back without an issue: All listeners and references to these nodes are still valid.

@crushman1
Copy link

@Vanilagy not sure how you got this one to work but i get an error Type 'HTMLCollection' must have a '[Symbol.iterator]()' method that returns an iterator at [...body.children] and when i run the function i get element.cloneNode is not a function in the inspector console

@VidhyaPandiyan46
Copy link

Hi This is vidhya we are trying to print price tag for the product from browser application. Not able to get the desired format while doing it from browser but it is possible from desktop application. Tried with PNR file format, and PDF File format still not getting the desired alignment.
here is the PNR file format

I8,A
q540
O
JF
WN
ZT
Q80,25
N
A343,53,2,2,1,1,N,"Wt:"
B520,80,2,1C,1,2,30,N,"BFAY00037"
A510,45,2,2,1,1,N,"BFAY00037"
A303,53,2,2,1,1,N,"10.000 Gms"
P1
A343,53,2,2,1,1,N,"Wt:"
B520,80,2,1C,1,2,30,N,"BFAY00038"
A510,45,2,2,1,1,N,"BFAY00038"
A303,53,2,2,1,1,N,"10.000 Gms"
P1
A343,53,2,2,1,1,N,"Wt:"
B520,80,2,1C,1,2,30,N,"OG00012"
A510,45,2,2,1,1,N,"OG00012"
A303,53,2,2,1,1,N,"10.000 Gms"
P1
A343,53,2,2,1,1,N,"Wt:"
B520,80,2,1C,1,2,30,N,"SK00001"
A510,45,2,2,1,1,N,"SK00001"
A303,53,2,2,1,1,N,"35.000 Gms"
P1
A343,53,2,2,1,1,N,"Wt:"
B520,80,2,1C,1,2,30,N,"OS00001"
A510,45,2,2,1,1,N,"OS00001"
A303,53,2,2,1,1,N,"20.000 Gms"
P1
A343,53,2,2,1,1,N,"Wt:"
B520,80,2,1C,1,2,30,N,"FK00025"
A510,45,2,2,1,1,N,"FK00025"
A303,53,2,2,1,1,N,"10.000 Gms"
P1
A343,53,2,2,1,1,N,"Wt:"
B520,80,2,1C,1,2,30,N,"MOS00001"
A510,45,2,2,1,1,N,"MOS00001"
A303,53,2,2,1,1,N,"9.000 Gms"
P1
A343,53,2,2,1,1,N,"Wt:"
B520,80,2,1C,1,2,30,N,"MOS00002"
A510,45,2,2,1,1,N,"MOS00002"
A303,53,2,2,1,1,N,"15.000 Gms"
P1
A343,53,2,2,1,1,N,"Wt:"
B520,80,2,1C,1,2,30,N,"MOS00003"
A510,45,2,2,1,1,N,"MOS00003"
A303,53,2,2,1,1,N,"19.000 Gms"
P1
A343,53,2,2,1,1,N,"Wt:"
B520,80,2,1C,1,2,30,N,"MOS00004"
A510,45,2,2,1,1,N,"MOS00004"
A303,53,2,2,1,1,N,"40.000 Gms"
P1
A343,53,2,2,1,1,N,"Wt:"
B517,60,2,1C,1,2,30,N,"000000"
A500,24,2,2,1,1,N,"000000"
A303,53,2,2,1,1,N,"0.000"
P1
Printer URL --- https://www.tvs-e.in/label-printers/lp-46-lite/-;.- What should be done to get the desired alignment would be a great help. Thank you in advanced

@azeenGAN
Copy link

Use NPM react-to-print
It will print your desired format, any tag you like with your custom alignments.
https://www.npmjs.com/package/react-to-print
If you want example code it can provide you with that

@VidhyaBascaran
Copy link

@azeenGAN Thank you so much. I still can't get the desired alignment, is there any other options to do?

@SEENIVASANIT
Copy link

I set @page size 2in,3in but is only work chrome not other? If any idea?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment