java - 如何在方法之间保存数据
问题描述
我有一个控制器,可以从 pdf(pdfBox) 创建许多图像。我将所有图片保存到 List 。 当我按下按钮时,我需要为每个视图发送一张照片。或输入值
public class Pdf{
public byte[] PDFCREATE(){
byte[] pdf = ...;
//Code for creating pdf using Itext
return pdf;
}
}
public List<byte[]> getImage(byte[] pdf) throws Exception{
ByteArrayOutputStream baos = new ByteArrayOutputStream();
List<byte> listImg = new List()<>;
try (final PDDocument document = PDDocument.load(file)){
PDFRenderer pdfRenderer = new PDFRenderer(document);
for (int page = 0; page < document.getNumberOfPages(); ++page)
{
BufferedImage bim = pdfRenderer.renderImage(page)
ImageIO.write(bim, "png",baos);
listImg.add(baos)
}
document.close();
} catch (IOException e){
System.err.println("Exception while trying to create pdf document - " + e);
}
return baos.toByteArray();
鉴于我发布:
public ResponseEntity<?> CreateFont(int pictureNumber ) {
PDF pdf= new PDF();
PdfToImg pdfToImg = new PdfToImg();
List<byte []> fileBytes = pdfToImg.getImage(pdf.PDFCREATE());
byte[] encoded= Base64.encodeBase64(fileBytes.get(pictureNumber ));
String encodedString = new String(encoded);
return new ResponseEntity<String>(
"<img src='data:image/jpeg;base64," + encodedString + "' alt='' width='420' height='580'>",
HttpStatus.OK);
但是在这里我每次都必须创建pdf。是否可以仅将 getImage 中的值保存到列表中?当用户输入值(pictureNumber)或每次按下按钮时不创建新的 pdf。取而代之的是从列表中获取值。并在刷新页面后创建新列表,我需要将列表文件字节存储在某个地方,但是在哪里?
对不起我的英语不好
解决方案
这可能会帮助您:
private static Map<Integer, String> pictureMap = new HashMap<>();
private static PDF pdf;
public ResponseEntity<?> CreateFont(int pictureNumber) {
if(pictureMap.containsKey(pictureNumber))
return response(pictureMap.get(pictureNumber));
if(pdf == null)
pdf = new PDF();
PdfToImg pdfToImg = new PdfToImg();
List<byte[]> fileBytes = pdfToImg.getImage(pdf.PDFCREATE());
byte[] encoded = Base64.encodeBase64(fileBytes.get(pictureNumber));
String encodedString = new String(encoded);
pictureMap.put(pictureNumber, encodedString);
return response(encodedString);
}
private ResponseEntity response(String encodedString){
return new ResponseEntity<String>(
"<img src='data:image/jpeg;base64," + encodedString + "' alt='' width='420' height='580'>",
HttpStatus.OK);
}
推荐阅读
- r - 根据尖端标签着色的节点和尖端标签的系统发育比较
- oracle - 如何在提交页面前在选择列表中进行选择后清除文本框?
- javascript - 节点 - 如何从一个单词中删除 x 个字母
- javascript - Javascript总结对象中的不同值
- bison - 来自 sourceforge.net 的 win_bison.exe 是否恶意
- c# - 如何在 Json API 响应中删除值为 0 的字段
- php - Laravel 在邮件刀片文件外使用 $message->embed($image)
- mysql - 如何在 MySQL 5.7 中实现类似于“SKIP LOCKED”的功能?
- ruby-on-rails - 以最佳方式将字符串数组值转换为哈希
- docusignapi - 如何使用docusign api在php现有网站中集成docusign电子签名功能