使用JAVA中的pdfbox </string>从ArrayList <string>创建pdf文件

时间:2013-07-04 14:23:23

标签: java pdf pdfbox

我需要帮助才能从ArrayList字符串创建PDF文件 我试图解决这个问题很长时间但我没有成功,有人可以帮助我吗?

我不知道还有什么要写在这里我认为标题说明了一切。那么有人有同样的问题或知道如何创建PDF文件?

parsedText是我从另一个PDF文件中提取的孔文本。

代码:

    String[] splitText = parsedText.split("\\."); 
    newList = new ArrayList<String>(Arrays.asList(splitText));


    PDDocument doc = null;
    PDPage page = null;
    try{
        doc = new PDDocument();
        page = new PDPage();

        doc.addPage(page);
        PDFont font = PDType1Font.HELVETICA;
        PDPageContentStream content = new PDPageContentStream(doc,page);

        content.beginText();
        content.setFont(font, 12);
        content.moveTextPositionByAmount(100, 700);
        String text = "";
        for(int i=0; i<newList.size();i++)
        {
            if(sentence.isEmpty()) continue;
            content.drawString(newList.get(i) + "\n");

        }

        content.endText();
        content.close();
        doc.save("nameoffile.pdf");
        doc.close();
        System.out.print("Pages" + pdDoc.getNumberOfPages());

    }catch(Exception e){
        System.out.println(e);
    }

2 个答案:

答案 0 :(得分:2)

你需要:

for(int i=0; i<newList.size();i++)
{
    if(sentence.isEmpty()) continue;
    content.drawString(newList.get(i));
    content.moveTextPositionByAmount(0, LINE_HEIGHT);
}  

更新每行的文本位置。想想它有点像绘制图形上下文。

如果你想为“” - 条目留空行,那么就把第一行放在循环中。

答案 1 :(得分:0)

这是一个古老的问题和答案,由于Apache PdfBox API的多种方法已被弃用,因此我通过修改您的代码来提出新的答案。

首先,您不需要newList = new ArrayList<String>(Arrays.asList(splitText));行,因为您可以直接在String[]上工作。

代码中的第二个问题是您正在使用\n创建新行,并且在创建pdf时不起作用。您所有的句子都将打印在一行中。您必须将文本指针明确定位到下一行。

我已将硬编码内容放入String[] splitText中。我的线宽为20点。

附带的是生成的pdf文件的图像。

public static void createPdf() {
    String[] splitText = new String[] { "Line 1", "Line 2", "", "Line 3 " };
    try (PDDocument doc = new PDDocument();) {
        PDPage page = new PDPage();
        doc.addPage(page);
        PDFont font = PDType1Font.HELVETICA;
        PDPageContentStream content = new PDPageContentStream(doc, page);
        content.setFont(font, 12);
        int lines = 1;
        for (String sentence : splitText) {
        if (sentence.isEmpty()) {
            continue;
        }
        content.beginText();
        content.newLineAtOffset(100, 700 - 20f * lines);
        content.showText(sentence);
        content.endText();
        ++lines;
        }
        content.close();
        doc.save("nameoffile.pdf");
        System.out.print("Pages" + doc.getNumberOfPages());
    } catch (Exception e) {
        System.out.println(e);
    }
    }

enter image description here