我需要帮助才能从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);
}
答案 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);
}
}