找回密码
 立即注册

QQ登录

只需一步,快速开始

HungKei

注册会员

1

主题

8

帖子

15

积分

注册会员

积分
15
  • 69

    金币

  • 1

    主题

  • 8

    帖子

最新发帖
HungKei
注册会员   /  发表于:2024-2-4 14:48  /   查看:2437  /  回复:15
1金币
本帖最后由 HungKei 于 2024-2-4 15:03 编辑

当我在Java项目中使用gcexcel库时,我调用excel表格插入数据后转化为图片。我在本地的idea中运行这个功能正常,当我用Jenkins部署到服务器上再运行时,表里面所有的中文都变成了问号。
image.png926070251.png
(此图为本地运行的)
image.png659445800.png
(此图为服务器上运行的)
image.png649687194.png image.png162572630.png image.png242635497.png
我是转为base64值后用一些在线网站翻译成图片,以上是我的核心代码
image.png708510741.png image.png703344421.png
这是服务器上查到的信息
image.png368319091.png

最佳答案

查看完整内容

经过线上沟通,问题出现的原因是因为Jenkins无法正常访问到绝对路径设置的字体文件夹路径,所以需要将相关的字体文件放到项目中,然后使用相对路径来设置字体文件夹路径,即可解决问题。

15 个回复

倒序浏览
最佳答案
最佳答案
Joestar.XuSpreadJS 开发认证
超级版主   /  发表于:2024-2-4 14:48:31
来自 16#
经过线上沟通,问题出现的原因是因为Jenkins无法正常访问到绝对路径设置的字体文件夹路径,所以需要将相关的字体文件放到项目中,然后使用相对路径来设置字体文件夹路径,即可解决问题。
回复 使用道具 举报
HungKei
注册会员   /  发表于:2024-2-4 17:24:25
2#
怎么没人?
回复 使用道具 举报
Joestar.XuSpreadJS 开发认证
超级版主   /  发表于:2024-2-4 17:28:16
3#
您好,出现这种问题的原因猜测是 服务器中缺少相应的字体 或 GcExcel的字体文件夹没有指定到您的自定义字体文件夹。

您可以参考这个链接中的内容为GcExcel设置字体文件夹:https://demo.grapecity.com.cn/do ... /setfontsfolderpath
回复 使用道具 举报
HungKei
注册会员   /  发表于:2024-2-4 17:32:10
4#
Joestar.Xu 发表于 2024-2-4 17:28
您好,出现这种问题的原因猜测是 服务器中缺少相应的字体 或 GcExcel的字体文件夹没有指定到您的自定义字体 ...

可是从上图可以看到我服务器上是存在“文泉...”这个字体的,我的excel表格中也是使用的这个字体
回复 使用道具 举报
Joestar.XuSpreadJS 开发认证
超级版主   /  发表于:2024-2-4 17:52:37
5#
您按照我上文所述,设置一下字体的文件夹后试试看。
回复 使用道具 举报
HungKei
注册会员   /  发表于:2024-2-4 18:05:45
6#
Joestar.Xu 发表于 2024-2-4 17:52
您按照我上文所述,设置一下字体的文件夹后试试看。

我按照您的建议设置了字体文件夹,还是将中文生成一堆“?”,而英文和数字都没有问题
回复 使用道具 举报
Joestar.XuSpreadJS 开发认证
超级版主   /  发表于:2024-2-5 09:17:13
7#
您这边提供一下相关的模板文件、数据源和字体文件,我们这边在本地测试一下看看,另外您这边使用的版本是多少?
回复 使用道具 举报
HungKei
注册会员   /  发表于:2024-2-5 09:47:03
8#
Joestar.Xu 发表于 2024-2-5 09:17
您这边提供一下相关的模板文件、数据源和字体文件,我们这边在本地测试一下看看,另外您这边使用的版本是多 ...

似乎无法将文件直接传上来,我这边提供两个相关信息:
1.用于导入的excel表格,内容和格式都没限制,简单中文+英文+数字即可,如下:
image.png256563414.png
2.Java代码:
  1. public String createReportImage(TakeMedicineReportsSaveDTO dto) {
  2.         String excelTemplateFilePath = "src/main/resources/static/template.xlsx";
  3.         String outputImagePath = "src/main/resources/static/output.png";
  4.         String outputPath = "src/main/resources/static/";
  5.         try {
  6.             // 打开工作簿
  7.             Workbook workbook = new Workbook();
  8.             workbook.open(excelTemplateFilePath);

  9.             // 选择工作表
  10.             IWorksheet worksheet = workbook.getWorksheets().get(6);

  11.             TakeMedicineReportsImageVO takeMedicineReportsImageVO = createReportsImageVO(dto);

  12.             // 填充数据
  13.             worksheet.getRange("C4").setValue(takeMedicineReportsImageVO.getName());
  14.             worksheet.getRange("C4").getFont().setName("文泉驿微米黑");
  15.             worksheet.getRange("G4").setValue(takeMedicineReportsImageVO.getSex());
  16.             worksheet.getRange("C5").setValue(takeMedicineReportsImageVO.getAge());
  17.             worksheet.getRange("G5").setValue(takeMedicineReportsImageVO.getPhone());
  18.             worksheet.getRange("I4").setValue(takeMedicineReportsImageVO.getDiagnosis());

  19.             worksheet.getRange("C7").setValue(takeMedicineReportsImageVO.getMedicinalDetail());
  20.             worksheet.getRange("C8").setValue(takeMedicineReportsImageVO.getDosis());
  21.             worksheet.getRange("I8").setValue(takeMedicineReportsImageVO.getMedicationMethod());

  22.             worksheet.getRange("C10").setValue(takeMedicineReportsImageVO.getDecoctingSuggestion());
  23.             worksheet.getRange("I10").setValue(takeMedicineReportsImageVO.getMedicationTemperature());

  24.             worksheet.getRange("J15").setValue(datestampConverter(takeMedicineReportsImageVO.getCreateTime()));

  25. //            //保存为图片
  26. //            FileOutputStream outputStream = new FileOutputStream(outputImagePath);
  27. //            worksheet.toImage(outputStream, ImageType.JPG);
  28. //            outputStream.close();

  29.             //转化为图片base64值
  30.             // Save the worksheet as image to a ByteArrayOutputStream
  31.             ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
  32.             worksheet.toImage(outputStream, ImageType.JPG);

  33.             // Get the byte array from the ByteArrayOutputStream
  34.             byte[] imageBytes = outputStream.toByteArray();

  35.             // Convert the byte array to Base64 string
  36.             String base64Image = Base64.getEncoder().encodeToString(imageBytes);

  37.             // Close the ByteArrayOutputStream
  38.             outputStream.close();

  39.             return base64Image;



  40.         } catch (Exception e) {
  41.             e.printStackTrace();
  42.             return "";
  43.         }

  44.     }
复制代码

回复 使用道具 举报
Joestar.XuSpreadJS 开发认证
超级版主   /  发表于:2024-2-5 09:50:50
9#
您好,请通过下图中的方法上传文件:


image.png225746764.png

image.png559412536.png

另外,将文件打包为一个压缩包上传可以避免文件类型导致的无法上传的问题。
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部