PDFBox:添加文本的字体和位置问题

时间:2014-01-20 20:32:25

标签: pdf fonts

我在现有的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();

2 个答案:

答案 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包围现有内容来重置上下文。