0

XSL テンプレートから既に変換されている PDF の表とヘッダーの間のスペースを増やす必要がある状況があります。新しく作成したスペースに住所を挿入する必要があります。この部分は簡単で、スタンパーと新しいテーブルを使用して行うことができます。

ただし、グリッドを下に移動してスペースを作るための解決策を見つけるのに苦労しています。

基本的に、FOP を使用して、次のようなコードを使用して XSL テンプレートから PDF を作成しています。

OutputStream out = new java.io.FileOutputStream(pdf);
Driver driver = new Driver();
driver.setRenderer(Driver.RENDER_PDF);
driver.setOutputStream(out);
TransformerFactory factory = TransformerFactory.newInstance();
Transformer transformer = factory.newTransformer(new StreamSource(xsl));
StringReader xmlStream = new StringReader(xmlData);
Source xmlSource = new StreamSource(xmlStream);
Result res = new SAXResult(driver.getContentHandler());
transformer.transform(xmlSource, res);

新しいスペースを追加する方法で PDF にアクセスすることさえ可能ですか? もしそうなら、私の選択肢は何ですか?変換が行われている時点では、追加のスペースが必要になるかどうかはわかりません。PDFのページ数を取得して初めて、必要になることがわかります。

どんな助けでも大歓迎です!

4

2 に答える 2

0

「新しいスペース」自体を追加することはできませんが、ページ上のオブジェクトの座標を取得して、そのオブジェクトを別の場所に再描画することは可能です。残念ながら、迅速で簡単な解決策はなく、これを行うにはサードパーティの SDK が必要になります。

PDF はワード プロセッサ形式ではないため、MS Word の場合のように単純に改行を 2 つ追加することはできません。

iTextを試してみてください。これは Java で書かれており、PDF を操作するための十分な機能を備えています。

于 2009-08-25T22:40:33.820 に答える
0

PDFがすでに生成されていると、変換されたオブジェクトを移動することは(少なくとも私が試して読んだすべてのものから)不可能なようです。

私はすでに iText と PdfStamper クラスを使用していたので、新しいページを挿入し、現在の住所情報を含む新しいテーブルを挿入することができました。私は次のコードでこれを行いました:

//add new page
PdfStamper stamper = new PdfStamper(reader,new FileOutputStream(file);
stamper.insertPage(pageNumber,reader.getPageSizeWithRotation(1));

//add new table with data
BaseFont base = BaseFont.createFont(BaseFont.HELVETICA,"",BaseFont.NOT_EMBEDDED);
over.setFontAndSize(base,fontSize);
PdfPTable table = new PdfPTable(1);
table.getDefaultCell().setBorder(Rectangle.NO_BORDER);
table.addCell(data);
table.setTotalWidth(150f);
table.writeSelectedRows(0, -1, 73, 650, over);

これは、他の人が同じ問題でハングアップした場合に備えて共有すると思っていた実行可能な解決策による私の質問への答えではありません。

于 2009-08-26T19:33:20.313 に答える