SpringBoot的java打印票据-3

配置打印xml文件并解析

打印东西,先设置纸张大小,各种参数。若把数字直接填写到打印过程,之后的更改比较麻烦,这里配置一个xml文件,所有的参数都从这里取出打印。

1.构建printSettings.xml文件,放置于resources中。

<print>
    <!-- 打印机设置 -->
    <choosePrint>3</choosePrint>
    <!-- 打印任务名称 -->
    <printName>PDF</printName>
    <!-- 打印机选择,为空时选择默认打印机 -->
    <defPrintName></defPrintName>
    <!-- true:配置生效,false:配置不生效 -->
    <isPrint>true</isPrint>
    <!-- 二维码尺寸90*90 -->
    <qrcodeSize>70</qrcodeSize>
    <!--存放二维码的基本地址-->
    <basePath>G:\JavaPrintQRCode\</basePath>
    <!-- 纸张设置 -->
    <paper>
        <!-- 打印纸张设置paperWidth,paperHeight -->
        <paperWidth>595</paperWidth>
        <paperHeight>842</paperHeight>
        <!-- 打印区域设置x,y,width,height -->
        <x>10</x>
        <y>15</y>
        <width>580</width>
        <height>840</height>
    </paper>
    <!--条形码参数-->
    <tmParameters>
        <paperWidth>200</paperWidth>
        <paperHeight>150</paperHeight>
        <useWidth>180</useWidth>
        <useHeight>100</useHeight>
        <useX>5</useX>
        <useY>10</useY>
        <x>20</x>
        <y>40</y>
        <width>170</width>
        <height>50</height>
        <path>D:\JavaPrintTmCode\</path>
        <titleFontName>宋体</titleFontName>
        <titleSize>10</titleSize>
        <addressSize>20</addressSize>
        <numberSize>10</numberSize>
        <companyName>玖陆物流</companyName>
        <tmPrintName>Xprinter XP-365B</tmPrintName>
        <!--<tmPrintName>360</tmPrintName>-->
    </tmParameters>
    <!-- 打印数据参数设置 -->
    <dataset>
        <data x="5" y="30" name="startAddress" cellWidth="" cellHeight="" font="宋体" size="16"/>
        <datas name="appGoodsOrder" type="">
            <data x="110" y="110" name="goodsName" />
            <data x="205" y="110" name="goodsPkgs" />
            <data x="295" y="110" name="goodsPackage" />
        </datas>

        <!--费用格式-->
        <datas name="appFeeOrder" type="">
            <data x="70" y="230" name="feeText" />
        </datas>

        <table x="" y="" width="" height="">
            <tr width="" height="">
                <td width="" height="" colspan="" rowspan="" ></td>
                <td width="" height=""></td>
            </tr>
        </table>

    </dataset>
</print>

设置好之后,到pom文件中按下alt + insert 引入maven依赖

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.16.20</version>
</dependency>

让节点构成实体。这样方便我们在打印过程中取值。下面是我的实体结构,从最上层逐步往下。 

其中PrintSettings类是最上层。在加入注解时,可能会有重复的名称,我们需要加入 @XmlTransient注解,这样只在@XmlRootElement注解的实体中找寻有无重复,不管其他类的变量。展示一下最上层和其次顺序的类。

package com.cargo.order.settings;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import javax.xml.bind.annotation.*;

/**
 *打印设置POJO
 * @since 2020/3/25 8:46
 **/
@Data
@AllArgsConstructor
@NoArgsConstructor
@XmlRootElement(name = "print")
@XmlAccessorType(XmlAccessType.FIELD)
public class PrintSettings {
    @XmlElement(name = "choosePrint")
    private String choosePrint;
    @XmlElement(name = "printName")
    private String printName;
    @XmlElement(name = "isPrint")
    private Boolean isPrint;
    @XmlElement(name = "qrcodeSize")
    private Integer qrcodeSize;
    @XmlElement(name = "basePath")
    private String basePath;
    @XmlElement(name = "paper")
    private Paper paper;
    @XmlElement(name = "dataset")
    private DataSet dataSet;
    @XmlElement(name = "tmParameters")
    private TmParameters tmParameters;

    public TmParameters getTmParameters() {
        return tmParameters;
    }

    public void setTmParameters(TmParameters tmParameters) {
        this.tmParameters = tmParameters;
    }

    public String getChoosePrint() {
        return choosePrint;
    }

    public void setChoosePrint(String choosePrint) {
        this.choosePrint = choosePrint;
    }

    public String getPrintName() {
        return printName;
    }

    public void setPrintName(String printName) {
        this.printName = printName;
    }

    public Boolean getPrint() {
        return isPrint;
    }

    public void setPrint(Boolean print) {
        isPrint = print;
    }

    public Integer getQrcodeSize() {
        return qrcodeSize;
    }

    public void setQrcodeSize(Integer qrcodeSize) {
        this.qrcodeSize = qrcodeSize;
    }

    public Paper getPaper() {
        return paper;
    }

    public void setPaper(Paper paper) {
        this.paper = paper;
    }

    public DataSet getDataSet() {
        return dataSet;
    }

    public void setDataSet(DataSet dataSet) {
        this.dataSet = dataSet;
    }

    public String getBasePath() {
        return basePath;
    }

    public void setBasePath(String basePath) {
        this.basePath = basePath;
    }
}

然后展示一下Paper实体.

package com.cargo.order.settings;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlTransient;

@Data
@AllArgsConstructor
@NoArgsConstructor
@XmlRootElement(name = "paper")
public class Paper {
    @XmlElement(name = "paperWidth")
    private Integer paperWidth;
    @XmlElement(name = "paperHeight")
    private Integer paperHeight;
    @XmlElement(name = "x")
    private Integer x;
    @XmlElement(name = "y")
    private Integer y;
    @XmlElement(name = "width")
    private Integer width;
    @XmlElement(name = "height")
    private Integer height;
    @XmlTransient
    public Integer getPaperWidth() {
        return paperWidth;
    }

    public void setPaperWidth(Integer paperWidth) {
        this.paperWidth = paperWidth;
    }
    @XmlTransient
    public Integer getPaperHeight() {
        return paperHeight;
    }

    public void setPaperHeight(Integer paperHeight) {
        this.paperHeight = paperHeight;
    }
    @XmlTransient
    public Integer getX() {
        return x;
    }

    public void setX(Integer x) {
        this.x = x;
    }
    @XmlTransient
    public Integer getY() {
        return y;
    }

    public void setY(Integer y) {
        this.y = y;
    }
    @XmlTransient
    public Integer getWidth() {
        return width;
    }

    public void setWidth(Integer width) {
        this.width = width;
    }
    @XmlTransient
    public Integer getHeight() {
        return height;
    }

    public void setHeight(Integer height) {
        this.height = height;
    }
}

在要用的地方直接静态代码块,加载一次,使用,比如:

 private static  PrintSettings printSettings;
    static {
        try {
            //读取Resource目录下的XML文件
            Resource resource = new ClassPathResource("printSettings.xml");
            //利用输入流获取XML文件内容
            BufferedReader br = new BufferedReader(new InputStreamReader(resource.getInputStream(), "UTF-8"));
            StringBuffer buffer = new StringBuffer();
            String line = "";
            while ((line = br.readLine()) != null) {
                buffer.append(line);
            }
            br.close();
            //XML转为JAVA对象
            PrintSettings settings = (PrintSettings) XmlBuilder.xmlStrToObject(PrintSettings.class, buffer.toString());
            printSettings = settings;
        }catch (Exception e){
            logger.error("异常",e);
        }
    }

到此xml文件配置好了,也可以使用。
代码已上传到gitee

原文地址:https://www.cnblogs.com/Choleen/p/12585346.html

时间: 2024-08-04 06:37:53

SpringBoot的java打印票据-3的相关文章

springboot的java打印票据

Java打印的几个步骤 1构建springboot框架 2引入log日志 3构建java打印xml文件 4解析xml配置文件 5java打印 由于需要,现在要实现一个java打印的程序.我们开始第一步构建springboot项目. 第一步 打开idea,new 一个Project,选择Spring initializr 初始化一个springboot项目.在pom文件中按下alt + insert 选择Dependency使用idea的引入maven依赖.如下: <!--基础依赖--> <

Java打印整数的二进制表示(代码与解析)

Java打印整数的二进制表示(代码与解析) int a=-99; for(int i=0;i<32;i++){ int t=(a & 0x80000000>>>i)>>>(31-i); System.out.print(t); } 拆分一下这段代码,要理解这个移位输出的问题还需要理解的以下内容:* 0x80000000是数的十六进制表示,转成二进制表示为10000000000000000000000000000000* 运算的优先级,移位运算高于逻辑运算,

java 打印流PrintWriter基本操作

import java.io.*; public class PrintDemo { public static void main(String[] args) { PrintWriter writer=null; writer=new PrintWriter(System.out); String str=new String("Hello cjc!!!"); writer.print(str); writer.close(); try { writer=new PrintWrit

.net 调用小票打印机 打印票据

public class PrintInvoice     { #region 01.获得打印机1获得吧台打印机2获得后厨打印机 /// <summary> /// 获得打印机1获得吧台打印机2获得后厨打印机 /// </summary> public TcpClient GetPrint(int n = 1) { var client = new System.Net.Sockets.TcpClient(); var bll = new PrintAndPlaceBll(); v

java打印正金字塔,倒金字塔和“水影”金字塔

java打印正金字塔,倒金字塔和"水影"金字塔 --------原创文章,若要转载,请注明出处 小小少年 闲来无事,想起自己初学java的时候做的经典的无非就是打印出一些有意思的图形,心血来潮自己就写了这么一个打印金字塔的demo,自己回顾一下当初的感受,同时也 分享给初学java的同道中人,一起来培养编程的兴趣<(^-^)>. 金字塔图案 1,问题分析 我们都知道,打印输出的时候,都是从最左端输出,而这里,第一个星号是在中间.这实际是因为星号之前有很多空格.当我们使用问号

WPF打印票据

最近工作的内容是有关于WPF的,整体开发没有什么难度,主要是在打印上因为没有任何经验,犯了一些难,不过还好,解决起来也不是很费劲. WPF打印票据或者是打印普通纸张区别不大,只是说打印票据要把需要打的内容摆放好位置,搞定缩放比例,就可以放入票据直接打印了. 那么关键点就是3个: 1.使用WPF提供的什么类.什么方法来执行打印 2.如何摆放位置 3.如何搞定缩放比例 1.使用WPF提供的什么类.什么方法来执行打印 这个问题很容易解决,搜索下WPF打印或WPF Print,就能找到示例代码. 那么我

Java 打印金字塔 or 打印带数字的金字塔 (Java 学习中的小记录)

Java 打印金字塔 or 打印带数字的金字塔 (Java 学习中的小记录) 作者:王可利(Star·星星) 效果图: 代码如下: 1 class Star8 2 { 3 public static void main(String[] args) 4 { 5 /* 空格 6 * 1 2*i-1 3 4-1 4-i 7 *** 3 2 4-2 8 ***** 5 1 4-3 9 ******* 7 0 4-4 10 */ 11 //第一层循环控制的是行数 12 for(int i = 1;i<=

关于这两天研究Java打印pdf方法的记录

这两天在研究Java调用打印机打印PDF文件的方法,学到了不少东西,特别来记录一下. 关于Java打印网上最多的而且也是Java正统的打印方法就是使用PrintService,一套比較标准的打印代码例如以下: public class PrintDemo { public static void main(String[] args) { JFileChooser fileChooser = new JFileChooser(); // 创建打印作业 int state = fileChoose

用Java打印乘法口诀表

用Java打印乘法口诀表: public class MultiplicationTable{ public static void main(String[] args){ for(int i = 1; i < 10; i++){ for(int j = 1; j <= i; j++){ System.out.print(j + "*" + i + "=" + i*j + " "); } System.out.print("