pdf文件生成及条形码生成
1.导入依赖
<!-- pdf-->
<dependency>
<groupId>com.lowagie</groupId>
<artifactId>itext</artifactId>
<version>2.0.6</version>
</dependency>
<!-- 条形码-->
<dependency>
<groupId>net.sf.barcode4j</groupId>
<artifactId>barcode4j</artifactId>
<version>2.1</version>
</dependency>
2.示例
controller层
/**
* 生成pdf
*/
@RequestMapping("generationPickingPDF")
@ResponseBody
public String generationPickingPDF(@RequestParam("id") Long id, HttpServletResponse response) {
try {
String prerecordInPdfLocation = "/tmp" + File.separator;
File bakFile = new File(prerecordInPdfLocation);
DeliveryOrder deliveryOrder = deliveryOrderBiz.selectDeliveryOrderById(id);
SessionStaffInfo user = getUser();
if (!deliveryOrder.getPickingOper().equals(user.getStaffInfo().getStaffName())) {
log.error("当前操作人不是拣货人!");
throw new BusinessException("当前操作人不是拣货人!");
}
String pdfName = deliveryOrderBiz.generationPickingPDF(deliveryOrder.getId(), "/tmp");
bakFile = new File(pdfName);
BufferedInputStream bis = null;
BufferedOutputStream bos = null;
OutputStream fos = null;
InputStream fis = null;
fis = new FileInputStream(bakFile);
bis = new BufferedInputStream(fis);
fos = response.getOutputStream();
bos = new BufferedOutputStream(fos);
response.setContentType("application/pdf");
int bytesRead = 0;
byte[] buffer = new byte[512];
while ((bytesRead = bis.read(buffer)) != -1) {
bos.write(buffer);// 将文件发送到客户端 , 0, bytesRead
}
bos.close();
bis.close();
fos.close();
fis.close();
} catch (Exception e) {
log.error("生成出库单pdf报错", e);
return e.getMessage();
}
return WmsControllerHelper.renderSuccessJson();
}
service层
/**
* 生成pdf
*/
public String generationPickingPDF(Long id, String PDFPath) throws Exception {
//pdf板式设置
Document document = new Document(PageSize.A4, 5, 5, 0, 0);
//设置中文字体
BaseFont bfChinese = BaseFont.createFont("/font/SimHei.ttf", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
//寻常显示字体
Font keyfont = new Font(bfChinese, 10, Font.COURIER);
Font textfont = new Font(bfChinese, 10, Font.NORMAL);
//标题字体
Font Titlefont = new Font(bfChinese, 16, Font.COURIER);
//设置生成路径
File bakDir = new File(PDFPath);
if (!bakDir.isDirectory()) {
bakDir.mkdirs();
}
String PDFName = PDFPath + File.separator + "出库单_" + id + ".pdf";
PdfWriter.getInstance(document, new FileOutputStream(new File(PDFName)));
//打开文件
document.open();
document.newPage();
//创建标题
Paragraph title = new Paragraph("拣货任务", Titlefont);
title.setAlignment(Element.ALIGN_CENTER);
document.add(title);
//表头查询
DeliveryOrder deliveryOrder = new DeliveryOrder();
deliveryOrder.setId(id);
DeliveryOrder deliveryOrder1 = this.selectOne(deliveryOrder);
SimpleDateFormat sdfs = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
String vendor = sdfs.format(new Date());
//表头样式,创建一个两列的表头
Table tHeader = new Table(2);
//设置每列的列宽
float[] widthsHeader = {2f, 3f};
tHeader.setWidths(widthsHeader);
tHeader.setWidth(100);
tHeader.setPadding(2);
//设置表格线不显示
tHeader.setBorder(0);
tHeader.getDefaultLayout().setBorder(PdfPCell.NO_BORDER);
//出库单号
Cell c1Header = new Cell(new Paragraph("出库单号: " + deliveryOrder1.getDeliveryOrderCode(), keyfont));
tHeader.addCell(c1Header);
// 显示条形码
String filepath = PDFPath + File.separator + id + ".jpg";
OneBarcodeUtil.createBarCode(deliveryOrder1.getDeliveryOrderCode(), filepath);
Image jpeg = Image.getInstance(filepath);
jpeg.setAlignment(Image.ALIGN_CENTER);
jpeg.scaleAbsolute(240, 70);
c1Header = new Cell(jpeg);
c1Header.setRowspan(5);
tHeader.addCell(c1Header);
//客户名称
c1Header = new Cell(new Paragraph("客户名称: " + deliveryOrder1.getCustomerName(), keyfont));
tHeader.addCell(c1Header);
//拣货人员
c1Header = new Cell(new Paragraph("拣货人员: " + deliveryOrder1.getPickingOper(), keyfont));
tHeader.addCell(c1Header);
//拣货时间
c1Header = new Cell(new Paragraph("拣货时间: " + vendor, keyfont));
tHeader.addCell(c1Header);
//添加
tHeader.setBorder(0);
document.add(tHeader);
//生成内容表头,定义一个有5列的表格
Table t = new Table(5);
//设置每列的宽度
float[] widths = {1.0f, 1.7f, 0.8f, 2f, 0.8f};
t.setWidths(widths);
t.setWidth(100);
t.setPadding(2);
Cell c1 = new Cell(new Paragraph("商品货号", keyfont));
c1.setHorizontalAlignment(Cell.ALIGN_CENTER);
c1.setVerticalAlignment(Cell.ALIGN_MIDDLE);
t.addCell(c1);
c1 = new Cell(new Paragraph("商品名称", keyfont));
c1.setHorizontalAlignment(Cell.ALIGN_CENTER);
c1.setVerticalAlignment(Cell.ALIGN_MIDDLE);
t.addCell(c1);
c1 = new Cell(new Paragraph("库存类型", keyfont));
c1.setHorizontalAlignment(Cell.ALIGN_CENTER);
c1.setVerticalAlignment(Cell.ALIGN_MIDDLE);
t.addCell(c1);
c1 = new Cell(new Paragraph("库位信息", keyfont));
c1.setHorizontalAlignment(Cell.ALIGN_CENTER);
c1.setVerticalAlignment(Cell.ALIGN_MIDDLE);
t.addCell(c1);
c1 = new Cell(new Paragraph("出库数量", keyfont));
c1.setHorizontalAlignment(Cell.ALIGN_CENTER);
c1.setVerticalAlignment(Cell.ALIGN_MIDDLE);
t.addCell(c1);
//查询详情
DeliveryOrderDetail deliveryOrderDetail = new DeliveryOrderDetail();
deliveryOrderDetail.setDeliveryOrderCode(deliveryOrder1.getDeliveryOrderCode());
List<DeliveryOrderDetail> deliveryOrderDetails = deliveryOrderDetailMapper.selectDeliveryOrderDetailList(deliveryOrderDetail);
//生成内容
for (DeliveryOrderDetail detail : deliveryOrderDetails) {
Cell c2 = new Cell(new Paragraph(detail.getBarCode(), textfont));//商品货号
c2.setHorizontalAlignment(Cell.ALIGN_CENTER);
c2.setVerticalAlignment(Cell.ALIGN_MIDDLE);
t.addCell(c2);
c2 = new Cell(new Paragraph(detail.getItemName(), textfont));//商品名称
c2.setHorizontalAlignment(Cell.ALIGN_CENTER);
c2.setVerticalAlignment(Cell.ALIGN_MIDDLE);
t.addCell(c2);
String inventoryName = StrUtil.equals(detail.getInventoryType(), "ZP") ? "正品" : "次品";
c2 = new Cell(new Paragraph(inventoryName, textfont));//库存类型
c2.setHorizontalAlignment(Cell.ALIGN_CENTER);
c2.setVerticalAlignment(Cell.ALIGN_MIDDLE);
t.addCell(c2);
c2 = new Cell(new Paragraph(detail.getForzenInfo(), textfont));//库位信息
c2.setHorizontalAlignment(Cell.ALIGN_CENTER);
c2.setVerticalAlignment(Cell.ALIGN_MIDDLE);
t.addCell(c2);
c2 = new Cell(new Paragraph(String.valueOf(detail.getOutQty()), textfont));//出库数量
c2.setHorizontalAlignment(Cell.ALIGN_CENTER);
c2.setVerticalAlignment(Cell.ALIGN_MIDDLE);
t.addCell(c2);
}
document.add(t);
document.close();
return PDFName;
}
条形码工具类
package com.qst.security.wms.util;
import org.krysalis.barcode4j.impl.code39.Code39Bean;
import org.krysalis.barcode4j.output.bitmap.BitmapCanvasProvider;
import org.krysalis.barcode4j.tools.UnitConv;
import java.awt.image.BufferedImage;
import java.io.*;
public class OneBarcodeUtil {
public static void main(String[] args) {
try {
//Create the barcode bean
Code39Bean bean = new Code39Bean();
final int dpi = 100;
//Configure the barcode generator
bean.setModuleWidth(UnitConv.in2mm(1.0f / dpi)); //makes the narrow bar
//width exactly one pixel
bean.setWideFactor(3);
bean.doQuietZone(false);
File outputFile = new File("d:\\out.png");
OutputStream out = new FileOutputStream(outputFile);
try {
//Set up the canvas provider for monochrome JPEG output
BitmapCanvasProvider canvas = new BitmapCanvasProvider(
out, "image/png", dpi, BufferedImage.TYPE_BYTE_BINARY, false, 0);
bean.generateBarcode(canvas, "A123456");
//Signal end of generation
canvas.finish();
} finally {
out.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 创建二维码图片
* @param code
* @param path
*/
public static void createBarCode(String code, String path){
try {
Code39Bean bean = new Code39Bean();
final int dpi = 150;
bean.setModuleWidth(UnitConv.in2mm(1.0f / dpi));
bean.setWideFactor(3);
bean.doQuietZone(false);
File outputFile = new File(path);
OutputStream out = new FileOutputStream(outputFile);
try {
BitmapCanvasProvider canvas = new BitmapCanvasProvider(
out, "image/png", dpi, BufferedImage.TYPE_BYTE_BINARY, false, 0);
bean.generateBarcode(canvas, code);
canvas.finish();
} finally {
out.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 生成二维码图片
* @author ggboy
*/
public static byte[] createBarCode(String code) throws IOException {
int dpi = 150;
ByteArrayOutputStream out = new ByteArrayOutputStream();
try {
Code39Bean bean = new Code39Bean();
bean.setModuleWidth(UnitConv.in2mm(1.0f / dpi));
bean.setWideFactor(3);
bean.doQuietZone(false);
BitmapCanvasProvider canvas = new BitmapCanvasProvider(out, "image/png", dpi, BufferedImage.TYPE_BYTE_BINARY, false, 0);
bean.generateBarcode(canvas, code);
canvas.finish();
return out.toByteArray();
} finally {
try { out.close(); } catch (IOException e) { }
}
}
}
3 总结
Java生成条形码的方案 — barcode4j、zxing
barcode4j
barcode4j开源Java条形码生成库。支持多种编码格式,比如:code-39,code-128等,详细的格式可以参照下面
Welcome to Barcode4J
zxing
是由google开源的1D/2D编解码类库。目标是能够对QR编码、Data Matrix、UPC的1D条形码进行解码。 其提供了多种平台下的客户端包括:J2ME、J2SE和Android
详细参照:
[itext]Java生成PDF文件_SKM!!!的博客-CSDN博客
Java条形码生成技术-Barcode4j_清水的博客-CSDN博客_barcode4j
Java实现二维码生成
还没有评论,来说两句吧...