Para comprimir y manejar zips, utiliza cualquier class, por ejemplo estas:
http://www.phpclasses.org/search.htm...=0&go_search=1. El resto depende mucho de la lógica de tu aplicación. Primero revisa estas clases para ver las posibilidades, luego sigues adelante. En principio es tal como tú lo mencionas, leer de la DB, generar el HTML, guardarlo, comprimirlo, descargar o enviar por email. Espero te sirva, salu2