Java調用打印相關接口示例代碼的實現


package com.yumu.airshow.Controller;


import com.yumu.airshow.Model.PrintItem;
import com.yumu.airshow.Model.PrintModel;
import io.swagger.annotations.ApiOperation;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.imageio.ImageIO;
import javax.print.DocFlavor;
import javax.print.PrintService;
import javax.print.PrintServiceLookup;
import javax.print.attribute.HashPrintRequestAttributeSet;
import java.awt.image.BufferedImage;
import java.awt.print.*;
import java.awt.*;
import java.io.File;
import java.io.FileInputStream;
import java.util.List;

 /*
        A0=1189*841
        A1=841*594
        A2=594*420
        A3=420*297
        A4=210*297 長寬是8.27英寸*11.69英寸
        * */
/*
 *  paper.setSize(width,height)
 *  紙張高寬=紙張英寸*72 = 厘米/2.54*72
 *  比如A4=21/2.54*72=595
 * */


/*實現套打,把套打的格式當成一張圖片,將要填入的數據按其在圖片在坐標來定位*/
@Controller
@ResponseBody
@RequestMapping("/print")
@ApiOperation("打印票證信息")
public class PrintController implements Printable {

    private PrintItem value = null;

    /**
     * implements Printable
     * PageFormat類描述了頁面的定位信息、它的尺寸以及每英尺可繪制的區域(單位1/72nd)。
     */

    public int print(Graphics g, PageFormat pf, int pageIndex) {

        // 設置一次打印任務總打印頁數
        if (pageIndex > 9999) {
            return Printable.NO_SUCH_PAGE;
        }
        Graphics2D g2d = (Graphics2D) g;
        for (PrintModel printModel : value.getParams()) {
            float x = printModel.getX();
            float y = printModel.getY();
            int type = printModel.getType();
            String content = printModel.getContent();//數據或者鏈接
            /*數據類型為普通string*/
            if (type == 0) {
                String strFont = printModel.getFont();
                Color  color = printModel.getColor();
                int size = 24;//設置默認字體大小
                size = printModel.getSize();
                if(strFont == null) strFont = "新宋體";//設置默認字體
                Font font = new Font(strFont, Font.PLAIN, size);
                g2d.setFont(font);
                g2d.setColor(Color.blue);
                g2d.drawString(content,x,y);
            }
            /*圖片類型的參數*/
            if (type == 1) {
                float width = printModel.getWidth();
                float height = printModel.getHeight();
                BufferedImage image2 = null;
                try {
                    image2 = ImageIO.read(new FileInputStream(new File(content)));
                } catch (Exception e) {
                    e.printStackTrace();
                }
                g2d.drawImage(image2, (int)x, (int)y, (int)width, (int)height, null);
            }
        }
        return Printable.PAGE_EXISTS;
    }

    @PostMapping("/detail")
    public void main(@Validated @RequestBody List<PrintItem> printItems, BindingResult bindingResult) {
        printReport(printItems);
    }

    @PostMapping("/printServices")
    public PrintService[] PrintService(){
        HashPrintRequestAttributeSet pras = new HashPrintRequestAttributeSet();
        DocFlavor flavor = DocFlavor.INPUT_STREAM.AUTOSENSE;
        //查找所有的可用的打印服務
        PrintService[] printService = PrintServiceLookup.lookupPrintServices(flavor, pras);
        System.out.println("this is name;"+printService[0].getName());
        return printService;
    }

    public void printReport(List<PrintItem> printItems) {

        PrinterJob printerJob = PrinterJob.getPrinterJob();//創建一個打印任務
        PageFormat pageFormat = PrinterJob.getPrinterJob().defaultPage();
        Paper paper = pageFormat.getPaper();
        // 設置頁面高和寬,A4紙為 595,842 長寬是8.27英寸*11.69英寸 單位為英寸 *72
        double pageWidth = 595;
        double pageHeight = 842;
        paper.setSize(pageWidth, pageHeight);
        paper.setImageableArea(0, 0, pageWidth, pageHeight);//成像大小
        pageFormat.setOrientation(PageFormat.PORTRAIT); //設置打印方向,LANDSCAPE為橫向,PORTRAIT打印方向默認為縱向
        pageFormat.setPaper(paper);
        Book book = new Book();
        for (PrintItem printItem : printItems) {
            PrintController printController = new PrintController();
            printController.setValue(printItem);
            book.append(printController, pageFormat);//一個打印任務一般打印一張圖,如果需要打印多張圖,則使用book相關方法。打印文檔添加多頁
        }
        printerJob.setPageable(book);
        if (printerJob.printDialog()) { //彈出打印對話框,打印對話框,用戶可以通過它改變各種選項,例如:設置打印副本數目,頁面方向,或者目標打印機。
            try {
                printerJob.print();
            } catch (PrinterException e) {
                e.printStackTrace();
            }
        }
    }


    /**
     * @return 返回 value。
     */
    public PrintItem getValue() {
        return value;
    }

    /**
     * @param value 要設置的 value。
     */

    public void setValue(PrintItem value) {
        this.value = value;
    }
}

  

package com.yumu.airshow.Controller;


import com.yumu.airshow.Model.PrintItem;
import com.yumu.airshow.Model.PrintModel;
import io.swagger.annotations.ApiOperation;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.imageio.ImageIO;
import javax.print.DocFlavor;
import javax.print.PrintService;
import javax.print.PrintServiceLookup;
import javax.print.attribute.HashPrintRequestAttributeSet;
import java.awt.image.BufferedImage;
import java.awt.print.*;
import java.awt.*;
import java.io.File;
import java.io.FileInputStream;
import java.util.List;

/*
A0=1189*841
A1=841*594
A2=594*420
A3=420*297
A4=210*297 長寬是8.27英寸*11.69英寸
* */
/*
* paper.setSize(width,height)
* 紙張高寬=紙張英寸*72 = 厘米/2.54*72
* 比如A4=21/2.54*72=595
* */


/*實現套打,把套打的格式當成一張圖片,將要填入的數據按其在圖片在坐標來定位*/
@Controller
@ResponseBody
@RequestMapping("/print")
@ApiOperation("打印票證信息")
public class PrintController implements Printable {

private PrintItem value = null;

/**
* implements Printable
* PageFormat類描述了頁面的定位信息、它的尺寸以及每英尺可繪制的區域(單位1/72nd)。
*/

public int print(Graphics g, PageFormat pf, int pageIndex) {

// 設置一次打印任務總打印頁數
if (pageIndex > 9999) {
return Printable.NO_SUCH_PAGE;
}
Graphics2D g2d = (Graphics2D) g;
for (PrintModel printModel : value.getParams()) {
float x = printModel.getX();
float y = printModel.getY();
int type = printModel.getType();
String content = printModel.getContent();//數據或者鏈接
/*數據類型為普通string*/
if (type == 0) {
String strFont = printModel.getFont();
Color color = printModel.getColor();
int size = 24;//設置默認字體大小
size = printModel.getSize();
if(strFont == null) strFont = "新宋體";//設置默認字體
Font font = new Font(strFont, Font.PLAIN, size);
g2d.setFont(font);
g2d.setColor(Color.blue);
g2d.drawString(content,x,y);
}
/*圖片類型的參數*/
if (type == 1) {
float width = printModel.getWidth();
float height = printModel.getHeight();
BufferedImage image2 = null;
try {
image2 = ImageIO.read(new FileInputStream(new File(content)));
} catch (Exception e) {
e.printStackTrace();
}
g2d.drawImage(image2, (int)x, (int)y, (int)width, (int)height, null);
}
}
return Printable.PAGE_EXISTS;
}

@PostMapping("/detail")
public void main(@Validated @RequestBody List<PrintItem> printItems, BindingResult bindingResult) {
printReport(printItems);
}

@PostMapping("/printServices")
public PrintService[] PrintService(){
HashPrintRequestAttributeSet pras = new HashPrintRequestAttributeSet();
DocFlavor flavor = DocFlavor.INPUT_STREAM.AUTOSENSE;
//查找所有的可用的打印服務
PrintService[] printService = PrintServiceLookup.lookupPrintServices(flavor, pras);
System.out.println("this is name;"+printService[0].getName());
return printService;
}

public void printReport(List<PrintItem> printItems) {

PrinterJob printerJob = PrinterJob.getPrinterJob();//創建一個打印任務
PageFormat pageFormat = PrinterJob.getPrinterJob().defaultPage();
Paper paper = pageFormat.getPaper();
// 設置頁面高和寬,A4紙為 595,842 長寬是8.27英寸*11.69英寸 單位為英寸 *72
double pageWidth = 595;
double pageHeight = 842;
paper.setSize(pageWidth, pageHeight);
paper.setImageableArea(0, 0, pageWidth, pageHeight);//成像大小
pageFormat.setOrientation(PageFormat.PORTRAIT); //設置打印方向,LANDSCAPE為橫向,PORTRAIT打印方向默認為縱向
pageFormat.setPaper(paper);
Book book = new Book();
for (PrintItem printItem : printItems) {
PrintController printController = new PrintController();
printController.setValue(printItem);
book.append(printController, pageFormat);//打印文檔添加多頁
}
printerJob.setPageable(book);
if (printerJob.printDialog()) { //彈出打印對話框,打印對話框,用戶可以通過它改變各種選項,例如:設置打印副本數目,頁面方向,或者目標打印機。

try {

printerJob.print();

} catch (PrinterException e) {

e.printStackTrace();

}

}
}


/**
* @return 返回 value。
*/
public PrintItem getValue() {
return value;
}

/**
* @param value 要設置的 value。
*/

public void setValue(PrintItem value) {
this.value = value;
}
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM