Since HTML is a formatting language, not a layout language, you won't get perfect results.
For basics, though, I'd recommend Image::Magick. It requires installation of ImageMagick (see www.imagemagick.org), ghostscript, and a whole bunch of other subsidiary programs, but you can transform HTML into pretty much any kind of image you want. Plus, you'll find it handy in resizing those images.
You might also want to check out HTML::FormatPS.
<code> <a> <b> <big> <blockquote> <br /> <dd> <dl> <dt> <em> <font> <h1> <h2> <h3> <h4> <h5> <h6> <hr /> <i> <li> <nbsp> <ol> <p> <small> <strike> <strong> <sub> <sup> <table> <td> <th> <tr> <tt> <u> <ul>