啊。。。实在解决不掉,换成另存为pdf,使用pdfbox打印了
下面写一下实现思路:
JACOB:保存为pdf文件
Dispatch.invoke(doc, "SaveAs", Dispatch.Method, new Object[]{newFilePath, new Variant(17)}, new int[1]);
//17是pdf格式
下面是打印思路:
俩个jar包:pdfbox-2.0.4.jar;fontbox-2.0.4.jar
打印代码:
private static boolean doPrintWordBdPdf(String printFile,String printerName,int fromPage,int toPage){
boolean printFlag = true;
PDDocument document = null;
File file;
try {
file = new File(printFile + ".pdf");
if (file == null || !file.exists()) {
System.out.println("要打印的PDF文件不存在!");
return false;
}
document = PDDocument.load(file);
PrinterJob printerJob = PrinterJob.getPrinterJob();
printerJob.setJobName(file.getName());
if (printerName != null) {
// 查找并设置打印机
//获得本台电脑连接的所有打印机
PrintService[] printServices = PrinterJob.lookupPrintServices();
if (printServices == null || printServices.length == 0) {
System.out.print("打印失败,未找到可用打印机,请检查。");
return false;
}
PrintService printService = null;
//匹配指定打印机
for (int i = 0; i < printServices.length; i++) {
System.out.println(printServices[i].getName());
if (printServices[i].getName().contains(printerName)) {
printService = printServices[i];
break;
}
}
if (printService != null) {
printerJob.setPrintService(printService);
} else {
System.out.print("打印失败,未找到名称为" + printerName + "的打印机,请检查。");
return false;
}
}
//设置纸张及缩放
PDFPrintable pdfPrintable = new PDFPrintable(document, Scaling.ACTUAL_SIZE);
//设置多页打印
Book book = new Book();
PageFormat pageFormat = new PageFormat();
//设置打印方向
pageFormat.setOrientation(PageFormat.PORTRAIT);//纵向
Paper paper = getPaper();
pageFormat.setPaper(paper);
book.append(pdfPrintable, pageFormat, document.getNumberOfPages());
printerJob.setPageable(book);
printerJob.setCopies(1);//设置打印份数
//添加打印属性
HashPrintRequestAttributeSet attributes = new HashPrintRequestAttributeSet();
attributes.add(Sides.ONE_SIDED); //设置单双页 DUPLEX
attributes.add(MediaSizeName.ISO_A4);//默认A4纸打印
attributes.add(MediaSizeName.ISO_A4);//默认A4纸打印
attributes.add(new PageRanges(fromPage,toPage));//范围
printerJob.print(attributes);
} catch (Exception e) {
e.printStackTrace();
System.out.println(e.getMessage());
} finally {
if (document != null) {
try {
document.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return printFlag;
}
private static Paper getPaper() {
Paper paper = new Paper();
// 默认为A4纸张,对应像素宽和高分别为 595, 842
int width = 595;
int height = 842;
// 设置边距,单位是像素,10mm边距,对应 28px
int marginLeft = 12;
int marginRight = 12;
int marginTop = 12;
int marginBottom = 12;
paper.setSize(width, height);
// 下面一行代码,解决了打印内容为空的问题
paper.setImageableArea(marginLeft, marginRight, width - (marginLeft + marginRight), height - (marginTop + marginBottom));
return paper;
}