As far as I know (and I could be wrong), you can make a link that says "Print Envelopes", but when the user clicked that link, it wouldn't start printing, it would only prompt them with a popup window where they would have to push print and the number of copies they wanted. It's the same as going File > Print.
If you want to know how to do that, you can do it using javascript by including
<script>
function printWindow(){
bV = parseInt(navigator.appVersion)
if (bV >= 4) window.print()
}
</script>
between your <head> </head> tags and then where you actually want the links in the page
<a href="javascript:printWindow()">Print Envelopes</a>
But this wouldn't solve your problem of printing only one of each envelope. This would only print one envelope 20 times.
The only thing I could think of (which would be kind of a pain in the ass to do) is when you display your html and order your tables so it prints right on the envelope, space out each envelope the spacing of one page so that by printing one copy, you're still printing all 20 envelopes but they're spaced out enough where on each seperate envelope entry found in the browser the printer has to grab a new envelope. Hopefully that makes sense. I'd be interested in hearing how other people might go about this.
Cgraz