找回密码
 立即注册

QQ登录

只需一步,快速开始

xujie-joe
金牌服务用户   /  发表于:2023-2-6 16:24  /   查看:2014  /  回复:9
1金币
本帖最后由 xujie-joe 于 2023-2-6 16:25 编辑

GCExcel将Excel转PDF的时候,这种图片换页问题,有办法解决吗?

image.png546270141.png

ssjson如附件

代码如下
  1. public byte[] excelToPdfForSop(Workbook workbook, String section) {
  2.         IWorksheets worksheets = workbook.getWorksheets();


  3.         for (int j = 0; j < worksheets.getCount(); j++) {
  4.             IWorksheet worksheet = worksheets.get(j);
  5.             // 去掉抬头信息,防止每页都打印抬头信息
  6.             worksheet.getPageSetup().setPrintTitleRows(null);
  7.             worksheet.getPageSetup().setCenterHeader(null);
  8.             worksheet.getPageSetup().setRightHeader(null);

  9.             // 设置Excel转PDF列的范围
  10.             // 获取SOPExcel需要转PDF的列的范围
  11.             String pdfArea = "$A:$N";
  12.             worksheet.getPageSetup().setPrintArea(pdfArea);

  13.             // 以下属性的设置,可以让Excel转为PDF的时候所有列不换页
  14.             worksheet.getPageSetup().setIsPercentScale(false);
  15.             // 根据你想将表单缩放打印成几页
  16. //            worksheet.getPageSetup().setFitToPagesTall(1);
  17.             worksheet.getPageSetup().setFitToPagesWide(1);




  18.             // 上下左右各10边距
  19.             worksheet.getPageSetup().setLeftMargin(15);
  20.             worksheet.getPageSetup().setTopMargin(15);
  21.             worksheet.getPageSetup().setRightMargin(15);
  22.             worksheet.getPageSetup().setBottomMargin(15);

  23.             // 都设置为A4纸
  24.             worksheet.getPageSetup().setPaperSize(PaperSize.A4);
  25.             // 横向生成
  26.             worksheet.getPageSetup().setOrientation(PageOrientation.Landscape);

  27.             // 设置页脚的页数
  28.             worksheet.getPageSetup().setCenterFooter("&P/&N");
  29.             worksheet.getPageSetup().setFooterMargin(5d);

  30.             // 删除分页符,防止生成的PDF出现空白
  31.             // 删除原有的行分页符
  32.             int hc = worksheet.getHPageBreaks().getCount();
  33.             for(int h = hc-1; h >= 0; h--) {
  34.                 worksheet.getHPageBreaks().get(h).delete();
  35.             }
  36.             // 删除原有的列分页符
  37.             int vc = worksheet.getVPageBreaks().getCount();
  38.             for(int v = vc-1; v >= 0; v--) {
  39.                 worksheet.getVPageBreaks().get(v).delete();
  40.             }

  41.         }

  42.         // 再转为PDF
  43.         ByteArrayOutputStream out = new ByteArrayOutputStream();
  44.         workbook.save(out, SaveFileFormat.Pdf);
  45.         byte[] contents = out.toByteArray();
  46.         return contents;
  47.     }
复制代码

float.ssjson

1.09 MB, 下载次数: 137

最佳答案

查看完整内容

可以添加自定义分页 https://demo.grapecity.com.cn/documents-api-excel-java/demos/configurepagebreaks 然后结合缩放 https://demo.grapecity.com.cn/documents-api-excel-java/demos/configurescaling 你那个文件,可以尝试缩放80,让整体小一些

9 个回复

倒序浏览
最佳答案
最佳答案
dexteryao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2023-2-6 16:24:09
来自 8#
可以添加自定义分页
https://demo.grapecity.com.cn/do ... configurepagebreaks
然后结合缩放
https://demo.grapecity.com.cn/do ... os/configurescaling

你那个文件,可以尝试缩放80,让整体小一些
回复 使用道具 举报
xujie-joe
金牌服务用户   /  发表于:2023-2-6 16:25:25
2#
本帖最后由 xujie-joe 于 2023-2-6 16:26 编辑

复制代码
回复 使用道具 举报
dexteryao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2023-2-6 17:47:17
3#
可以给sheet设置
  1. worksheet.getPageSetup().setIsPercentScale(false);
  2. worksheet.getPageSetup().setFitToPagesWide(1);
  3. worksheet.getPageSetup().setFitToPagesTall(1);
复制代码

让页面自动缩放到一页

https://demo.grapecity.com.cn/do ... /configpaperscaling
回复 使用道具 举报
xujie-joe
金牌服务用户   /  发表于:2023-2-6 18:05:35
4#
dexteryao 发表于 2023-2-6 17:47
可以给sheet设置

让页面自动缩放到一页

但是这会导致这边出现一片空白
image.png778089904.png
回复 使用道具 举报
dexteryao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2023-2-6 18:15:26
5#
可以设置纸张纵向,因为你的内容比例不是和纸张完全一致,肯定会有多多少空白的。
不然就需要拉伸列宽,但是这个只能自己计算来设置了
回复 使用道具 举报
xujie-joe
金牌服务用户   /  发表于:2023-2-7 09:07:34
6#
dexteryao 发表于 2023-2-6 18:15
可以设置纸张纵向,因为你的内容比例不是和纸张完全一致,肯定会有多多少空白的。
不然就需要拉伸列宽,但 ...

我这想实现的效果是这样的:

生成的PDF横向能填充满,不要右边留一片空白,如下图这种样子

image.png251638793.png
但是又不想图片换页,
如果加上这行代码:worksheet.getPageSetup().setFitToPagesTall(1);,会导致所有图片在同一页,这样也不好看
image.png772047424.png

不过我看Excel打印功能,图片也换页了
image.png919544372.png

那看起来不好处理了,问下可以生成PDF的时候,可以指定打印哪些行吗?
比如PDF第一页只打印第1行到第20行,第二页打印21行到40行,这样图片应该不会换页了
问下GCExcel有指定打印行数的方法不?
回复 使用道具 举报
xujie-joe
金牌服务用户   /  发表于:2023-2-7 09:10:13
7#
上楼层多图片的ssjson如附件

float.ssjson

3.12 MB, 下载次数: 135

回复 使用道具 举报
xujie-joe
金牌服务用户   /  发表于:2023-2-7 13:48:32
9#
dexteryao 发表于 2023-2-7 10:57
可以添加自定义分页
https://demo.grapecity.com.cn/documents-api-excel-java/demos/configurepagebreaks ...

好的,我看下文档,再调整下,谢谢
回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2023-2-7 17:57:00
10#
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部