Ok first of all if you need any croos over of the traffic (and you will if you want to use the same internet connection and same printserver) you will need at least one router.
however as this is the only place that traffic can move between vlans it is qquite stright forward to limit how the traffic moves.
I would suggest you set up a seperate network for the printserver, which each of the seperate networks can then connect in to. You would also sit the central dhcp server up on this "service network" and as ngravatt suggested use DHCP helpers so that each VLAN can use the single dhpc server.
This is very simple to do you simple create a pool of addresses for each of the networks.
each VLAN has a port on the router connected to i and this port is assigend the address that will act as the default gate way. This port is also told the IP address of the dhcp server.
When a device in the vlan sends out a dhcp request this port will pick it up (DHCP are broadcast) tag it with its own network details and forward it to the DHCP server. this will replay with a vaild address if one of its address pools match the details of the network details.
You relly need a fire wall to control the access between vlans, although you can do ti with access lists.
so say you have 4 vlans
VLAN a = company A
VALN B = comapny B
VLAN c = comapny C
VLAN D = service netwrok (DHCP/DNS/Printer)
your rules would be
A, B and C can't directly talk to each other, no routing takes place
A, B or C can talk to VLAN D but only with requests for DHCP, DNS, and print requests.
VLAN D can't talk to any one only respond to requests (so it can be ues to jump between vlans)
now each VLAN is secure from each other but can use central managed services.