Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过电子邮件发送Java中AbstractPdfView的PDF_Java_Spring_Email_Pdf_Itext - Fatal编程技术网

通过电子邮件发送Java中AbstractPdfView的PDF

通过电子邮件发送Java中AbstractPdfView的PDF,java,spring,email,pdf,itext,Java,Spring,Email,Pdf,Itext,我使用AbstractPdfView类生成pdf并在浏览器中下载,但我还需要通过电子邮件发送。我知道解决办法是显而易见的,但我已经被困在这个问题上一天了,看不到它。以下是我迄今为止的情况: @GetMapping() public PdfView generate(Model model, @RequestParam int event) { model.addAttribute("event", eventService.getEventById(event)); return n

我使用AbstractPdfView类生成pdf并在浏览器中下载,但我还需要通过电子邮件发送。我知道解决办法是显而易见的,但我已经被困在这个问题上一天了,看不到它。以下是我迄今为止的情况:

@GetMapping()
public PdfView generate(Model model, @RequestParam int event) {

  model.addAttribute("event", eventService.getEventById(event));

  return new PdfView();


}
这是PdfView类:

public class PdfView extends AbstractPdfView {

   @Override
   protected void buildPdfDocument(Map<String, Object> model, Document document, PdfWriter writer, HttpServletRequest request, HttpServletResponse response) throws Exception {

        //add the iformation for the pdf
        document.add(getInvoiceInfo());

   }
}
public abstract class AbstractPdfView extends AbstractView {

   public AbstractPdfView() {
      setContentType("application/pdf");
   }

   @Override
   protected boolean generatesDownloadContent() {
      return true;
   }

   @Override
   protected final void renderMergedOutputModel(Map<String, Object> model, HttpServletRequest request, HttpServletResponse response) throws Exception {

  ByteArrayOutputStream out = createTemporaryOutputStream();

  Document document = new Document(PageSize.A4.rotate(), 35, 35, 50, 36);
  PdfWriter writer = PdfWriter.getInstance(document, out);
  prepareWriter(model, writer, request);
  buildPdfMetadata(model, document, request);

  document.open();
  buildPdfDocument(model, document, writer, request, response);
  document.close();

    //i know i has to happen before this bit here but not sure how
   writeToResponse(response, out);

}

   protected void prepareWriter(Map<String, Object> model, PdfWriter writer, HttpServletRequest request) throws DocumentException {
      writer.setViewerPreferences(getViewerPreferences());
   }

   protected int getViewerPreferences() {
      return PdfWriter.ALLOW_PRINTING | PdfWriter.PageLayoutSinglePage;
   }


   protected void buildPdfMetadata(Map<String, Object> model, Document document, HttpServletRequest request) {
   }

   protected abstract void buildPdfDocument(Map<String, Object> model, Document document, PdfWriter writer,
                                            HttpServletRequest request, HttpServletResponse response) throws Exception;
}
public类PdfView扩展了AbstractPdfView{
@凌驾
受保护的void buildPdfDocument(映射模型、文档文档、PdfWriter编写器、HttpServletRequest请求、HttpServletResponse响应)引发异常{
//添加pdf的格式
document.add(getInvoiceInfo());
}
}
这就是AbstractPdfView类:

public class PdfView extends AbstractPdfView {

   @Override
   protected void buildPdfDocument(Map<String, Object> model, Document document, PdfWriter writer, HttpServletRequest request, HttpServletResponse response) throws Exception {

        //add the iformation for the pdf
        document.add(getInvoiceInfo());

   }
}
public abstract class AbstractPdfView extends AbstractView {

   public AbstractPdfView() {
      setContentType("application/pdf");
   }

   @Override
   protected boolean generatesDownloadContent() {
      return true;
   }

   @Override
   protected final void renderMergedOutputModel(Map<String, Object> model, HttpServletRequest request, HttpServletResponse response) throws Exception {

  ByteArrayOutputStream out = createTemporaryOutputStream();

  Document document = new Document(PageSize.A4.rotate(), 35, 35, 50, 36);
  PdfWriter writer = PdfWriter.getInstance(document, out);
  prepareWriter(model, writer, request);
  buildPdfMetadata(model, document, request);

  document.open();
  buildPdfDocument(model, document, writer, request, response);
  document.close();

    //i know i has to happen before this bit here but not sure how
   writeToResponse(response, out);

}

   protected void prepareWriter(Map<String, Object> model, PdfWriter writer, HttpServletRequest request) throws DocumentException {
      writer.setViewerPreferences(getViewerPreferences());
   }

   protected int getViewerPreferences() {
      return PdfWriter.ALLOW_PRINTING | PdfWriter.PageLayoutSinglePage;
   }


   protected void buildPdfMetadata(Map<String, Object> model, Document document, HttpServletRequest request) {
   }

   protected abstract void buildPdfDocument(Map<String, Object> model, Document document, PdfWriter writer,
                                            HttpServletRequest request, HttpServletResponse response) throws Exception;
}
公共抽象类AbstractPdfView扩展了AbstractView{
公共摘要PDFView(){
setContentType(“应用程序/pdf”);
}
@凌驾
受保护的布尔生成下载内容(){
返回true;
}
@凌驾
受保护的最终无效RenderMergeDoutpModel(映射模型、HttpServletRequest请求、HttpServletResponse响应)引发异常{
ByteArrayOutstream out=createTemporaryOutputStream();
文档=新文档(PageSize.A4.rotate(),35,35,50,36);
PdfWriter writer=PdfWriter.getInstance(文档,输出);
准备编写器(型号、编写器、请求);
buildPdfMetadata(模型、文档、请求);
document.open();
构建PDF文档(模型、文档、编写者、请求、响应);
document.close();
//我知道我必须在这之前发生,但不知道怎么做
writeToResponse(响应,输出);
}
受保护的void prepareWriter(映射模型、PdfWriter编写器、HttpServletRequest请求)引发DocumentException{
setViewerPreferences(getViewerPreferences());
}
受保护的int getViewerPreferences(){
返回PdfWriter.ALLOW|u PRINTING | PdfWriter.PageLayoutSinglePage;
}
受保护的void buildPdfMetadata(映射模型、文档文档、HttpServletRequest){
}
受保护的抽象无效构建PDF文档(地图模型、文档文档、PDF编写器、,
HttpServletRequest请求、HttpServletResponse响应)引发异常;
}

欢迎任何帮助!谢谢大家。

我已经做到了。如果有人遇到这个问题,就把它贴在这里。我基本上在AbstractPdfView的实现中自动连接了emailService,用它调用抽象类的构造函数。这里还有一本关于这个主题的好书:

您使用的是哪个pdf库?很抱歉,我没有提到这一点。是iText。请参考此