浏览器下载生成PDF文件

1.引入jar包

<dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf</artifactId><version>5.5.13</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.itextpdf/itext-asian -->
<dependency><groupId>com.itextpdf</groupId><artifactId>itext-asian</artifactId><version>5.2.0</version>
</dependency>

2.java后端接口

  @RequestMapping("download")public void download(HttpServletResponse response, String id,String type) throws UnsupportedEncodingException {//查询数据PurchaseSettlementDetail purchaseSettlementDetail = null;PurchaseGoodsRecord goodsRecord = new PurchaseGoodsRecord();String fileName="";if (type.equals("1")) {fileName="平台结算单.pdf";goodsRecord.setPlatformStatus("1");//未结算purchaseSettlementDetail = purchaseSettlementDetailService.getPlatformSettlementDetail(id);goodsRecord.setPlatformId(purchaseSettlementDetail.getPlatformId());} else {fileName="采购结算单.pdf";purchaseSettlementDetail = purchaseSettlementDetailService.getSupplierSettlementDetail(id);goodsRecord.setSupplierId(purchaseSettlementDetail.getPlatformId());}goodsRecord.setPurchaseId(purchaseSettlementDetail.getPurchaseId());List<PurchaseGoodsRecord> list = purchaseGoodsRecordService.getGoodsRecordList(goodsRecord);// 设置响应头,控制浏览器下载该文件response.setHeader("content-disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));//常用的有paragraph段落、phrase语句块、chunk最小单位块try {// 创建输出流OutputStream out = response.getOutputStream();Document doc = new Document();PdfWriter writer = PdfWriter.getInstance(doc, out);doc.open();purchaseSettlementDetailService.generatePDF(doc, purchaseSettlementDetail, list, type);doc.close();} catch (Exception e) {logger.error("结算下载失败!+" + e.getMessage());}}

service类参考

 @Service
@Transactional(readOnly = true)
public class PurchaseSettlementDetailService{// 最大宽度private static int maxWidth = 520;// 生成PDF文件public void generatePDF(Document doc, PurchaseSettlementDetail purchaseSettlementDetail, List<PurchaseGoodsRecord> list,String type) throws Exception {BaseFont bfChinese = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);Font fontChinese = new Font(bfChinese, 12, Font.NORMAL);//-------------------第一行----------------------//段落文本Paragraph paragraphBlue = new Paragraph("", fontChinese);paragraphBlue.setLeading(20f);// 行间距paragraphBlue.setAlignment(Element.ALIGN_CENTER);Font font1 = new Font(bfChinese, 12, Font.BOLD);doc.add(paragraphBlue);//-------------------采购单信息----------------------Font font2 = new Font(bfChinese, 16, Font.BOLD);Paragraph paragraphBlue1 = new Paragraph("", font2);Chunk titleChunk1 = new Chunk("采购单信息", font2);//BaseColor.LIGHT_GRAYtitleChunk1.setBackground(BaseColor.LIGHT_GRAY, 10, 10, 470, 10);paragraphBlue1.add(titleChunk1);paragraphBlue1.setSpacingBefore(20);doc.add(paragraphBlue1);Paragraph purchaseOfficeNameP = new Paragraph("", fontChinese);Chunk purchaseOfficeName = new Chunk("申购方:" + purchaseSettlementDetail.getPurchaseOfficeName() + "\n");purchaseOfficeNameP.add(purchaseOfficeName);purchaseOfficeNameP.setSpacingBefore(20);doc.add(purchaseOfficeNameP);Paragraph purchaseTitleP = new Paragraph("", fontChinese);Chunk purchaseTitle = new Chunk("采购订单标题:" + purchaseSettlementDetail.getPurchaseTitle() + "\n");purchaseTitleP.add(purchaseTitle);purchaseTitleP.setSpacingBefore(10);doc.add(purchaseTitleP);Paragraph purchaseNoP = new Paragraph("", fontChinese);Chunk purchaseNo = new Chunk("采购订单编号:" + purchaseSettlementDetail.getPurchaseNo() + "\n");purchaseNoP.add(purchaseNo);purchaseNoP.setSpacingBefore(10);doc.add(purchaseNoP);Paragraph purchaseDateP = new Paragraph("", fontChinese);Chunk purchaseDate = new Chunk("采购订单生成时间:" + DateUtils.formatDate(purchaseSettlementDetail.getPurchaseDate()) + "\n");purchaseDateP.add(purchaseDate);purchaseDateP.setSpacingBefore(10);doc.add(purchaseDateP);Paragraph contractNameP = new Paragraph("", fontChinese);Chunk contractName = new Chunk("合同项目名称:" + purchaseSettlementDetail.getContractName() + "\n");contractNameP.add(contractName);contractNameP.setSpacingBefore(10);doc.add(contractNameP);Paragraph contractNoP = new Paragraph("", fontChinese);Chunk contractNo = new Chunk("合同编号:" + purchaseSettlementDetail.getContractNo() + "\n");contractNoP.add(contractNo);contractNoP.setSpacingBefore(10);doc.add(contractNoP);Paragraph contractSigningDateP = new Paragraph("", fontChinese);Chunk contractSigningDate = new Chunk("合同签订时间:" + DateUtils.formatDate(purchaseSettlementDetail.getContractSigningDate()) + "\n");contractSigningDateP.add(contractSigningDate);contractSigningDateP.setSpacingBefore(10);doc.add(contractSigningDateP);Paragraph buildingUserP = new Paragraph("", fontChinese);Chunk buildingUser = new Chunk("使用单位:" + (purchaseSettlementDetail.getBuildingUser()==null?"":purchaseSettlementDetail.getBuildingUser())+ "\n");buildingUserP.add(buildingUser);buildingUserP.setSpacingBefore(10);doc.add(buildingUserP);Paragraph warrantyPeriodP = new Paragraph("", fontChinese);Chunk warrantyPeriod = new Chunk("质保期限:" + purchaseSettlementDetail.getWarrantyPeriod() + "\n");warrantyPeriodP.add(warrantyPeriod);warrantyPeriodP.setSpacingBefore(10);doc.add(warrantyPeriodP);Paragraph considerationP = new Paragraph("", fontChinese);Chunk consideration = new Chunk("合同约定金额(元):" + purchaseSettlementDetail.getConsideration() + "\n");considerationP.add(consideration);considerationP.setSpacingBefore(10);doc.add(considerationP);//-------------------结算单信息-------------------------Paragraph paragraphBlue3 = new Paragraph("", font2);Chunk titleChunk2 = new Chunk("结算单信息", font2);//BaseColor.LIGHT_GRAYtitleChunk2.setBackground(BaseColor.LIGHT_GRAY, 10, 10, 470, 10);paragraphBlue3.add(titleChunk2);paragraphBlue3.setSpacingBefore(40);doc.add(paragraphBlue3);Paragraph titleP = new Paragraph("", fontChinese);Chunk title = new Chunk("结算单标题:" + purchaseSettlementDetail.getTitle() + "\n");titleP.add(title);titleP.setSpacingBefore(20);doc.add(titleP);Paragraph settlementNoP = new Paragraph("", fontChinese);Chunk settlementNo = new Chunk("结算单编号:" + purchaseSettlementDetail.getSettlementNo() + "\n");settlementNoP.add(settlementNo);settlementNoP.setSpacingBefore(20);doc.add(settlementNoP);Paragraph createDateP = new Paragraph("", fontChinese);Chunk createDate = new Chunk("生成结算单时间:" + DateUtils.formatDate(purchaseSettlementDetail.getCreateDate()) + "\n");createDateP.add(createDate);createDateP.setSpacingBefore(20);doc.add(createDateP);//-------------------商家信息-------------------------Paragraph paragraphBlue31 = new Paragraph("", font2);Chunk titleChunk21 = new Chunk("商家信息", font2);//BaseColor.LIGHT_GRAYtitleChunk21.setBackground(BaseColor.LIGHT_GRAY, 10, 10, 470, 10);paragraphBlue31.add(titleChunk21);paragraphBlue31.setSpacingBefore(40);doc.add(paragraphBlue31);String name="";String lable="";if(type.equals("1")){name="平台商";lable="平台";}else {name="供应商";lable="采购";}Paragraph platformNameP = new Paragraph("", fontChinese);Chunk platformName = new Chunk(name+":" + purchaseSettlementDetail.getPlatformName() + "\n");platformNameP.add(platformName);platformNameP.setSpacingBefore(20);doc.add(platformNameP);Paragraph contactsP = new Paragraph("", fontChinese);Chunk contacts = new Chunk(name+"联系人:" + purchaseSettlementDetail.getContacts() + "\n");contactsP.add(contacts);contactsP.setSpacingBefore(20);doc.add(contactsP);Paragraph contactTelP = new Paragraph("", fontChinese);Chunk contactTel = new Chunk("电话:" + purchaseSettlementDetail.getContactTel() + "\n");contactTelP.add(contactTel);contactTelP.setSpacingBefore(20);doc.add(contactTelP);Paragraph addressP = new Paragraph("", fontChinese);Chunk address = new Chunk(name+"地址:" + purchaseSettlementDetail.getAddress() + "\n");addressP.add(address);addressP.setSpacingBefore(20);doc.add(addressP);//-------------------结算单信息-------------------------Paragraph goodsP = new Paragraph("", font2);Chunk titleChunk41 = new Chunk("商品信息", font2);//BaseColor.LIGHT_GRAYtitleChunk41.setBackground(BaseColor.LIGHT_GRAY, 10, 10, 470, 10);goodsP.add(titleChunk41);goodsP.setSpacingBefore(40);doc.add(goodsP);Paragraph paragraphBlue2 = new Paragraph("", font2);paragraphBlue2.setAlignment(Element.ALIGN_CENTER);paragraphBlue2.setSpacingBefore(20);doc.add(paragraphBlue2);Font keyfont = new Font(bfChinese, 10, Font.BOLD);Font textfont = new Font(bfChinese, 10, Font.NORMAL);// 表格PdfPTable table = createTable(new float[]{30, 60, 60, 150, 60, 80, 80, 60, 60, 60, 60, 60, 60, 60, 60, 100,80});table.addCell(createCell("序号", keyfont, Element.ALIGN_CENTER));table.addCell(createCell("采购类型", keyfont, Element.ALIGN_CENTER));table.addCell(createCell("渠道", keyfont, Element.ALIGN_CENTER));table.addCell(createCell("商品链接", keyfont, Element.ALIGN_CENTER));table.addCell(createCell("商品名称", keyfont, Element.ALIGN_CENTER));table.addCell(createCell("商品一级分类", keyfont, Element.ALIGN_CENTER));table.addCell(createCell("商品二级分类", keyfont, Element.ALIGN_CENTER));table.addCell(createCell("品牌", keyfont, Element.ALIGN_CENTER));table.addCell(createCell("单位", keyfont, Element.ALIGN_CENTER));table.addCell(createCell("规格", keyfont, Element.ALIGN_CENTER));table.addCell(createCell("型号", keyfont, Element.ALIGN_CENTER));table.addCell(createCell("参数", keyfont, Element.ALIGN_CENTER));table.addCell(createCell("入库商品数量", keyfont, Element.ALIGN_CENTER));table.addCell(createCell(lable+"单价", keyfont, Element.ALIGN_CENTER));table.addCell(createCell(lable+"总价", keyfont, Element.ALIGN_CENTER));table.addCell(createCell(name, keyfont, Element.ALIGN_CENTER));table.addCell(createCell("申购方验收结果", keyfont, Element.ALIGN_CENTER));for (int j = 0; j < list.size(); j++) {PurchaseGoodsRecord record = list.get(j);table.addCell(createCell(String.valueOf(j + 1), textfont));table.addCell(createCell(DictUtils.getDictLabel(record.getPurchaseType(), "purchase_type", ""), textfont));table.addCell(createCell(DictUtils.getDictLabel(record.getChannel(), "channel", ""), textfont));table.addCell(createCell(record.getGoodsUrl(), textfont));table.addCell(createCell(record.getProductName(), textfont));table.addCell(createCell(record.getOneCategoryName(), textfont));table.addCell(createCell(record.getTwoCategoryName(), textfont));table.addCell(createCell(record.getBrand(), textfont));table.addCell(createCell(DictUtils.getDictLabel(record.getUnit(), "goods_unit", ""), textfont));table.addCell(createCell(record.getSpecification(), textfont));table.addCell(createCell(record.getModel(), textfont));table.addCell(createCell(record.getParameter(), textfont));table.addCell(createCell(record.getPracticalNum(), textfont));if(type.equals("1")){//单价if (StringUtils.isBlank(record.getPlatformUnitPrice())) {table.addCell(createCell("", textfont));} else {table.addCell(createCell(String.valueOf(Integer.valueOf(record.getPlatformUnitPrice()) / 100), textfont));}//总价if (StringUtils.isBlank(record.getPlatformTotalPrice())) {table.addCell(createCell("", textfont));} else {table.addCell(createCell(String.valueOf(Integer.valueOf(record.getPlatformTotalPrice()) / 100), textfont));}//平台商table.addCell(createCell(record.getPlatformName(), textfont));}else {//单价if (StringUtils.isBlank(record.getPurchaseUnitPrice())) {table.addCell(createCell("", textfont));} else {table.addCell(createCell(String.valueOf(Integer.valueOf(record.getPurchaseUnitPrice()) / 100), textfont));}//总价if (StringUtils.isBlank(record.getPurchaseTotalPrice())) {table.addCell(createCell("", textfont));} else {table.addCell(createCell(String.valueOf(Integer.valueOf(record.getPurchaseTotalPrice()) / 100), textfont));}//供应商table.addCell(createCell(record.getSupplierName(), textfont));}table.addCell(createCell("已入库", textfont));}table.setSpacingBefore(10f);// 设置表格上面空白宽度doc.add(table);//-------------------结算信息-------------------------Paragraph paragraphBlue81 = new Paragraph("", font2);Chunk titleChunk8 = new Chunk("结算信息", font2);//BaseColor.LIGHT_GRAYtitleChunk8.setBackground(BaseColor.LIGHT_GRAY, 10, 10, 470, 10);paragraphBlue81.add(titleChunk8);paragraphBlue81.setSpacingBefore(20);doc.add(paragraphBlue81);Paragraph totalPriceP = new Paragraph("", fontChinese);Chunk totalPrice = new Chunk("结算平台总额(元):" + purchaseSettlementDetail.getTotalPrice() + "\n");totalPriceP.add(totalPrice);totalPriceP.setSpacingBefore(20);doc.add(totalPriceP);//-------------------结算信息-------------------------Paragraph paragraphBlue812 = new Paragraph("", font2);Chunk titleChunk82 = new Chunk("附加信息", font2);//BaseColor.LIGHT_GRAYtitleChunk82.setBackground(BaseColor.LIGHT_GRAY, 10, 10, 470, 10);paragraphBlue812.add(titleChunk82);paragraphBlue812.setSpacingBefore(20);doc.add(paragraphBlue812);Paragraph remarksP = new Paragraph("", fontChinese);Chunk remarks = new Chunk("描述:" + purchaseSettlementDetail.getRemarks() + "\n");remarksP.add(remarks);remarksP.setSpacingBefore(20);doc.add(remarksP);Paragraph urlP = new Paragraph("", fontChinese);Chunk urlName = new Chunk("上传文件:" + purchaseSettlementDetail.getUrlName() + "\n");urlP.add(urlName);urlP.setSpacingBefore(20);doc.add(urlP);}/*** 创建指定列宽、列数的表格** @param widths* @return*/public PdfPTable createTable(float[] widths) {PdfPTable table = new PdfPTable(widths);try {table.setTotalWidth(maxWidth);table.setLockedWidth(true);table.setHorizontalAlignment(Element.ALIGN_CENTER);table.getDefaultCell().setBorder(1);} catch (Exception e) {e.printStackTrace();}return table;}/*** 创建单元格(指定字体)** @param value* @param font* @return*/public PdfPCell createCell(String value, Font font) {PdfPCell cell = new PdfPCell();cell.setVerticalAlignment(Element.ALIGN_MIDDLE);cell.setHorizontalAlignment(Element.ALIGN_CENTER);cell.setPhrase(new Phrase(value, font));return cell;}/*** 创建单元格(指定字体、水平..)** @param value* @param font* @param align* @return*/public PdfPCell createCell(String value, Font font, int align) {PdfPCell cell = new PdfPCell();cell.setVerticalAlignment(Element.ALIGN_MIDDLE);cell.setHorizontalAlignment(align);cell.setPhrase(new Phrase(value, font));return cell;}}

实体类参考


public class PurchaseSettlementDetail  {private static final long serialVersionUID = 1L;private String purchaseId;      // 采购订单idprivate String type;       // 0.采购结算1.平台结算private String status="已提交";     // 状态0已提交private String settlementNo;       // 结算单编号private String platformId;      // 平台商idprivate String platformName;        // 平台商名称private String contacts;        // 平台商联系人private String contactTel;     // 电话private String address;        // 地址private String title;      // 结算单标题private String totalPrice;      // 结算平台总额private String url;        // 附件private String urlName;        // 附件nameprivate String purchaseType;       // 采购类型private String channel;      // 渠道private Date startDate;        // 开始时间private Date endDate;        // 结束时间private String purchaseOfficeName;       // 申购方idprivate String purchaseTitle;       // 采购订单标题private String purchaseNo;     // 采购订单编号private Date purchaseDate;     // 生成订单时间private String contractName;       // 合同项目名称private String contractNo;     // 合同编号private Date contractSigningDate;        // 合同签订时间private String buildingUser;       // 使用单位idprivate String warrantyPeriod;     // 质保期限private String consideration;        // 合同约定金额(元)//计算数据private String goodsTypeSum;        // 商品品类总数private String num;        // 商品总数private String platformTotal;        // 结算平台总价private String goodsIds;       // 商品idsprivate String provinceId;      // 省idprivate String cityId;        // 市idprivate String areaId;        // 区/县idprivate Date createDate;public PurchaseSettlementDetail() {super();}public PurchaseSettlementDetail(String id){super(id);}@ExcelField(title="商品总数", align=2, sort=7)public String getNum() {return num;}public void setNum(String num) {this.num = num;}@ExcelField(title="平台商", align=2, sort=9)public String getPlatformName() {return platformName;}public void setPlatformName(String platformName) {this.platformName = platformName;}public String getContacts() {return contacts;}public void setContacts(String contacts) {this.contacts = contacts;}public String getContactTel() {return contactTel;}public void setContactTel(String contactTel) {this.contactTel = contactTel;}public String getAddress() {return address;}public void setAddress(String address) {this.address = address;}@ExcelField(title="商品品类总数", align=2, sort=6)public String getGoodsTypeSum() {return goodsTypeSum;}public void setGoodsTypeSum(String goodsTypeSum) {this.goodsTypeSum = goodsTypeSum;}public String getPlatformTotal() {return platformTotal;}public void setPlatformTotal(String platformTotal) {this.platformTotal = platformTotal;}@Length(min=0, max=64, message="采购订单id长度必须介于 0 和 64 之间")public String getPurchaseId() {return purchaseId;}public void setPurchaseId(String purchaseId) {this.purchaseId = purchaseId;}@Length(min=0, max=1, message="平台结算长度必须介于 0 和 1 之间")public String getType() {return type;}public void setType(String type) {this.type = type;}@Length(min=0, max=1, message="状态0已提交长度必须介于 0 和 1 之间")@ExcelField(title="状态", align=2, sort=10)public String getStatus() {return status;}public void setStatus(String status) {this.status = status;}@Length(min=0, max=100, message="结算单编号长度必须介于 0 和 100 之间")@ExcelField(title="结算单编号", align=2, sort=2)public String getSettlementNo() {return settlementNo;}public void setSettlementNo(String settlementNo) {this.settlementNo = settlementNo;}@Length(min=0, max=64, message="平台商id长度必须介于 0 和 64 之间")public String getPlatformId() {return platformId;}public void setPlatformId(String platformId) {this.platformId = platformId;}@Length(min=0, max=64, message="结算单标题长度必须介于 0 和 64 之间")@ExcelField(title="结算单标题", align=2, sort=1)public String getTitle() {return title;}public void setTitle(String title) {this.title = title;}@ExcelField(title="结算平台总价", align=2, sort=8)public String getTotalPrice() {return totalPrice;}public void setTotalPrice(String totalPrice) {this.totalPrice = totalPrice;}@Length(min=0, max=500, message="附件长度必须介于 0 和 500 之间")public String getUrl() {return url;}public void setUrl(String url) {this.url = url;}@ExcelField(title="采购类型", align=2, sort=4,dictType = "purchase_type")public String getPurchaseType() {return purchaseType;}public void setPurchaseType(String purchaseType) {this.purchaseType = purchaseType;}@ExcelField(title="渠道", align=2, sort=5,dictType = "channel")public String getChannel() {return channel;}public void setChannel(String channel) {this.channel = channel;}@JsonFormat(pattern = "yyyy-MM-dd")public Date getStartDate() {return startDate;}public void setStartDate(Date startDate) {this.startDate = startDate;}@JsonFormat(pattern = "yyyy-MM-dd")public Date getEndDate() {return endDate;}public void setEndDate(Date endDate) {this.endDate = endDate;}public String getPurchaseOfficeName() {return purchaseOfficeName;}public void setPurchaseOfficeName(String purchaseOfficeName) {this.purchaseOfficeName = purchaseOfficeName;}public String getPurchaseTitle() {return purchaseTitle;}public void setPurchaseTitle(String purchaseTitle) {this.purchaseTitle = purchaseTitle;}public String getPurchaseNo() {return purchaseNo;}public void setPurchaseNo(String purchaseNo) {this.purchaseNo = purchaseNo;}@JsonFormat(pattern = "yyyy-MM-dd")public Date getPurchaseDate() {return purchaseDate;}public void setPurchaseDate(Date purchaseDate) {this.purchaseDate = purchaseDate;}public String getContractName() {return contractName;}public void setContractName(String contractName) {this.contractName = contractName;}public String getContractNo() {return contractNo;}public void setContractNo(String contractNo) {this.contractNo = contractNo;}@JsonFormat(pattern = "yyyy-MM-dd")public Date getContractSigningDate() {return contractSigningDate;}public void setContractSigningDate(Date contractSigningDate) {this.contractSigningDate = contractSigningDate;}public String getBuildingUser() {return buildingUser;}public void setBuildingUser(String buildingUser) {this.buildingUser = buildingUser;}public String getWarrantyPeriod() {return warrantyPeriod;}public void setWarrantyPeriod(String warrantyPeriod) {this.warrantyPeriod = warrantyPeriod;}public String getConsideration() {return consideration;}public void setConsideration(String consideration) {this.consideration = consideration;}public String getUrlName() {return urlName;}public void setUrlName(String urlName) {this.urlName = urlName;}public String getGoodsIds() {return goodsIds;}public void setGoodsIds(String goodsIds) {this.goodsIds = goodsIds;}@Override@ExcelField(title="结算单生成时间", align=2, sort=3)@JsonFormat(pattern = "yyyy-MM-dd HH:mm")public Date getCreateDate() {return createDate;}@Overridepublic void setCreateDate(Date createDate) {this.createDate = createDate;}public String getProvinceId() {return provinceId;}public void setProvinceId(String provinceId) {this.provinceId = provinceId;}public String getCityId() {return cityId;}public void setCityId(String cityId) {this.cityId = cityId;}public String getAreaId() {return areaId;}public void setAreaId(String areaId) {this.areaId = areaId;}
}

2.前端接口

<form:form id="exportForm" modelAttribute="purchaseSettlementDetail" action="" method="post"class="form-search ">
</form:form>
//下载事件
form.on('submit(formSure)', function (data) {$("#exportForm").attr('action','${ctx}/settlement/purchaseSettlementDetail/downloadSettlement?type=0&id='+$("#id").val());$("#exportForm").submit();return false;
});

效果:

Java使用itextpdf生成PDF文件,用浏览器下载相关推荐

  1. java用itextPDF生成PDF文件保存至本地并上传至ftp服务器

    标题java用itextPDF生成PDF文件保存至本地并上传至ftp服务器 所需jar :itext-asian-5.2.0.jar,itextpdf-5.5.5.jar,commons-net-3. ...

  2. java 生成字体文件,java使用itext生成pdf文件-设置字体,itextpdf,import com.l

    java使用itext生成pdf文件-设置字体,itextpdf,import com.limport com.lowagie.text.Document;import com.lowagie.tex ...

  3. java使用itextpdf生成PDF批量打印荣誉证书(指定位置输出文字)

    最近公司项目有个需求,批量打印荣誉证书,一开始尝试过传统的网络打印,控件打印,JS调用浏览器打印方法,遇到各种问题,比如定位不准,分页问题,​​缩放问题等.然后就自己研究,整理了一套打印方案,项目已测 ...

  4. java根据模板生成pdf文件并导出(iText)

    java根据模板生成pdf文件并导出 首先你的制作一个pdf模板: 1.先用word做出模板界面 2.文件另存为pdf格式文件 3.通过Adobe Acrobat pro软件打开刚刚用word转换成的 ...

  5. java在linux生成pdf文件,从 Java 应用程序动态生成 PDF 文件

    简介: 如果您的应用程序需要动态生成 PDF 文档,那么您需要 iText 库.开源的 iText 库使得 PDF 的创建变得轻松易行.本文介绍了 iText 并提供了一个使用它从 Java 技术应用 ...

  6. Java根据模板生成pdf文件并导出

    原文地址:http://blog.csdn.net/TOP__ONE/article/details/65442390 首先你的制作一个pdf模板: 1.先用word做出模板界面 2.文件另存为pdf ...

  7. java调用wkhtmltopdf生成pdf文件,美观,省事

    最近项目需要导出企业风险报告,文件格式为pdf,于是搜了一大批文章都是什么Jasper Report,iText ,flying sauser ,都尝试了一遍,感觉不是我想要的效果, 需要自己调整好多 ...

  8. Java通过itextpdf生成PDF

    通过Java生成PDF我用的是itextpdf,需要引入的pop坐标如下 <!-- https://mvnrepository.com/artifact/com.itextpdf/itextpd ...

  9. java使用itextpdf生成pdf并填充自定义数据

    项目中有个需求,对于已有的数据生成对应的发票pdf或者合同pdf,这些pdf具有一些特性,就是pdf有固定的格式,类似于表格,我们只要往表格里面填充数据即可.当然,也会涉及到签章,二维码等需求. 总体 ...

最新文章

  1. win7安装mysql-8.0.13-winx64
  2. 这么多年,终于有人讲清楚Transformer了
  3. 内存储器和cpu一起构成了计算机,计算机系统的组成
  4. eclipse 怎么关闭 show children
  5. 牛客 - 牛牛的最大兴趣组(思维+数论)
  6. linux中向空文件写入内容,linux – 为什么写入现有文件比写一个新的空文件更快?...
  7. java web html5区别_html5和html有什么区别啊?
  8. Redis开启远程访问,你需要注意这些问题
  9. Leetcode题medium48/54/55/56/59/62/63/64,Python多种解法(四)
  10. python作业-12
  11. Java面试题大全(Android版)
  12. 跨境电商难做?你需要知道这5个“低成本低风险”跨境电商项目
  13. 免费好用的PC端屏幕录制软件
  14. 基于MTK65xx平台lcm和背光驱动的编写
  15. java 验证手机号码、电话号码(包括最新的电信、联通和移动号码) 1
  16. Sketch使用教程(三)
  17. java 软尾 铝_软尾入门车款:JAVA FURIA 27.5上市
  18. 5 年前端经验的大佬提供的职业规划
  19. Excel学习(快捷键和函数)
  20. 聚合函数,数学、字符串、函数,时间日期函数

热门文章

  1. f15纸飞机折法_折纸战斗机之F15鹰式折纸战斗机的折法视频教程【折纸飞机大全】...
  2. [优化精髓]搜索引擎优化应该重视什么?
  3. 《赛博朋克2077》安装方法+使用手册。附补丁更新地址
  4. 日记侠:普通人如何玩转精准引流?
  5. java自动违例设计,Java违例控制总结
  6. 密钥ssh 配置操作
  7. Yahoo Programming Contest 2019 D - Ears
  8. Java Exception最佳实践
  9. 【除夕特辑】爱心代码python(程序员的浪漫)
  10. LVGL之学习篇(一)