我必须在现有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();
答案 0 :(得分: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
怎么办?也许你正在添加不可见的内容,因为它被裁掉了......