0

既存の A4 pdf の固定位置に数字を挿入する必要があります。最初のテストとして次のことを試しましたが、うまくいきません(テキストは追加されません)。何がうまくいかないのですか?これが私のコードです:

byte[] omrMarks = omrFrame.getOmrImage();
Jpeg img = new Jpeg(omrMarks);
PdfImportedPage page = stamper.getImportedPage(source, pageNum);
PdfContentByte pageContent = stamper.getOverContent(pageNum);

pageContent.addImage(
  img, img.getWidth(), 0, 0, img.getHeight(), 15f, (page.getHeight() - 312));
pageContent.moveTo(10, 200);
pageContent.beginText();
pageContent.setLiteral("Test");
pageContent.endText();
4

1 に答える 1

3

この質問には多くの問題があります。

これは確かに間違っています:

pageContent.moveTo(10, 200);
pageContent.beginText();
pageContent.setLiteral("Test");
pageContent.endText();
  • このmoveTo()方法は意味がありません。テキスト状態オブジェクトには影響しません。
  • がないため、テキスト状態オブジェクトは不正ですsetFontAndSize()(これが をスローしないのは非常に奇妙RuntimeExceptionです。古いバージョンの iText を使用していますか?)
  • このsetLiteral()メソッドは、一部のリテラル PDF 構文をコンテンツ ストリームに追加する場合にのみ使用してください。

たとえば、次のようなものです。

pageContent.setLiteral("\n100 100 m\n100 200 l\nS\n");

次の PDF 構文が一線を画していることを理解している場合にのみ使用してください。

100 100 m
100 200 l
S

あなたの質問から、PDF 構文を理解していないことは明らかなので、これらのメソッドを使用しないでください。showTextAligned()代わりに、 PDF の複雑さを隠して数行を節約するメソッドなどの便利なメソッドを使用する必要があります。

setLiteral()「難しい方法」を選択する正当な理由があるかもしれませんがshowText()、その場合はドキュメントを読む必要があります。雇用主に見られたくありません。moveTo()moveText()

さらに、ページの左下隅の座標が であると仮定しています(0,0)。これは、実際に出回っている PDF 文書の大部分にはおそらく当てはまりますが、すべての PDF 文書に当てはまるわけではありません。であるMediaBox必要はありませ[0 0 595 842][595 842 1190 1684]。さらに: ? がある場合はどうなりCropBoxますか? トリミングされて表示されないコンテンツを追加している可能性があります...

于 2013-01-30T09:43:58.790 に答える