使用PDFBox生成的PDF是空白的

我正在尝试将内容写入PDF文件。 我写了代码

public ByteArrayOutputStream createPDF(String text) throws IOException, COSVisitorException { PDDocument document; PDPage page; PDFont font1; PDPageContentStream contentStream; ByteArrayOutputStream output = new ByteArrayOutputStream(); document = new PDDocument(); try { page = new PDPage(); document.addPage(page); contentStream = new PDPageContentStream(document, page); contentStream.beginText(); contentStream.moveTextPositionByAmount( 100, 700 ); contentStream.drawString("Hello World Hello World Hello World Hello World Hello World"); contentStream.endText(); System.out.println("output " + output); document.save(output); document.close(); contentStream.close(); } catch (Exception e) { e.printStackTrace(); } finally { logInfo("output completed"); } return output; } 

生成的PDF文件为空。 该文件的内容是:

 %▒▒▒▒ 1 0 obj <> endobj 2 0 obj <> endobj 3 0 obj <> endobj 4 0 obj <> stream x▒ endstream endobj 5 0 obj <> endobj 6 0 obj 8 endobj xref 0 7 0000000000 65535 f 0000000015 00000 n 0000000078 00000 n 0000000135 00000 n 0000000247 00000 n 0000000333 00000 n 0000000354 00000 n trailer << /Root 1 0 R /ID [ ] /Size 7 >> startxref 371 %%EOF 

你犯了两个错误:

  1. 保存文档后,您已关闭contentStream而不是之前。

  2. 您还没有设置字体。

适用于我的代码(删除了exception处理):

 PDDocument document; PDPage page; PDPageContentStream contentStream; document = new PDDocument(); page = new PDPage(); document.addPage(page); contentStream = new PDPageContentStream(document, page); contentStream.setFont(PDType1Font.COURIER, 10); contentStream.beginText(); contentStream.moveTextPositionByAmount(100, 700); contentStream.drawString("Hello World Hello World Hello World Hello World Hello World"); contentStream.endText(); contentStream.close(); document.save(....); document.close();