Java itext zxing 生成带中文的二维码
程序员文章站
2022-06-28 10:11:53
import com.google.zxing.BarcodeFormat;import com.google.zxing.EncodeHintType;import com.google.zxing.WriterException;import com.google.zxing.client.j2se.MatrixToImageWriter;import com.google.zxing.common.BitMatrix;import com.google.zxing.qrcode.QRCod....
import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.WriterException;
import com.google.zxing.client.j2se.MatrixToImageWriter;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.QRCodeWriter;
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
import com.itextpdf.text.Document;
import com.itextpdf.text.Image;
import com.itextpdf.text.Rectangle;
import com.itextpdf.text.pdf.*;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.file.FileSystems;
import java.nio.file.Path;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class Main {
public static void main(String[] args) {
String pdfPath = "C:\\Users\\Administrator\\Desktop\\新建文件夹 (2)\\完成.pdf";
long start = System.currentTimeMillis();
List<String> list = new ArrayList<>();
for(int i=0;i<10000;i++){
list.add("1、设备名称:国家新标准\n" +
"2、设备编号:"+i+"\n" +
"3、规格型号:0.075-60mm\n" +
"4、生产厂家:仪器设备有限公司\n" +
"5、进场日期:2020年12月15日\n" +
"6、检定单位:检测认证有限公司\n" +
"7、检定日期:2020年12月24日\n" +
"8、管理人员:张三\n" +
"9、存放位置:卧室");
}
createPdfByList(pdfPath,list);
long end = System.currentTimeMillis();
System.out.println("使用时间为:"+(end-start)+"毫秒");
//有点慢啊 1秒。 一万个? 1000= 20秒 还是慢
}
public static void createPdfByList(String pdfPath,List<String> list){
float pageWidth = 125f;
float pageHeight = 200f;
try {
float pt = 72f / 25.4f;
Document document = new Document(new Rectangle(pageWidth * pt, pageHeight * pt));//新建一个文档并且设置页面大小
FileOutputStream outputStream = outputStream = new FileOutputStream(pdfPath);//新建一个pdf文档;
PdfWriter writer = PdfWriter.getInstance(document, outputStream);//把新建的pdf 赋值给 document
writer.setPdfVersion(PdfWriter.VERSION_1_5);
document.open();//打开 document文档
PdfContentByte cb = writer.getDirectContent();
int k =0;
for(String str: list){
System.out.println(k++);
document.newPage();
String pngPath = generateQRCodeImage(str, 350, 350);
Image image = Image.getInstance(pngPath);
cb.addImage(image,image.getWidth(),0,0,image.getHeight(),pt*(pageWidth-image.getWidth()/pt)/2,
pageHeight * pt-image.getHeight());
String [] arr = str.split("\n");
for(int i=0;i<arr.length;i++){
addText(cb,15*pt,25*(arr.length-i),arr[i]);
}
}
outputStream.flush();//关闭文件
document.close();//关闭文件
outputStream.close();//关闭文件
} catch (Exception e) {
e.printStackTrace();
}
}
public static void addText(PdfContentByte cb,float x,float y,String content){
if(null!=content){
try{
ExtendedColor baseColor=new CMYKColor(0f,0f,0f,1f);
cb.setColorFill(baseColor);
//使用了微软雅黑字体
BaseFont baseFont = BaseFont.createFont("C:/Windows/Fonts/msyh.ttf",BaseFont.IDENTITY_H,BaseFont.NOT_EMBEDDED);
cb.beginText();
//字号 19
cb.setFontAndSize(baseFont, 19);
cb.showTextAligned(PdfContentByte.ALIGN_LEFT,content, x, y, 0);
cb.endText();
}catch(Exception e){
e.printStackTrace();
}
}
}
private static String generateQRCodeImage(String text, int width, int height) throws WriterException, IOException {
QRCodeWriter qrCodeWriter = new QRCodeWriter();
Map hints = new HashMap();
//设置UTF-8, 防止中文乱码
hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");
//设置二维码四周白色区域的大小
hints.put(EncodeHintType.MARGIN, 0);
//设置二维码的容错性
hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);
BitMatrix bitMatrix = qrCodeWriter.encode(text, BarcodeFormat.QR_CODE, width, height, hints);
long l = System.currentTimeMillis();
String pngPath = "C:\\Users\\Administrator\\Desktop\\新建文件夹 (2)\\"+l+".png";
Path path = FileSystems.getDefault().getPath(pngPath);
MatrixToImageWriter.writeToPath(bitMatrix, "PNG", path);
return pngPath;
}
}
本文地址:https://blog.csdn.net/jialan75/article/details/112006942
推荐阅读
-
java生成带logo和文字的二维码图片并以IO流返回给前端展示
-
JAVA 基于maven生成带logo的二维码
-
彩色二维码生成器,带logo文字和中心文字 彩色二维码生成器,带logo文字和中心文字 使用.net 4.0和zxing开发, 内容支持中文,使用UTF-8编码,一般扫描二维码软件可以识别。 最上方显示文字log,字数可以调节。 正中间的圆圈内显示中心文字。 微盘下载地址:彩色二维码生成器.net2.0win7可用byKimmKing.zip
-
彩色二维码生成器,带logo文字和中心文字 彩色二维码生成器,带logo文字和中心文字 使用.net 4.0和zxing开发, 内容支持中文,使用UTF-8编码,一般扫描二维码软件可以识别。 最上方显示文字log,字数可以调节。 正中间的圆圈内显示中心文字。 微盘下载地址:彩色二维码生成器.net2.0win7可用byKimmKing.zip
-
Java itext zxing 生成带中文的二维码
-
Java如何生成带网站链接(URL)的二维码
-
java中ZXing 生成、解析二维码图片的小示例
-
Java利用Zxing生成二维码的简单实例
-
Java基于google zxing如何生成以及解码二维码的实例
-
java中ZXing 生成、解析二维码图片的小示例