2

私は 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()));
4

1 に答える 1

0

これがすでに解決されていることを願っています。
そうでない場合は、コードを削除してみてください。それでも解決しない場合は、stringWriter.toString() を InputStream に入れてから、stringWriter.toString() の代わりに parseXHtml で代わりにストリームを使用してみてください。

入力ストリーム

InputStream stream = new ByteArrayInputStream(stringWriter.toString().getBytes("UTF-8"));

XMLWorkerHelper:

XMLWorkerHelper.getInstance().parseXHtml(pdfWriter, document, stream);

これがあなた、またはこれを表示するのと同じ問題を抱えている人の助けになることを願っています

于 2013-09-16T06:27:49.477 に答える