我想知道如何创建使用Itext
生成pdf的类,并使用JAX-RS
和@GET
注释使用@Produces
将其发送到网络浏览器
答案 0 :(得分:0)
以下是我的解决方案,简化为适合此处。我在generate
方法中使用JDK 8 lambdas,如果你不能,只需返回一个实现StreamOutput的匿名内部类。
@Path("pdf")
@Produces(ContractResource.APPLICATION_PDF)
public class PdfResource {
public static final String APPLICATION_PDF = "application/pdf";
@GET
@Path("generate")
public StreamingOutput generate() {
return output -> {
try {
generate(output);
} catch (DocumentException e) {
throw new IOException("error generating PDF", e);
}
};
}
private void generate(OutputStream outputStream) throws IOException, DocumentException {
Document document = new Document();
PdfWriter.getInstance(document, outputStream);
document.open();
document.add(new Paragraph("Test"));
document.close();
}
}
答案 1 :(得分:0)
使用JAX-RS和IText 5 Legacy,无需在服务器端存储文件即可在浏览器上提供PDF文件的模拟解决方案。
@Path("download/pdf")
public class MockPdfService{
@GET
@Path("/mockFile")
public Response downloadMockFile() {
try {
// mock document creation
com.itextpdf.text.Document document = new Document();
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
com.itextpdf.text.pdf.PdfWriter.getInstance(document, byteArrayOutputStream);
document.open();
document.add(new Chunk("Sample text"));
document.close();
// mock response
return Response.ok(byteArrayOutputStream.toByteArray(), MediaType.APPLICATION_OCTET_STREAM)
.header("content-disposition", "attachment; filename = mockFile.pdf")
.build();
} catch (DocumentException ignored) {
return Response.serverError().build();
}
}
}