I'm not quite sure what the problem is, so you might need to explain it more or give us a link to a live page. But, a few thoughts...
You can't rely on people having any particular page margins on their printers. Different browsers will have different defaults. Different printers can give different defaults. Some people change the default themselves. So, just like designing for the screen, when designing for print you should allow some flex in the layout.
Yes, all browsers should render elements that are set in physical measurements (cm, pt, in) at the same size - assuming they can fit them on the page.
In terms of the width, I think the best thing to do is to set the width of the table to 100%, and the width of each column to 33% - that will ensure that the table always scales to the available space. You could also put a max-width on of (for example) 18cm, which would ensure at least a 1.5cm margin on both sides (assuming you centre it).
If you want the tables at the top, middle and bottom of the page then your best bet is to absolutely position them. For the first table,
position:absolute; top:0;. For the third table,
position:absolute; bottom:0;. So far, so funky. Unfortunately, the middle table is not quite so easy, because absolute positioning doesn't allow you to centre an element vertically within its parent. So what I would do is something along the lines of
position:absolute; top:50%; margin-top:-5em;, where the margin-top is negative, and equal to (roughly) half the height of the table. It will be difficult to get this point-perfect, but I doubt anyone will measure the output with a ruler to find out why the gaps are a few millimetres different. (To find the height of the actual table in ems, you'll just have to do a bit of experimenting).