PDFBox重叠文本

时间:2017-10-31 10:46:29

标签: android text pdf-generation pdfbox

我已经实现了一种算法,可以使用适用于Android的PDFBox库在页面上绘制文本。问题是每当我添加一个新页面时,文本重叠,如下图所示。我确信我使用的是PDPageContentStream.newLine()方法,但结果并不像预期的那样。 我错过了其他什么吗?enter image description here

这是我的代码段

PDPage page1 = new PDPage();
getInstance().getAnnexe().addPage(page1);
PDPageContentStream contentStream1 = new 
PDPageContentStream(getInstance().getAnnexe(), page1, true, true);
contentStream1.beginText();
contentStream1.newLineAtOffset(100F, 650F);
contentStream1.setFont(font, fontSize);
printMultipleLines(subSet, contentStream1);
contentStream1.endText();
contentStream1.close();

这是printMultipleLines()方法

private void printMultipleLines(ArrayList<String> lines, PDPageContentStream contentStream) {
    try {
        for (String line :
                lines) {
            if (line.length() > 110) {
                // Print line as 2 lines
                contentStream.showText(line.substring(0, 90));
                contentStream.newLine();
                contentStream.showText(line.substring(90, line.length()));
            } else
                // Print line as a whole
                contentStream.showText(line);
            // Print Carriage Return
            contentStream.newLine();
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
}

1 个答案:

答案 0 :(得分:1)

感谢@TilmanHausherr,问题在于TL运营商。每个新创建的页面的TL等于零用户默认单位。我只需要设置Text Leading偏移量。 这是更新的代码:

PDPage page1 = new PDPage();
getInstance().getAnnexe().addPage(page1);
PDPageContentStream contentStream1 = new 
PDPageContentStream(getInstance().getAnnexe(), page1, true, true);
// Set the Text Leading (TL operator) here!!!!
contentStream1.setLeading(12);
contentStream1.beginText();
contentStream1.newLineAtOffset(100F, 650F);
contentStream1.setFont(font, fontSize);
printMultipleLines(subSet, contentStream1);
contentStream1.endText();
contentStream1.close();

所有感谢和归功于@ T​​ilmanHausherr的快速而准确的答案。