Java - 为 JAX-RS REST 创建 pdf 文件,但响应包含空文件

sol*_*mar 5 java pdf rest

我正在使用 pdfbox 生成一个 pdf 文件,并尝试从 Jersey (jax-rs) REST API 返回它。问题是收到的 pdf 文件是空的。如果我将文件保存在服务器中,则文件正确。也许问题出在流或响应处理中。

我已经尝试解决这个问题很长一段时间了,希望它最终能正常工作。

这是我尝试使用的代码。

@GET
@Path("/generateReport/{name}/{id}")
@Produces("application/pdf")
public Response generateReport(@PathParam("name") String name) {

    PDDocument document = new PDDocument();
    PDPage page = new PDPage();
    PDFont courierBoldFont = PDType1Font.COURIER_BOLD;
    int fontSize = 12;

    PDPageContentStream contentStream;
    ByteArrayOutputStream output = new ByteArrayOutputStream();

    try {
        document.addPage(page);
        contentStream = new PDPageContentStream(document, page);
        contentStream.beginText();
        contentStream.setFont(courierBoldFont, fontSize);
        contentStream.newLineAtOffset(150, 750);
        contentStream.showText("Hello " + name);
        contentStream.endText();
        contentStream.close();
        document.save(output);
        document.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
    Response.ResponseBuilder responseBuilder = Response.ok(output.toByteArray());
    responseBuilder.type("application/pdf");
    responseBuilder.header("Content-Disposition", "filename=test.pdf");
    return responseBuilder.build();
}
Run Code Online (Sandbox Code Playgroud)

如上所述,如果我将文档保存为文件而不是流,则使用下面的代码创建的 pdf 是正确的。

document.save("/Users/solmar/Dev/temp/" + name + ".pdf");
Run Code Online (Sandbox Code Playgroud)