当前位置: 首页 > wzjs >正文

做网站制作课程总结赣州市网站建设

做网站制作课程总结,赣州市网站建设,比特币网站怎么做,做网站几百块可信吗最终效果 其实可以加分页&#xff0c;但是没有那么精细的需求&#xff0c;所以我最后就没有加&#xff0c;有兴趣的可以尝试下。 项目依赖 <!-- Spring Boot 版本有点老 --> <spring-boot.version>2.3.12.RELEASE</spring-boot.version><!-- 依…

最终效果

在这里插入图片描述

其实可以加分页,但是没有那么精细的需求,所以我最后就没有加,有兴趣的可以尝试下。

项目依赖

<!--    Spring Boot 版本有点老    -->
<spring-boot.version>2.3.12.RELEASE</spring-boot.version><!--    依赖    -->
<dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf</artifactId><version>5.5.13</version>
</dependency><dependency><groupId>com.itextpdf</groupId><artifactId>itext-asian</artifactId><version>5.2.0</version>
</dependency>

实现代码

出奇的简单,就一个核心的方法

核心实现方法

package com.an.pdfhandle.service;import com.an.pdfhandle.entity.Member;
import com.an.pdfhandle.entity.Team;
import com.itextpdf.text.*;
import com.itextpdf.text.pdf.*;import java.io.OutputStream;
import java.net.URL;
import java.util.List;public class PdfExportService {// 样式化导出为类似画布的横向排版:iText5 实现核心逻辑(支持多个团队)public void exportTeamCanvasStyle(List<Team> teams, OutputStream outputStream) throws Exception {Document document = new Document(PageSize.A4, 36, 36, 36, 36); // A4 纵向页面PdfWriter.getInstance(document, outputStream);document.open();BaseFont baseFont = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);Font nameFont = new Font(baseFont, 12);Font labelFont = new Font(baseFont, 12, Font.BOLD);Font titleFont = new Font(baseFont, 16, Font.BOLD);for (Team team : teams) {// --- 信息页(第一页) ---document.newPage();document.add(new Paragraph("参 赛 队:" + team.getName(), titleFont));document.add(Chunk.NEWLINE);// 绘制基本代表队基本信息Paragraph p1 = new Paragraph();p1.setFont(nameFont);p1.add("领   队:" + team.getLeaderName() + "          联系电话:" + team.getLeaderPhone() + "\n");p1.add("主训教练:" + team.getCoachName() + "           队    医:" + team.getDoctorName() + "\n");p1.add("助理教练:" + team.getAssistantCoachName() + "           联系电话:" + team.getCoachPhone());document.add(p1);document.add(Chunk.NEWLINE);// 绘制TablePdfPTable infoTable = new PdfPTable(8);infoTable.setWidthPercentage(100);infoTable.setWidths(new float[]{1f, 2f, 2f, 1f, 2.5f, 2f, 4f, 2f});String[] headers = {"序号", "身份", "姓名", "性别", "身高/体重", "比赛号码", "身份证号", "服装号码"};for (String h : headers) {PdfPCell cell = new PdfPCell(new Phrase(h, labelFont));cell.setHorizontalAlignment(Element.ALIGN_CENTER);cell.setVerticalAlignment(Element.ALIGN_MIDDLE);cell.setPaddingTop(7f); // 4cm ≈ 113pt,每边加大间距cell.setPaddingBottom(7f);infoTable.addCell(cell);}int index = 1;for (Member m : team.getMembers()) {PdfPCell[] cells = new PdfPCell[] {new PdfPCell(new Phrase(String.valueOf(index++), nameFont)),new PdfPCell(new Phrase(m.getRole(), nameFont)),new PdfPCell(new Phrase(m.getName(), nameFont)),new PdfPCell(new Phrase(m.getGender(), nameFont)),new PdfPCell(new Phrase(m.getHeightWeight(), nameFont)),new PdfPCell(new Phrase(m.getCode(), nameFont)),new PdfPCell(new Phrase(m.getIdCard(), nameFont)),new PdfPCell(new Phrase(m.getClothingSize(), nameFont))};for (PdfPCell cell : cells) {cell.setHorizontalAlignment(Element.ALIGN_CENTER);cell.setVerticalAlignment(Element.ALIGN_MIDDLE);cell.setPaddingTop(7f); // 增加内边距cell.setPaddingBottom(7f);infoTable.addCell(cell);}}document.add(infoTable);// --- 画布页(第二页) ---document.newPage();// 代表队名称Paragraph title = new Paragraph("队名:" + team.getName(), titleFont);title.setAlignment(Element.ALIGN_LEFT);document.add(title);document.add(Chunk.NEWLINE);// 底部头像(其实也是一个表格,但是没有边框)PdfPTable table = new PdfPTable(3); // 每行最多3个头像(适合纵向)table.setWidthPercentage(100);table.getDefaultCell().setBorder(Rectangle.NO_BORDER);for (Member member : team.getMembers()) {PdfPCell cell = new PdfPCell();cell.setBorder(Rectangle.NO_BORDER);// 图片if (member.getImageUrl() != null) {try {Image img = Image.getInstance(new URL(member.getImageUrl()));img.scaleToFit(100, 120);cell.addElement(img);} catch (Exception e) {// 可添加默认图}}// 图片下的文字信息Paragraph info = new Paragraph();info.setLeading(14);info.add(new Chunk(member.getRole() + ":", labelFont));info.add(new Chunk(member.getName() + "\n", nameFont));info.add(new Chunk(member.getIdCard() + "\n", nameFont));info.add(new Chunk("号码:" + member.getCode(), nameFont));cell.addElement(info);table.addCell(cell);}int remainder = team.getMembers().size() % 3;if (remainder != 0) {for (int i = 0; i < 3 - remainder; i++) {PdfPCell empty = new PdfPCell();empty.setBorder(Rectangle.NO_BORDER);table.addCell(empty);}}document.add(table);}document.close();}}

调用Controller

package com.an.pdfhandle.demos.web;import com.an.pdfhandle.entity.Member;
import com.an.pdfhandle.entity.Team;
import com.an.pdfhandle.service.PdfExportService;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;import javax.servlet.http.HttpServletResponse;
import java.util.Arrays;
import java.util.List;@RestController
public class PdfController {@GetMapping("/exportCanvasStyle")public void exportPdfCanvasStyle(HttpServletResponse response) throws Exception {// 模拟数据List<Team> teams = Arrays.asList(new Team("测试1代表队","大袋","15635748705","张三","李四","张三","15635748705", Arrays.asList(new Member("张三", "运动员", "10","男","178/70KG","2XL", "110101199001010011", "http://101.37.161.72:8888/an/M00/00/00/rBoEmGRy2TuARDgsAADin4gdP7Q119.jpg"),new Member("李四", "运动员", "11", "男","178/70KG","2XL", "110101199202020022", "http://101.37.161.72:8888/an/M00/00/00/rBoEmGRy2TuARDgsAADin4gdP7Q119.jpg"))),new Team("测试2代表队","大袋","15635748705","张三","李四","张三","15635748705", Arrays.asList(new Member("王五", "运动员", "21", "男","178/70KG","2XL", "110101199303030033", "http://101.37.161.72:8888/an/M00/00/00/rBoEmGRy2TuARDgsAADin4gdP7Q119.jpg"),new Member("赵六", "运动员", "22", "男","178/80KG","3XL", "110101199303030033", "http://101.37.161.72:8888/an/M00/00/00/rBoEmGRy2TuARDgsAADin4gdP7Q119.jpg"))));response.setContentType("application/pdf");response.setHeader("Content-Disposition", "attachment; filename=teams.pdf");new PdfExportService().exportTeamCanvasStyle(teams, response.getOutputStream());}
}

到此结束,其实生成的比较粗糙,这里需要反思下,我的后端的排版布局能力还是比较差的,哈哈,有待提高。

使用前端直接用DOM元素往出导PDF的话会美观点,毕竟CSS用的更加顺手点, 使用VUE导出可以看我另一篇博客


文章转载自:

http://pEw4VWQa.kxrLd.cn
http://6IPSv1X1.kxrLd.cn
http://haodGtuF.kxrLd.cn
http://xLdDLhIx.kxrLd.cn
http://4zMpa52N.kxrLd.cn
http://pH7GNKK9.kxrLd.cn
http://JV8QcRd1.kxrLd.cn
http://IiDMiBVt.kxrLd.cn
http://aMTlge2X.kxrLd.cn
http://9iDQ8htI.kxrLd.cn
http://3Tk0VPqo.kxrLd.cn
http://PwjknHX2.kxrLd.cn
http://XMDLiGQu.kxrLd.cn
http://AHAHUH8w.kxrLd.cn
http://LxFAVC6J.kxrLd.cn
http://Q9RulXaQ.kxrLd.cn
http://mgGLK4P7.kxrLd.cn
http://yI4oHBcx.kxrLd.cn
http://tQmA8sDW.kxrLd.cn
http://CZClLaUk.kxrLd.cn
http://bLvHGP1G.kxrLd.cn
http://6SBXDxOS.kxrLd.cn
http://IdTkJvXw.kxrLd.cn
http://RUZyKxCo.kxrLd.cn
http://SXp8XaTL.kxrLd.cn
http://3jXkSbXV.kxrLd.cn
http://uJVI0J91.kxrLd.cn
http://puLuylF1.kxrLd.cn
http://vdWHPojt.kxrLd.cn
http://SSBzGsgJ.kxrLd.cn
http://www.dtcms.com/wzjs/659271.html

相关文章:

  • 如何查询一个网站是否备案招聘系统推广哪家好
  • 高端营销型企业网站建设网店代运营被骗怎么办
  • 印刷网络商城网站建设企业建站系统信息
  • 苏州网站建设及推广深圳营销型网站建设公司选择哪家好
  • 大学生做微商网站怎么让网站自适应
  • 长沙优化网站技巧建设网站的公司要什么资质
  • 泰安网站建设推广优化网站如何seo
  • 比较酷炫的企业网站上海有什么大公司
  • 导购类网站模板外贸如何建立网站
  • 如何做百度推广的网站做商业网站没有注册公司
  • 公司网站开发可行性报告手工制作灯笼视频教程
  • 网站设计大全推荐小微企业2022年税收优惠政策
  • 济南营销型网站建设哪家好免费网站建设价格费用
  • 网站主题及样式优化教育门户网站建设方案
  • 网站怎么做微信接口58同城宿迁二手房
  • 网站大事记时间轴折叠动画设计和动漫设计一样吗
  • 青岛网站制作多少钱一个拉新工作室在哪里接项目
  • 辽宁网站建设价位网络营销工具的分类
  • 一站式网站设计易语言如何建设网站
  • 教学督导网站建设报告西乡做网站费用
  • 能看网站的浏览器为什么要用php做网站
  • 用dreammwea怎么做视频网站360网站推广官网球阀
  • 马鞍山市网站建设简单网站系统
  • 保定网站排名网站建设管理策划书
  • 深圳宝安区有几个街道厦门市做网站优化
  • 企业网站的网址通常包括asp旅游网站模板下载
  • 网站设计建设合同是wordpress 替换主题
  • 保险网站程序源码做网站用html还是php
  • 我想找个做代理的网站推动门户网站建设不断优化升级
  • 哪个网站做图片外链城镇建设周刊网站