iText 7 - 如何发送到另一端的 API 和 receive/render

iText 7 - How to send to an API and receive/render on the other end

我正在尝试将一个将在内存中创建的 PDF 从一个 API 发送到另一个 API,然后后者将在 HTML 页面中呈现它。我的技术信息:

到目前为止,我拥有的是一个微服务,它从输入字段(通过 API)接收字符串输入,然后我在这里得到它,我相信我在内存中准备了一个 pdf(还没有尚未测试):

    public InputStream convert(String input) throws FileNotFoundException {

    ByteArrayOutputStream out = new ByteArrayOutputStream();
    PdfWriter writer = new PdfWriter(out);
    PdfDocument pdf = new PdfDocument(writer);
    Document document = new Document(pdf);
    document.add(new Paragraph(input));
    document.close();

    return new ByteArrayInputStream(out.toByteArray());
}

这是我目前的发送控制器:

    @RequestMapping("/cnv")
public InputStream doConversion(@RequestParam(defaultValue = "0") String input) {
    try {
        return textToPDFService.c2f(input);
    } catch (FileNotFoundException e) {
        throw new RuntimeException("Exception thrown while writing file: " + e);
    }

}

我还没有任何代码可以显示用于接收它的 Web 服务器,但是你可以期待,因为这是 Springboot,我将在 @Controller 中有一个相关的端点和一个方法与我的 @Service.

类型的微服务通信

问题是,我如何在我的 Web 服务器服务的 InputStream 中接收它并呈现它?也欢迎提供有用的资源。

PS:我之前没有用过iText,在此之前没有用过Springboot和微服务。另外,从来没有关于 PDF 的要求(是的,我知道我是个大菜鸟)。

看来我得到了答案。确保你 return 在执行转换的控制器中 byte[] 甚至更好 ResponseEntity<byte[]>。然后,您应该像这样将 headers 添加到您的请求中:

 return ResponseEntity.ok()
                .header(headerKey, headerValue)
                .contentType(MediaType.APPLICATION_PDF)
                .body(res);

在您的接收微服务上,您需要一个服务来执行以下操作:

// Setup Headers & URL
String url = blah blah..;
HttpHeaders headers = new HttpHeaders();
headers.setAccept(Collections.singletonList(MediaType.APPLICATION_PDF));
HttpEntity<String> entity = new HttpEntity<>("body", headers);
// Get Result from Microservice
return restTemplate.exchange(url, HttpMethod.GET, entity, byte[].class, input);

当然会return给你这个ResponseEntity<byte[]>。您只需将其传递给控制器​​端点即可完成:

return textToPDFService.textToPDFRequest(input);

请记住,您应该注意异常和 HTTP 代码,但这只是一个最小的解决方案。