0

データベースからドキュメントを生成するために iText 2.1.7 を使用しています。追加する必要があるフィールドの 1 つは、XHTML 形式です。HTMLWorker クラスを使用して HTML を生成できますが、これには少し制限があります。

次のコードを使用して、これを XHTML に変換します。

String url = chapterDesc.getString("description").toString(); // get the HTML string from the database
org.w3c.dom.Document doc = XMLResource.load(new ByteArrayInputStream(url.getBytes())).getDocument();

ITextRenderer renderer = new ITextRenderer();
renderer.setDocument(doc, null);
ByteArrayOutputStream os = new ByteArrayOutputStream();
renderer.layout();
renderer.createPDF(os);

この情報をメモリ内のドキュメントに追加したいと考えています。これは可能ですか?

PdfStamper を使用する必要がありますか? これにはドキュメントを閉じる必要があると思いますか? 可能であれば、複数のパスを使用してこれらの説明を追加することは避けたいと思います。

4

2 に答える 2

0

あなたが尋ねてから2年以上経っていることは知っていますが、私は同じ問題に直面しています. 私は解決策を探しましたが、どこにも見つからないようです。だから私は自分自身を開発しなければならなかったので、それを共有したほうがいいと思いました. それが誰かに役立つことを願っています。

あなたのように空飛ぶ円盤を使おうとしましたが、うまくいきませんでした。私の HTML は単なるテーブルなので、iText HTMLWorker を使用して解析を行うことができました。

最初に、あなたが提案したように PdfStamper を取得します。

PdfReader template = new PdfReader(templateFileName);
PdfStamper editablePage = new PdfStamper(template, reportOutStream);

次に、ドキュメントを操作し (フィールドに入力し、画像を挿入します)、その後、HTML スニペットを挿入する必要があります。

//getting a 'canvas' to add parsed elements
final ColumnText page = new ColumnText(editablePage.getOverContent(pageNumber)); 
//finding out the page sizefinal 
Rectangle pagesize = editablePage.getReader().getPageSize(pageNumber);     
//you can define any size here, that will be where your parsed elements will be added
page.setSimpleColumn(0, 0, pagesize.getWidth(), pagesize.getHeight()); 

シンプルなスタイリングが必要な場合は、HTMLWorker でいくつかのことができます。

StyleSheet styles = new StyleSheet();
styles.loadStyle("h1", "color", "#008080");

//parsing
List<Element> parsedTags = HTMLWorker.parseToList(new StringReader(htmlSnippet), styles); 
for (Element tag : parsedTags)
{       
  page.addElement(tag);
  page.go();
}

これらは、それを行う方法の基本的なアイデアにすぎません。お役に立てば幸いです。

于 2014-04-10T01:57:26.097 に答える
0

空飛ぶ円盤は、2.0.8 以外のバージョンの iText では正しく動作しません。また、メモリ内に pdf を作成するつもりだったので、JSF、JSP、またはサーブレットを使用していますか? ByteArrayOutputStreamもしそうなら、これらのページの1つで、次のようなものを使用して応答として送信できます

response.setContentType("application/pdf");
response.setContentLength(os.size());
os.writeTo(response.getOutputStream());
response.flushBuffer();
于 2011-11-24T23:57:21.123 に答える