私はITextの専門家ではありませんが、先週私はそれでいくつかの円を描こうとしました。だから、これは私が私のテスト中に気づいているものです:
あなたはグラフィックスを描画する場合は、(または私はそれをしようと試みたときに私がしなければならないと言うことができます)しなければならない部分でのグラフィックスコマンドがsaveState()
で始まり、終わる「ラップ」 restoreState()
で、私はfillStroke()
を呼び出す必要がありました。私がfillStroke()
を呼び出さなかった場合、何も描画されませんでした。
例
private void circle(float x, float y, PdfWriter writer) {
PdfContentByte canvas = writer.getDirectContent();
canvas.saveState();
canvas.setColorStroke(GrayColor.BLACK);
canvas.setColorFill(GrayColor.BLACK);
canvas.circle(x, y, 2);
canvas.fillStroke();
canvas.restoreState();
}
@Test
public void testPossition() throws DocumentException, IOException {
OutputStream outputStream = FileUtil.openOutputStream("testPosition.pdf");
//this is my personal file util, but it does not anything more
//then creating a file and opening the file stream.
Document document = new Document(PageSize.A4, 50, 50, 50, 50);
PdfWriter writer = PdfWriter.getInstance(document, outputStream);
document.open();
markPosition(100, 100, writer);
document.add(new Paragraph("Total: 595 x 842 -- 72pt (1 inch)"));
document.close();
outputStream.flush();
outputStream.close();
}
private void markPosition(float x, float y, PdfWriter writer)
throws DocumentException, IOException {
placeChunck("x: " + x + " y: " + y, x, y, writer);
circle(x, y, writer);
}
private void placeChunck(String text, float x, float y, PdfWriter writer)
throws DocumentException, IOException {
PdfContentByte canvas = writer.getDirectContent();
BaseFont font = BaseFont.createFont(BaseFont.HELVETICA,
BaseFont.CP1252, BaseFont.NOT_EMBEDDED);
canvas.saveState();
canvas.beginText();
canvas.moveText(x, y);
canvas.setFontAndSize(font, 9);
canvas.showText(text);
canvas.endText();
canvas.restoreState();
}
しかしPdfContentByte
(キャンバス)は、例えばrectangle
ため、より多くの機能を有しています。
(つまりはずっと前に、長いの世話を得ているだろうバグの一種です)文書に段落を追加すると、これにどんな違いがあることを想像することはできませんグラフィックを追加する前に文書を最初に修正してください。それが彼が私に言うことを試みていたかもしれないので、Stykenの正しいことをマークするつもり。誰かがこれを説明したいと思ったら私は賞金を授与するでしょう。 – jimdrang
ok - 完全な説明 –