Unfortunately, my go-to answer for this is: use Firefox. Chrome does not support print-specific CSS very well. They used to, but things broke a few years ago and it's terrible now. Neither does Edge. My audience is largely Windows business users, so not too much Safari out there. Firefox handles things around repeating headers, page breaks, etc. much better than the other browsers. Sadly, this is very much a browser-specific topic.
As for what I normally do: I have a master layout specifically for print with a logo, no navigation elements, and a body and container div where all the print stuff goes. I have a "no-print" CSS class that I can put on any element I don't want to show up on the print, but I might still need to display even in the print view, such as a print or close button. This class simply hides the element when the media is print. Sometimes I set the print orientation and paper size. Depends on what it is needing to be printed. I also have some page break directives for certain content.