3

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);
    }
4

2 回答 2

2

你需要:

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

更新每一行的文本位置。可以把它想象成绘制到图形上下文。

如果你想要 "" 的空行 - 条目然后删除循环中的第一行。

于 2013-07-04T15:09:25.937 回答
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);
    }
    }

在此处输入图像描述

于 2019-08-16T06:30:00.290 回答