package com.zcloud.util;

import java.awt.*;
import java.awt.Insets;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.StringReader;
import java.net.URL;
import java.net.URLDecoder;
import java.security.InvalidParameterException;

import javax.imageio.ImageIO;
import javax.imageio.stream.ImageOutputStream;
import javax.print.*;
import javax.print.attribute.DocAttributeSet;
import javax.print.attribute.HashDocAttributeSet;
import javax.print.attribute.HashPrintRequestAttributeSet;
import javax.print.attribute.PrintRequestAttributeSet;
import javax.print.attribute.standard.MediaSizeName;
import javax.print.attribute.standard.OrientationRequested;

/*import com.aspose.words.Document;
import com.aspose.words.SaveFormat;
import com.itextpdf.text.pdf.PdfReader;*/

public class PrintUtil {
//	static final int wdDoNotSaveChanges = 0;// 不保存待定的更改。  
//    static final int wdFormatPDF = 17;// word转PDF 格式  
//    
	public static void print(String filePath,String content) {
		try {
			File file = new File(filePath);
//			File file = new File("C:\\\\Users\\\\Administrator\\\\Desktop\\\\测试用图\\\\QQ图片20201013090855.jpg");
			PrintService printService = PrintServiceLookup.lookupDefaultPrintService();
			if (file != null) {
				BufferedImage img = ImageIO.read(file);
				BufferedImage DestImage = null;
				int w1 = img.getWidth();
		        int h1 = img.getHeight();
		        int c = (int)Math.ceil((double)h1/1000);//根据图片大小缩放文字
		        int[] ImageArrayOne = new int[w1 * h1];
		        ImageArrayOne = img.getRGB(0, 0, w1, h1, ImageArrayOne, 0, w1); // 逐行扫描图像中各个像素的RGB到数组中
		        DestImage = new BufferedImage(w1, h1 + (c*20), BufferedImage.TYPE_INT_RGB);
		        DestImage.setRGB(0, c*20, w1, h1, ImageArrayOne, 0, w1); // 设置下半部分的RGB
				Graphics g = DestImage.getGraphics(); 
				Font fTxtBottom = new Font("微软雅黑", Font.PLAIN, c*15);
	            Color myColorTxtBottom = Color.WHITE;  //图片颜色
	            g.setColor(myColorTxtBottom);
	            g.setFont(fTxtBottom);
//	            g.drawString(文字, x 位置, y 位置);
	            g.drawString(content, 5,c*15);
	            g.dispose(); 
//	            String imgName = "C:\\Users\\Administrator\\Desktop\\测试用图\\1.jpg"; //生成的图片名称
//	            File newFile = new File(imgName); //生成新的图片
//
////	          此处要写PNG否则可能会出现遮罩层
//	            ImageIO.write(DestImage, "png", newFile);

	            ByteArrayOutputStream bs = new ByteArrayOutputStream();
	            ImageOutputStream imOut = ImageIO.createImageOutputStream(bs);
	            ImageIO.write(DestImage, "png",imOut);
				DocPrintJob jon = printService.createPrintJob();
				// 设置纸张大小,也可以新建MediaSize类来自定义大小
				// 文件类型
				DocFlavor flavor = DocFlavor.INPUT_STREAM.PNG;
 
				PrintRequestAttributeSet pras = new HashPrintRequestAttributeSet();
				pras.add(MediaSizeName.ISO_A4);
				if(w1>h1) {
					pras.add(OrientationRequested.LANDSCAPE);//横向打印
				}
				DocAttributeSet das = new HashDocAttributeSet();
 
				InputStream input = new ByteArrayInputStream(bs.toByteArray());
				Doc doc = new SimpleDoc(input, flavor, das);
				jon.print(doc, pras);				
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
//	public static void word2pdf(String source, String target) {
//
//		FileOutputStream os = null;
//		try {
//			File file = new File(target); // 新建一个空白pdf文档
//			os = new FileOutputStream(file);
//			Document doc = new Document(source); // Address是将要被转化的word文档
//			doc.save(os, SaveFormat.PDF);
//			System.out.println(doc.getPageCount());
//		} catch (Exception e) {
//			e.printStackTrace();
//		} finally {
//			if (os != null) {
//				try {
//					os.close();
//				} catch (IOException e) {
//					e.printStackTrace();
//				}
//			}
//		}
//	}

//	public static int getPdfPage(String filepath){  
//        int pagecount = 0;    
//        PdfReader reader;  
//        try {  
//            reader = new PdfReader(filepath);  
//            pagecount= reader.getNumberOfPages();   
//	    } catch (IOException e) {  
//	        e.printStackTrace();  
//	    }  
//	    System.out.println(pagecount);  
//	    return pagecount;  
//	}
	
	public static void main(String[] args) {
		print(null,null);
	}
}
