iText 7 - 如何发送到另一端的 API 和 receive/render
iText 7 - How to send to an API and receive/render on the other end
我正在尝试将一个将在内存中创建的 PDF 从一个 API 发送到另一个 API,然后后者将在 HTML 页面中呈现它。我的技术信息:
- Springboot
- 微服务架构(使用 Eureka)
- Java
- 百里香
到目前为止,我拥有的是一个微服务,它从输入字段(通过 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 代码,但这只是一个最小的解决方案。
我正在尝试将一个将在内存中创建的 PDF 从一个 API 发送到另一个 API,然后后者将在 HTML 页面中呈现它。我的技术信息:
- Springboot
- 微服务架构(使用 Eureka)
- Java
- 百里香
到目前为止,我拥有的是一个微服务,它从输入字段(通过 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 代码,但这只是一个最小的解决方案。