diff --git a/nflg-mobilebroken-quotation/src/main/java/com/nflg/mobilebroken/quotation/controller/admin/AdminShoppingController.java b/nflg-mobilebroken-quotation/src/main/java/com/nflg/mobilebroken/quotation/controller/admin/AdminShoppingController.java index 1f39466b..3dd18fc9 100644 --- a/nflg-mobilebroken-quotation/src/main/java/com/nflg/mobilebroken/quotation/controller/admin/AdminShoppingController.java +++ b/nflg-mobilebroken-quotation/src/main/java/com/nflg/mobilebroken/quotation/controller/admin/AdminShoppingController.java @@ -3,6 +3,9 @@ package com.nflg.mobilebroken.quotation.controller.admin; import cn.hutool.core.collection.CollectionUtil; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.itextpdf.text.pdf.BaseFont; +import com.nflg.mobilebroken.common.constant.STATE; +import com.nflg.mobilebroken.common.exception.NflgException; import com.nflg.mobilebroken.common.pojo.ApiResult; import com.nflg.mobilebroken.common.pojo.PageData; import com.nflg.mobilebroken.common.pojo.request.QuotationAdminSearchRequest; @@ -18,10 +21,20 @@ import com.nflg.mobilebroken.repository.service.IAdminUserService; import com.nflg.mobilebroken.repository.service.IQuotationShoppingOrderAdjustService; import com.nflg.mobilebroken.repository.service.IQuotationShoppingOrderService; import com.nflg.mobilebroken.repository.service.ITBaseCustomerService; +import org.springframework.core.io.ClassPathResource; +import org.springframework.http.ContentDisposition; +import org.springframework.http.HttpHeaders; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; +import org.xhtmlrenderer.pdf.ITextRenderer; import javax.annotation.Resource; +import javax.servlet.http.HttpServletResponse; import javax.validation.Valid; +import java.io.OutputStream; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; import java.util.List; import java.util.stream.Collectors; @@ -63,4 +76,32 @@ public class AdminShoppingController extends ControllerBase { .list() ); } + + /** + * 导出报价单 + * @param id 报价单ID + */ + @GetMapping("/export") + public ResponseEntity exportPdf(HttpServletResponse response, @RequestParam Long id) { +// response.setContentType(MediaType.APPLICATION_PDF_VALUE); +// String encode = URLEncoder.encode( "demo.pdf", StandardCharsets.UTF_8); +// response.setHeader(HttpHeaders.CONTENT_DISPOSITION, "inline;filename=" + encode); +// try { +// ITextRenderer renderer = new ITextRenderer(); +// renderer.getFontResolver().addFont("fonts/simsun.ttc", BaseFont.IDENTITY_H, BaseFont.EMBEDDED); +// renderer.setDocumentFromString(html); +// renderer.layout(); +// try (OutputStream outputStream = response.getOutputStream()) { +// renderer.createPDF(outputStream); +// } +// } catch (Exception e) { +// log.error("生成pdf出错", e); +// throw new NflgException(STATE.BusinessError, "生成pdf出错"); +// } + org.springframework.core.io.Resource resource = new ClassPathResource("templates/demo.pdf"); + return ResponseEntity.ok() + .contentType(MediaType.APPLICATION_PDF) + .header(HttpHeaders.CONTENT_DISPOSITION, "inline; filename=\"demo.pdf\"") + .body(resource); + } } \ No newline at end of file diff --git a/nflg-mobilebroken-quotation/src/main/java/com/nflg/mobilebroken/quotation/controller/app/ShoppingController.java b/nflg-mobilebroken-quotation/src/main/java/com/nflg/mobilebroken/quotation/controller/app/ShoppingController.java index cd1bd81a..94be8796 100644 --- a/nflg-mobilebroken-quotation/src/main/java/com/nflg/mobilebroken/quotation/controller/app/ShoppingController.java +++ b/nflg-mobilebroken-quotation/src/main/java/com/nflg/mobilebroken/quotation/controller/app/ShoppingController.java @@ -33,6 +33,7 @@ import org.springframework.core.io.ClassPathResource; import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.http.HttpHeaders; import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.transaction.annotation.Transactional; @@ -851,4 +852,32 @@ public class ShoppingController extends ControllerBase { return categoryId; } } + + /** + * 导出报价单 + * @param id 报价单ID + */ + @GetMapping("/export") + public ResponseEntity exportPdf(HttpServletResponse response, @RequestParam Long id) { +// response.setContentType(MediaType.APPLICATION_PDF_VALUE); +// String encode = URLEncoder.encode( "demo.pdf", StandardCharsets.UTF_8); +// response.setHeader(HttpHeaders.CONTENT_DISPOSITION, "inline;filename=" + encode); +// try { +// ITextRenderer renderer = new ITextRenderer(); +// renderer.getFontResolver().addFont("fonts/simsun.ttc", BaseFont.IDENTITY_H, BaseFont.EMBEDDED); +// renderer.setDocumentFromString(html); +// renderer.layout(); +// try (OutputStream outputStream = response.getOutputStream()) { +// renderer.createPDF(outputStream); +// } +// } catch (Exception e) { +// log.error("生成pdf出错", e); +// throw new NflgException(STATE.BusinessError, "生成pdf出错"); +// } + org.springframework.core.io.Resource resource = new ClassPathResource("templates/demo.pdf"); + return ResponseEntity.ok() + .contentType(MediaType.APPLICATION_PDF) + .header(HttpHeaders.CONTENT_DISPOSITION, "inline; filename=\"demo.pdf\"") + .body(resource); + } } \ No newline at end of file diff --git a/nflg-mobilebroken-quotation/src/main/resources/templates/demo.pdf b/nflg-mobilebroken-quotation/src/main/resources/templates/demo.pdf new file mode 100644 index 00000000..9113e18f Binary files /dev/null and b/nflg-mobilebroken-quotation/src/main/resources/templates/demo.pdf differ