- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
目前,我编写的代码生成一个 pdf 文件,其中包含到本地驱动器的航类行程。系统将自动发送一封附有行程的电子邮件(从同一本地路径检索)。我希望能够从我的 AWS S3 存储桶中存储和检索这些行程。我的应用程序是使用 Spring-boot/MVC/Maven 用 Java 编写的。我似乎无法弄清楚这一点。我刚从大学毕业,获得了软件开发的 BSIT 学位。我真的很努力地加强我的技能,但看起来我需要帮助来解决这个问题。
服务层-
打包 com.louis.mywebapplication.service;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import com.louis.mywebapplication.dto.ReservationRequest;
import com.louis.mywebapplication.entities.Flight;
import com.louis.mywebapplication.entities.Passenger;
import com.louis.mywebapplication.entities.Reservation;
import com.louis.mywebapplication.repos.FlightRepository;
import com.louis.mywebapplication.repos.PassengerRepository;
import com.louis.mywebapplication.repos.ReservationRepository;
import com.louis.mywebapplication.util.EmailUtil;
import com.louis.mywebapplication.util.PDFGenerator;
@Service
public class ReservationServiceImpl implements ReservationService {
private static final Logger LOGGER = LoggerFactory.getLogger(ReservationServiceImpl.class);
@Value("${com.louis.webapplication.itinerary.dirpath}")
String ITINERARY_DIR;
@Autowired
FlightRepository flightRepository;
@Autowired
PassengerRepository passengerRepository;
@Autowired
ReservationRepository reservationRepository;
@Autowired
PDFGenerator pdfGenerator;
@Autowired
EmailUtil emailUtil;
@Override
public Reservation bookFlight(ReservationRequest request) {
LOGGER.info("Inside bookFlight()");
//Make Payment
Long flightId = request.getFlightId();
LOGGER.info("Fetching flight for flight id:"+flightId);
Flight flight = flightRepository.findById(flightId).get();
Passenger passenger = new Passenger();
passenger.setFirstName(request.getPassengerFirstName());
passenger.setLastName(request.getPassengerLastName());
passenger.setPhone(request.getPassengerPhone());
passenger.setEmail(request.getPassengerEmail());
LOGGER.info("Saving the passenger: "+passenger);
Passenger savedPassenger = passengerRepository.save(passenger);
Reservation reservation = new Reservation();
reservation.setFlight(flight);
reservation.setPassenger(savedPassenger);
reservation.setCheckedIn(false);
LOGGER.info("Saving the reservation:"+reservation);
Reservation savedReservation reservationRepository.save(reservation);
String filePath = ITINERARY_DIR+savedReservation.getId()+".pdf";
LOGGER.info("Generation the ininerary");
pdfGenerator.generateItinerary(savedReservation, filePath);
LOGGER.info("Emailing the ininerary");
emailUtil.sendItinerary(passenger.getEmail(), filePath);
return savedReservation;
}
}
实用层-
package com.louis.mywebapplication.util;
import java.io.File;
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Component;
@Component
public class EmailUtil {
private static final Logger LOGGER = LoggerFactory.getLogger(EmailUtil.class);
@Autowired
private JavaMailSender sender;
@Value("${com.louis.mywebapplicationn.itinerary.email.subject}")
private String EMAIL_SUBJECT;
@Value("${com.louis.mywebapplicationn.itinerary.email.body}")
private String EMAIL_BODY;
public void sendItinerary(String toAddress, String filePath) {
LOGGER.info("Inside sendItinerary()");
MimeMessage message = sender.createMimeMessage();
try {
MimeMessageHelper messageHelper = new MimeMessageHelper(message, true);
messageHelper.setTo(toAddress);
messageHelper.setSubject(EMAIL_SUBJECT);
messageHelper.setText(EMAIL_BODY);
messageHelper.addAttachment("Itinerary", new File(filePath));
sender.send(message);
} catch (MessagingException e) {
e.printStackTrace();
}
}
}
package com.louis.mywebapplication.util;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Phrase;
import com.itextpdf.text.pdf.PdfPCell;
import com.itextpdf.text.pdf.PdfPTable;
import com.itextpdf.text.pdf.PdfWriter;
import com.louis.mywebapplication.entities.Reservation;
@Component
public class PDFGenerator {
private static final Logger LOGGER = LoggerFactory.getLogger(PDFGenerator.class);
//
public void generateItinerary(Reservation reservation, String filePath) {
LOGGER.info("generateItinerary()");
Document document = new Document();
try {
PdfWriter.getInstance(document, new FileOutputStream(filePath));
document.open();
document.add(generateTable(reservation));
document.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (DocumentException e) {
e.printStackTrace();
}
}
//
private PdfPTable generateTable(Reservation reservation) {
PdfPTable table = new PdfPTable(2);
PdfPCell cell;
cell = new PdfPCell(new Phrase("Flight Itinerary"));
cell.setColspan(2);
table.addCell(cell);
cell = new PdfPCell(new Phrase("Flight Details"));
cell.setColspan(2);
table.addCell(cell);
table.addCell("Airlines");
table.addCell(reservation.getFlight().getOperatingAirlines());
table.addCell("Departure City");
table.addCell(reservation.getFlight().getDepartureCity());
table.addCell("Arrival City");
table.addCell(reservation.getFlight().getArrivalCity());
table.addCell("Flight Number");
table.addCell(reservation.getFlight().getFlightNumber());
table.addCell("Departure Date");
table.addCell(reservation.getFlight().getDateOfDeparture().toString());
table.addCell("Departure Time");
table.addCell(reservation.getFlight().getEstimatedDepartureTime().toString());
cell = new PdfPCell(new Phrase("Passengerr Details"));
cell.setColspan(2);
table.addCell(cell);
table.addCell("First Name");
table.addCell(reservation.getPassenger().getFirstName());
table.addCell("Last Name");
table.addCell(reservation.getPassenger().getLastName());
table.addCell("Email");
table.addCell(reservation.getPassenger().getEmail());
table.addCell("Phone");
table.addCell(reservation.getPassenger().getPhone());
return table;
}
}
最佳答案
您可能想看看 Spring Content .该项目允许您管理内容(即您生成的 PDF)并将其与您的 Spring 数据实体相关联。它还提供与 Spring Data 相同的编程模型,仅适用于文件和其他二进制内容。
例如,假设您使用的是 Spring Data REST(和 Spring Boot),您可以添加一个 SDR 事件处理程序,在创建新的预订时(通过 SDR 端点)触发 PDF 的生成,然后使用Spring Content 将 PFD 存储在 S3 中并将其与预订相关联。
该项目很容易添加到您的项目中,如下所示:
pom.xml
<!-- Java API -->
<dependency>
<groupId>com.github.paulcwarren</groupId>
<artifactId>spring-content-s3-boot-starter</artifactId>
<version>0.8.0</version>
</dependency>
<!-- REST API -->
<dependency>
<groupId>com.github.paulcwarren</groupId>
<artifactId>spring-content-rest-boot-starter</artifactId>
<version>0.8.0</version>
</dependency>
S3Configuration.java
@Configuration
@EnableS3Stores
public class S3Configuration {
@Bean
public AmazonS3 client() {
return ...your client here...
}
}
Reservation.java
@Entity
public class Reservation {
@Id
@GeneratedValue
private long id;
...other existing fields...
/////////////
//
// Add Spring Content annotations to allow content to be associated
@ContentId
private String contentId;
@ContentLength
private long contentLength = 0L;
@MimeType
private String mimeType = "";
...
}
ReservationPDFContentStore.java
@StoreRestResource(path="reservationPdfs")
public interface ReservationPDFContentStore extends ContentStore<Reservation, String> {
}
ReservationEventHandler.java
@RepositoryEventHandler(Reservation.class)
public class ReservationEventHandler {
@Autowired
private PDFGenerator;
@Autowired
private ReservationPDFContentStore store;
@HandleAfterCreate
public void handleReservationAfterCreate(Reservation reservation){
// generate your PDF and associate the content with your reservation
String filePath = ...
pdfGenerator.generateItinerary(savedReservation, filePath);
InputStream pfdIn = new FileInputStream(filePath);
store.setContent(reservation, pdfIn);
// don't forget to close pdfIn!
}
}
在高层次上,这就是您需要做的全部。
它的实际工作方式与 Spring Data 非常相似。当您的应用程序启动时,Spring Content 将看到 spring-content-s3-boot-starter
依赖项,并知道您要将内容存储在 S3 中。它将注入(inject) ReservationPDFContentStore
接口(interface)的基于 S3 的实现,使用配置中的客户端 @Bean 设置作为其连接。它还将看到 spring-content-rest-boot-starter
并将注入(inject)与内容存储接口(interface)对话的 REST 端点。
所以,例如:
curl -X POST/reservations/
(具有适当的 application/hal+json 负载)
将在您的系统中创建一个新的预订并触发将生成 PDF 的事件处理程序,将其存储在 S3 中并将其与新创建的预订相关联。
curl/reservationPdfs/{reservationId}
将在您需要时获取 PDF。
Spring Data 和 Content 的优势在于,除了 PDF 生成器之外,您无需编写任何样板 Controller 或服务代码。给定几个接口(interface)(扩展 CrudRepository
和 ContentStore
)Spring 能够为您注入(inject)所有内容。
您可以找到更多 Spring Content 示例 here .
HTH
关于java - 尝试生成一个 pdf 表,该表将存储在 s3 上并立即作为自动电子邮件附件检索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56192267/
在电子邮件中 Received: header 可以合法地多次出现,并且具有互斥的值... Received: three.example.com Received: two.example.co
是否有任何代码/宏可以合并到我的 sas 程序中,一旦我的 sas 代码在运行时发生错误,它会立即给我发送电子邮件? 另外,这封电子邮件是否可能包含发生的错误? 最佳答案 是的……也不是…… 这是可能
我有一个包含三个 td 的表格,每个表格都需要包含图像。 td 的宽度和高度是固定的,但图像大小可以变化。目标是在不扭曲单元格或图像本身的情况下拟合图像。不能使用 background-image 属
首先非常感谢大家过去提出的宝贵建议,我们正在创建一个应用程序,在某些事件中想要将电子邮件/短信发送到我们已经尝试过 openURL 调用的指定电话号码,但它会打开现有的内置iPhone 的电子邮件/短
我正在使用 apache commons mail 发送电子邮件。不幸的是,我遇到了以下异常: org.apache.commons.mail.EmailException: Sending the
我可以在我的 ~/.hgrc 文件中设置我常用的电子邮件地址,但是有没有办法为一个 hg 项目指定我想被称为不同的名称/电子邮件(类似到项目目录中的 git 的 .git/config 文件覆盖 ~/
$message = 'New user registration\n\n There is a new submission on the site and below are the detail
使用 outlook 我可以发送在邮件正文中插入图像的电子邮件(不是作为附件)。我如何使用 PHP 中的 mail() 函数来做到这一点? 最佳答案 我会推荐 Swift Mailer: http:/
以下代码的目标是将所选图表粘贴到我的文本下方的电子邮件正文中。但是,它继续将其粘贴在我的文本上方。我该如何更改它以使其粘贴在下面?谢谢! Set OutApp = CreateObject("Outl
首先,我知道不建议使用正则表达式发送电子邮件,但我必须对此进行测试。 我有这个正则表达式: \b[A-Z0-9._%-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b 在 Java 中,我这样
如何在没有任何第三方程序的情况下从 Python 发送电子邮件? 最佳答案 使用Python email和 smtplib模块。示例:http://docs.python.org/library/em
我目前正在使用此代码在 html 表中显示 mysql 记录 "; . . echo ' '. $row["Email1"] . ' '; . . echo ""; }
在电子邮件中使用 HTML 时,是否可以仅将链接的一部分着色为特定颜色? 我试过: red part of link normal part ...我知道如果我拆分链接是可能的,但我正在努力将它们保持
我正在处理一封 html 电子邮件,我有一个非常简单的元素 (ul),我想将它移到页面下方。 我检查了campaign monitor's guide并且不支持负边距,或者 position: abs
我使用表格创建了我的 HTML 电子邮件,该表格有一个背景图像,在大多数基于 Web 的电子邮件客户端中都能正常显示。 我正在努力让背景图片显示在 Outlook 中。 我最近的尝试,我尝试了以下操作
我对 PHP/CSS 和一般编程还很陌生。 我想改变文本区域中文本的格式,就像在这里所做的那样,例如,当为突出显示的文本添加标签“代码示例”时,它会缩进它,或者当将它设置为粗体时,它会加粗它。 这样做
嘿,你能推荐我哪些 C++ 库或类可用于在 C++ 中通过 SMTP 发送电子邮件。我在 Windows 平台上。我需要一个支持附件和 SSL 连接的库。有哪些可用选项。我不打算实现我自己的 :) 问
想知道是否可以在 HTML 电子邮件中包含一个表单。我要做的就是将图像输入提交到 Paypal 购买页面。我希望它直接进入 Paypal ,而无需先进入营销页面... 我会拥有 paypal 要求的完
我负责“ reshape ”我们的 IT 部门通信。我想用纯 HTML/CSS 来发送我们的电子邮件通知,以确保它的可移植性。 下面是代码,它在 Outlook 中看起来完全符合我的要求,但是一旦将内
我正在学习编写响应式电子邮件模板。目前我有:https://jsfiddle.net/q12yg2z6/
我是一名优秀的程序员,十分优秀!