'A HTML representation of this object.'

def to_html(self):

    from calibre.ebooks.metadata import authors_to_string
    from calibre.utils.date import isoformat
    ans = [(_('Title'), unicode(self.title))]
    ans += [(_('Author(s)'), (authors_to_string(self.authors) if self.authors else _('Unknown')))]
    ans += [(_('Publisher'), unicode(self.publisher))]
    ans += [(_('Producer'), unicode(self.book_producer))]
    ans += [(_('Comments'), unicode(self.comments))]
    ans += [('ISBN', unicode(self.isbn))]
    ans += [(_('Tags'), u',    '.join([unicode(t) for t in self.tags]))]
    if self.series:
        ans += [(_('Series'), (unicode(self.series) + ('    #%s' % self.format_series_index())))]
    ans += [(_('Languages'), u',    '.join(self.languages))]
    if (self.timestamp is not None):
        ans += [(_('Timestamp'), unicode(isoformat(self.timestamp, as_utc=False, sep='    ')))]
    if (self.pubdate is not None):
        ans += [(_('Published'), unicode(isoformat(self.pubdate, as_utc=False, sep='    ')))]
    if (self.rights is not None):
        ans += [(_('Rights'), unicode(self.rights))]
    for key in self.custom_field_keys():
        val = self.get(key, None)
        if val:
            (name, val) = self.format_field(key)
            ans += [(name, val)]
    for (i, x) in enumerate(ans):
        ans[i] = (u'<tr><td><b>%s</b></td><td>%s</td></tr>' % x)
    return (u'<table>%s</table>' % u'\n'.join(ans))
