找回密码
 立即注册

QQ登录

只需一步,快速开始

Clark.Pan 讲师达人认证 悬赏达人认证 SpreadJS 开发认证

超级版主

200

主题

9899

帖子

1万

积分

超级版主

Rank: 8Rank: 8

积分
15531

讲师达人悬赏达人微信认证勋章SpreadJS 认证SpreadJS 高级认证元老葡萄

Clark.Pan 讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2021-2-28 21:41  /   查看:2209  /  回复:2
GcExcel在V4版本中提供了追踪导出进度的新功能。该功能可以在导出PDF的时候实时监听导出的进度。
GcExcel在PdfSaveOptions类中提供getPagePrinting和getPagePrinted事件来跟踪工作簿到PDF的导出进度。
下面的代码用于显示工作簿导出PDF的进度。
  1. //创建pdf文件流
  2. FileOutputStream outputStream = null;
  3. try {
  4.     outputStream = new FileOutputStream("PagePrintEventsTrackProgress.pdf");
  5. } catch (FileNotFoundException e) {
  6.     e.printStackTrace();
  7. }
  8. // 创建新的工作簿
  9. Workbook workbook = new Workbook();
  10. IWorksheet activeSheet = workbook.getActiveSheet();
  11. activeSheet.getRange("A1").setValue(1);
  12. activeSheet.getRange("A2:A100").setFormulaR1C1("=R[-1]C+1");
  13. PdfSaveOptions options = new PdfSaveOptions();
  14. options.getPagePrintingEvent().addListener(
  15. (sender, e) -> System.out.println(String.format("Printing page %1$s of %2$s", e.getPageNumber(), e.getPageCount())));
  16. activeSheet.getPageSetup().setCenterHeader("Page &P of &N");
  17. workbook.save(outputStream, options);

  18. // 关闭文件流
  19. try {
  20.     outputStream.close();
  21. } catch (IOException e) {
  22.     e.printStackTrace();
  23. }
复制代码
还可以用setSkipThisPage方法在导出时跳过页面。
例如:
  1. // 创建pdf文件流
  2. FileOutputStream outputStream = null;
  3. try {
  4.     outputStream = new FileOutputStream("PagePrintEventsSkipPage.pdf");
  5. } catch (FileNotFoundException e) {
  6.     e.printStackTrace();
  7. }
  8. // 创建新的工作簿
  9. Workbook workbook = new Workbook();
  10. IWorksheet activeSheet = workbook.getActiveSheet();
  11. activeSheet.getRange("A1").setValue(1);
  12. activeSheet.getRange("A2:A100").setFormulaR1C1("=R[-1]C+1");
  13. PdfSaveOptions options = new PdfSaveOptions();
  14. options.getPagePrintingEvent().addListener((sender, e) -> {
  15. if (e.getPageNumber() == 2) {
  16. e.setSkipThisPage(true);
  17. }
  18. });
  19. activeSheet.getPageSetup().setCenterHeader("Page &P of &N");
  20. workbook.save(outputStream, options);

  21. // 关闭文件流
  22. try {
  23.     outputStream.close();
  24. } catch (IOException e) {
  25.     e.printStackTrace();
  26. }
复制代码
最后提供了setHasMorePages方法退出PDF导出。
  1. // 创建pdf文件流
  2. FileOutputStream outputStream = null;
  3. try {
  4.     outputStream = new FileOutputStream("PagePrintEventsExitPrinting.pdf");
  5. } catch (FileNotFoundException e) {
  6.     e.printStackTrace();
  7. }
  8. // 创建新的工作簿
  9. Workbook workbook = new Workbook();
  10. IWorksheet activeSheet = workbook.getActiveSheet();
  11. activeSheet.getRange("A1").setValue(1);
  12. activeSheet.getRange("A2:A100").setFormulaR1C1("=R[-1]C+1");
  13. PdfSaveOptions options = new PdfSaveOptions();
  14. options.getPagePrintedEvent().addListener((sender, e) -> {
  15. if (e.getPageNumber() == 2) {
  16. e.setHasMorePages(false);
  17. }
  18. });
  19. activeSheet.getPageSetup().setCenterHeader("Page &P of &N");
  20. workbook.save(outputStream, options);

  21. // 关闭文件流
  22. try {
  23.     outputStream.close();
  24. } catch (IOException e) {
  25.     e.printStackTrace();
  26. }
复制代码


2 个回复

倒序浏览
Jun2005
注册会员   /  发表于:2022-5-14 09:42:54
沙发
导出xlsm文件,可以追加进度吗
回复 使用道具 举报
Derrick.Jiao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2022-5-16 08:57:13
板凳
Jun2005 发表于 2022-5-14 09:42
导出xlsm文件,可以追加进度吗

你好,目前只支持追踪导出pdf的进度,暂不支持其余文件导出进度追踪。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部