Use TagSoup before passing the broken HTML to iText. It will clean up the broken HTML and return valid X(HT)ML.
TagSoup implements the SAX parser interface. There are some examples on how to use it, but it lacks some "real" documentation.
Probably you will have to serialize the XML again and dump it to a file to feed it to iText, I don't know its interface.
Serializing a SAX stream is possible using XMLWriter. By chance it is already included with TagSoup, so you don't need to add an extra dependency.
final Parser parser = new Parser();
final StringWriter writer = new StringWriter();
parser.setContentHandler(new XMLWriter(writer));
parser.parse(new InputSource(
new URL("http://oregonstate.edu/instruct/phl302/texts/hobbes/leviathan-c.html")
.openConnection().getInputStream()));
System.out.println(writer.toString());
Decide based on iText's API whether to dump writer
's output to a file or pass it another way.