package pdfprint;
import javax.imageio.ImageIO;
import javax.print.*;
import javax.print.attribute.HashPrintRequestAttributeSet;
import javax.print.attribute.PrintRequestAttributeSet;
import javax.print.attribute.standard.Copies;
import javax.print.attribute.standard.MediaSize;
import javax.print.attribute.standard.MediaSizeName;
import javax.print.attribute.standard.Sides;
import javax.swing.*;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.printing.PDFPageable;
import org.apache.pdfbox.printing.PDFPrintable;
import org.apache.pdfbox.printing.Scaling;
import com.itextpdf.text.DocumentException;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.print.Book;
import java.awt.print.PageFormat;
import java.awt.print.Paper;
import java.awt.print.PrinterJob;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetSocketAddress;
import java.net.Socket;
public class fileprint {
static String pdfPath = "H:\\DC马达部\\模板\\TEST2A_PKG3.PDF"; //需要打印的文件
static String pdfPath2 = "H:\\DC马达部\\模板\\pdf-java2.pdf"; //需要打印的文件
String printerName1 = "RICOH SP 310DNw PCL 6"; //打印机ip
String printerName = "HP LaserJet M207-M212 PCLm-S (网络)"; //打印机ip
public static void main(String[] args) throws Exception {
printPdf("H:\\DC马达部\\模板\\pdf-java2.pdf", "HP LaserJet M207-M212 PCLm-S (网络)");
}
public static PDDocument printPdf(String pdfPath, String printerName) throws Exception {
File file = new File(pdfPath);
PDDocument document = PDDocument.load(file);
PrinterJob job = getPrintServiceByName(printerName);
setPageStyle(document, job);
// 开始打印
job.print();
return document;
}
public static void setPageStyle(PDDocument document, PrinterJob job) {
job.setPageable(new PDFPageable(document));
Paper paper = new Paper();
int width = 297;
int height = 421;
//A6纸宽度297高421
//A4纸宽度595高842
// 设置打印纸张大小
paper.setSize(width,height); // 1/72 inch
// 设置边距,单位是像素,10mm边距,对应 28px
int marginLeft = 10;
int marginRight = 0;
int marginTop = 10;
int marginBottom = 0 ;
// 设置打印位置 坐标
paper.setImageableArea(marginLeft, marginRight, width - (marginLeft + marginRight), height - (marginTop + marginBottom));
// custom page format
PageFormat pageFormat = new PageFormat();
pageFormat.setPaper(paper);
// override the page format
Book book = new Book();
// append all pages 设置一些属性 是否缩放 打印张数等
book.append(new PDFPrintable(document, Scaling.ACTUAL_SIZE), pageFormat, 1);
job.setPageable(book);
}
public static PrinterJob getPrintServiceByName(String printerName) throws Exception{
PrinterJob job = PrinterJob.getPrinterJob();
// 遍历查询打印机名称
boolean flag = false;
for (PrintService ps : PrinterJob.lookupPrintServices()) {
String psName = ps.toString();
// 选用指定打印机,需要精确查询打印机就用equals,模糊查询用contains
if (psName.contains(printerName)) {
flag = true;
job.setPrintService(ps);
break;
}
}
if(!flag){
throw new RuntimeException("打印失败,未找到名称为" + printerName + "的打印机,请检查。");
}
return job;
}
}
java直接调用打印机打印pdf
最新推荐文章于 2024-04-08 11:35:00 发布