java - iText 7 - 如何发送到 API 并在另一端接收/呈现

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

  • 弹簧靴
  • Microservices 架构(使用 Eureka)
  • Java
  • Thymeleaf

到目前为止,我所拥有的是一个微服务,它从输入字段(通过 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 中拥有一个相关的端点,以及一个与我的类型为 < 的微服务通信的方法w182>。

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

PS:在此之前我从未使用过 iText、Springboot 或 microservices。此外,从来没有关于 PDF 的要求(是的,我知道我是个大菜鸟)。

回答1

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

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);

当然,这将返回给你这个ResponseEntity<byte[]>。您可以将其传递给控制器端点,然后您就完成了:

return textToPDFService.textToPDFRequest(input);

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

相似文章

随机推荐

最新文章