在我们打印 Excel 工作表时,格式、排布完全没有问题的工作表打印出来的内容也可能会变得非常混乱。这是因为 Excel 工作表是为了方便在电脑上查看和编辑内容而设计的,直接打印出来的效果和屏幕上显示的效果可能会相距甚远。因此,为了打印时能够完美地还原工作表内容,我们需要在打印时设置打印选项。本文将介绍如何使用 Spire.XLS for Java 打印 Excel 文件以及打印时如何进行打印的设置。
安装 Spire.XLS for Java
首先,您需要在 Java 程序中添加 Spire.XLS for Java 文件作为依赖项。JAR 文件可以从此链接下载。如果您使用 Maven,则可以将以下代码添加到项目的 pom.xml 文件中,从而轻松地在应用程序中导入 JAR 文件。
<repositories>
<repository>
<id>com.e-iceblue</id>
<name>e-iceblue</name>
<url>https://repo.e-iceblue.cn/repository/maven-public/</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>e-iceblue</groupId>
<artifactId>spire.xls</artifactId>
<version>14.8.2</version>
</dependency>
</dependencies>
通过页面设置来设置 Excel 打印选项
Excel 页面设置提供了控制工作表打印方式的选项,如是否打印注释、是否打印网格线以及是否将工作表排布在一页上。
Spire.XLS for Java 提供了 PageSetup 类来设置这些打印选项。下面是使用 Spire.XLS for Java通过 PageSetup 类设置 Excel 打印选项的详细操作步骤。
- 创建一个 Workbook 类的对象。
- 用 Workbook.loadFromFile() 方法载入 Excel 文件。
- 用 Workbook.getWorksheets().get() 方法获取指定工作表。
- 用 Worksheet.getPageSetup() 方法获取 PageSetup 类的对象。
- 用 PageSetup 类下的方法设置页边距、打印区域、是否打印标题、打印质量等选项。
- 用 PrinterJob.print() 方法打印工作簿。
- Java
import com.spire.xls.*;
import java.awt.print.PageFormat;
import java.awt.print.Paper;
import java.awt.print.PrinterException;
import java.awt.print.PrinterJob;
public class setPrintOptions {
public static void main(String[] args) {
//创建一个Workbook类的对象
Workbook workbook = new Workbook();
//载入Excel文件
workbook.loadFromFile("资产负债表.xlsx");
//获取第一个工作表
Worksheet worksheet = workbook.getWorksheets().get(0);
//从第一个工作表获取PageSetup类的对象
PageSetup pageSetup = worksheet.getPageSetup();
//设置页边距
pageSetup.setTopMargin(0.3);
pageSetup.setBottomMargin(0.3);
pageSetup.setLeftMargin(0.3);
pageSetup.setRightMargin(0.3);
//指定要打印的区域
pageSetup.setPrintArea("A1:C18");
//指定标题行
pageSetup.setPrintTitleRows("$1:$1");
//允许打印标题
pageSetup.isPrintHeadings(true);
//允许打印网格线
pageSetup.isPrintGridlines(true);
//允许打印并显示批注
pageSetup.setPrintComments(PrintCommentType.InPlace);
//设置打印质量(dpi)
pageSetup.setPrintQuality(300);
//允许黑白模式打印
pageSetup.setBlackAndWhite(true);
//设置打印顺序
pageSetup.setOrder(OrderType.OverThenDown);
//将工作表排布在一页上
pageSetup.isFitToPage(true);
//创建一个Paper类的对象
PrinterJob printerJob = PrinterJob.getPrinterJob();
PageFormat pageFormat = printerJob.defaultPage();
Paper paper = pageFormat.getPaper();
//设置纸张的可绘制区域
paper.setImageableArea(0, 0, pageFormat.getWidth(), pageFormat.getHeight());
//设置打印份数
printerJob.setCopies(1);
pageFormat.setPaper(paper);
//以设定的格式渲染工作簿
printerJob.setPrintable(workbook, pageFormat);
//执行打印
try {
printerJob.print();
} catch (PrinterException e) {
e.printStackTrace();
}
}
}
打印 Excel 文件时对打印机进行设置
除了设置打印选项外,了解如何在打印时指定网络中的打印机以及如何对打印机进行设置也很重要。下面的步骤演示了如何通过使用 Spire.XLS for Java 中的 PrinterJob 类下的方法来对打印机进行设置并打印 Excel 文件。
- 创建一个 Workbook 类的对象。
- 用 Workbook.loadFromFile() 方法载入 Excel 文件。
- 创建一个 PrinterJob 类的对象。
- 用 PrinterJob.setPrintService() 方法指定打印机名称。
- 用 PrinterJob.setCopies() 方法设置打印份数。
- 用 PrinterJob .setPrintable() 方法调用绘图器来渲染工作簿。
- 用 PrinterJob.print() 方法打印工作簿。
- Java
import com.spire.xls.Workbook;
import javax.print.PrintService;
import java.awt.print.PageFormat;
import java.awt.print.Paper;
import java.awt.print.PrinterException;
import java.awt.print.PrinterJob;
public class SpecifyPrinterSettings {
public static void main(String[] args) throws PrinterException {
//创建Workbook类的对象
Workbook workbook = new Workbook();
//载入Excel文件
workbook.loadFromFile("资产负债表.xlsx");
//创建一个PrinterJob类的对象
PrinterJob printerJob = PrinterJob.getPrinterJob();
//指定打印机名称
PrintService myPrintService = findPrintService("\\\\192.168.1.104\\HP LaserJet P1007");
printerJob.setPrintService(myPrintService);
//创建一个PageFormat类的对象并将页面设置为默认大小和方向
PageFormat pageFormat = printerJob.defaultPage();
//通过此页面设置返回一个Paper类的对象
Paper paper = pageFormat .getPaper();
//设置纸张的可绘制区域
paper.setImageableArea(0,0,pageFormat .getWidth(),pageFormat .getHeight());
//通过该Paper类的对象设置页面格式
pageFormat.setPaper(paper);
//设置打印份数
printerJob .setCopies(1);
//调用绘图器以指定的格式渲染工作簿
printerJob .setPrintable(workbook,pageFormat);
//执行打印
try {
printerJob.print();
} catch (PrinterException e) {
e.printStackTrace();
}
}
//通过打印机名获取打印服务
private static PrintService findPrintService(String printerName) {
PrintService[] printServices = PrinterJob.lookupPrintServices();
for (PrintService printService : printServices) {
if (printService.getName().equals(printerName)) {
return printService;
}
}
return null;
}
}
申请临时 License
如果您希望删除结果文档中的评估消息,或者摆脱功能限制,请该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。获取有效期 30 天的临时许可证。