私は iText を初めて使用するので、XMLWorkerHelper クラスがどのように機能するのかわかりません。HTMLドキュメントを含む文字列を取得し、HTMLをPDFドキュメントに変換し、PDFをバイト配列として返すメソッドを作成しようとしています。誰かが次のコードの間違いを指摘できれば、本当に感謝しています。
Document document = new Document();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
PdfWriter pdfWriter = PdfWriter.getInstance(document, baos);
document.open();
StringReader stringReader = new StringReader(articleString);
StringWriter stringWriter = new StringWriter();<br/>
Tidy tidy = new Tidy();
tidy.setXHTML(true);
tidy.parse(stringReader, stringWriter);
System.out.println("Before XMLWorkerHelper");
XMLWorkerHelper xwh = XMLWorkerHelper.getInstance();
xwh.parseXHtml(pdfWriter, document, new StringReader(stringWriter.toString()));
System.out.println("After XMLWorkerHelper");
document.close();
stringReader.close();
result = baos.toByteArray();
私が使用しているコードは上記です。html コードは変数 articleString にあります。重要な部分は、2 つの System.out.println ステートメントの間です。これは Web アプリケーションの一部であり、System.out はエラーまたは例外メッセージと共にサーバー ログに書き込みますが、2 つの println ステートメントの間でアプリケーションが例外をスローせずに終了したように見えます。したがって、「Before XMLWorkerHelper」という行は出力されますが、「After XMLWorkerHelper」という行は出力されません。
私が使用しているjarファイルは、itextpdf-5.4.0.jar、itext-pdfa-5.4.0.jar、itext-xtra-5.4.0.jar、xmlworker-5.4.0.jarです。
私が変換しようとしているhtmlファイルは単に「テスター記事」であり、jTidyによって変換されています
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
</head>
<body>
Tester Article
</body>
</html>
XMLWorkerHelper コードの代わりに iText 5.0 jar の古い HTMLWorker クラスを使用してみましたが、すべてうまくいきました。上記の XMLWorkerHelper 行の代わりに使用した HTMLWorker コードは次のとおりです。
HTMLWorker htmlWorker = new HTMLWorker(document);
htmlWorker.parse(new StringReader(stringWriter.toString()));