我在现有的PDF中添加了新文本,但字体和位置相反。测试代码的位置应为100,500。但它显示在10,50左右,字体非常小而不是12。
我用iText Rup检查了pdf的内部结构,发现pdf的mediabox有(0,0,612,792)。但是,现有的流显示非常奇怪的坐标,例如:
0.12 0 0 0.12 0 0 cm
BT
/F1 70 Tf
0 6600 Td
3001 -6274 Td
0 Tw
(© All rights reserved.) Tj
ET
BT
/F1 70 Tf
0 6600 Td
2365 -6274 Td
0 Tw
(Page 1 of 4) Tj
ET
BT
/F1 70 Tf
0 6600 Td
180 -6274 Td
0 Tw
看起来流中的字体大小是70,而不是这种情况(字体大小应该在7左右)。而像6600这样的坐标远远超出了媒体盒。我猜这可能是新添加的文本显示在错误的位置和较小的字体的原因。
您是否知道是否有办法调整字体大小和位置,以便它们显示在正确的位置和字体大小?
非常感谢任何帮助。
以下是测试代码:
PDDocument document = PDDocument.load(new File(file));
PDFont font = PDType1Font.HELVETICA_BOLD;
List<PDPage> pages = document.getDocumentCatalog().getAllPages();
PDPage page = pages.get(0);
PDPageContentStream contentStream = new PDPageContentStream(document, page, true, false);
contentStream.setFont( font, 12);
contentStream.beginText();
contentStream.moveTextPositionByAmount(100, 500);
contentStream.drawString("hello, this is a test" );
contentStream.endText();
contentStream.close();
document.save( "c:/temp/test.pdf");
document.close();
答案 0 :(得分:1)
检查您最喜欢的PDF参考。第一行,
0.12 0 0 0.12 0 0 cm
以12 / 100th的比例为页面的其余部分设置基本转换矩阵。在这个规模上,缩放的字体大小为“70”,出现在8.4分。要获得12pt大小的文本,请使用12 / 0.12 = 100(缩放单位,而不是“实际点数”)。对你的位置坐标做同样的事。
答案 1 :(得分:0)
创建内容流时,应使用以下构造函数,并将resetContext设置为&#34; true&#34;:
public PDPageContentStream(PDDocument document, PDPage sourcePage, boolean appendContent, boolean compress, boolean resetContext) throws IOException
这将通过用q和Q包围现有内容来重置上下文。