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()(很奇怪,这不会抛出 a 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 回答