xls转PDF失败

版本:23.8
编程语言:java

转换代码:

LoadOptions opt = new LoadOptions();
		opt.setMemorySetting(MemorySetting.MEMORY_PREFERENCE);
		Workbook workbook = new Workbook(new ByteArrayInputStream(excel), opt);
		for (Object worksheet : workbook.getWorksheets()) {
			PageSetup ps = ((Worksheet)worksheet).getPageSetup();
			for (int i = 0; i < 3; i++) {
				String rightFooterSection = ps.getFooter(i);
				if(StringUtils.isNotBlank(rightFooterSection)){
					rightFooterSection = rightFooterSection.replace("&F",title);
					ps.setFooter(i, rightFooterSection);
				}
			}
		}
		ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
		workbook.save(outputStream, SaveFormat.XLSX);

报错日志:

2024-11-06 11:40:21.281 qys_53550d32-07de-4a11-aaa9-6e95b10b644f {http-nio-9180-exec-414} ERROR com.qiyuesuo.api.DocumentController 792 - 转换失败文件名称:附件:扬州大学2024年度省、校级研究生工作站立项名单和经费划拨一览表--表单.xls,失败信息:com.aspose.cells.b.a.d.u_ cannot be cast to com.aspose.cells.z5o
java.lang.ClassCastException: com.aspose.cells.b.a.d.u_ cannot be cast to com.aspose.cells.z5o
at com.aspose.cells.j6c.a(Unknown Source)
at com.aspose.cells.Workbook.getContentTypeProperties(Unknown Source)
at com.aspose.cells.k2.I(Unknown Source)
at com.aspose.cells.k2.s(Unknown Source)
at com.aspose.cells.k2.<init>(Unknown Source)
at com.aspose.cells.f6.b(Unknown Source)
at com.aspose.cells.b9q.b(Unknown Source)
at com.aspose.cells.f6.a(Unknown Source)
at com.aspose.cells.b9q.a_(Unknown Source)
at com.aspose.cells.Workbook.a(Unknown Source)
at com.aspose.cells.Workbook.save(Unknown Source)
at com.aspose.cells.Workbook.save(Unknown Source)
at net.qiyuesuo.common.excel.ExcelUtils.handExcelFileNameMemoryPreference(ExcelUtils.java:230)

源文件:
file.zip (9.5 KB)

@ZhonghaoSun
通过使用以下样例代码在最新版本v24.10上进行测试,我们可以正常转换,没有任何异常。请查看附件。out_java.pdf (102.0 KB)

样例代码如下:

LoadOptions opt = new LoadOptions();
opt.setMemorySetting(MemorySetting.MEMORY_PREFERENCE);
Workbook workbook = new Workbook(filePath + "附件:扬州大学2024年度省、校级研究生工作站立项名单和经费划拨一览表--表单.xls", opt);

workbook.save(filePath + "out_java.pdf", SaveFormat.PDF);

我们建议您尝试使用我们的最新版本: Aspose.Cells for Java v24.10.
如果您仍然发现问题,请分享您的可运行的完整示例代码,以便我们重现问题,我们很快就会检查。

能否在23.8版本测试下呢,能否通过调整文件内容来临时处理。

@ZhonghaoSun
通过使用以下样例代码在v23.8版本测试上进行测试,我们依然可以正常转换,没有任何异常。请查看附件。out_java_23.8.pdf (101.6 KB)

LoadOptions opt = new LoadOptions();
opt.setMemorySetting(MemorySetting.MEMORY_PREFERENCE);
Workbook workbook = new Workbook(filePath + "附件:扬州大学2024年度省、校级研究生工作站立项名单和经费划拨一览表--表单.xls", opt);

workbook.save(filePath + "out_java_23.8.pdf", SaveFormat.PDF);

如果你依然有疑问,请提供你的可运行的测试代码,我们很快就会检查。

麻烦在23.8版本用这段代码测下呢

@ZhonghaoSun
你的title变量值是什么?请提供可运行的程序,我们很快就会检查。

好的,这是测试代码:

	public static void main(String[] args) throws Exception {
		String title = "附件:扬州大学2024年度省、校级研究生工作站立项名单和经费划拨一览表--表单.xls";
		byte[] bytes = Files.readAllBytes(Paths.get("C:\\Users\\admin\\Documents\\EMobile10 Files\\Downloads\\" + title));
		LoadOptions opt = new LoadOptions();
		opt.setMemorySetting(MemorySetting.MEMORY_PREFERENCE);
		Workbook workbook = new Workbook(new ByteArrayInputStream(bytes), opt);
		for (Object worksheet : workbook.getWorksheets()) {
			PageSetup ps = ((Worksheet)worksheet).getPageSetup();
			for (int i = 0; i < 3; i++) {
				String rightFooterSection = ps.getFooter(i);
				if(StringUtils.isNotBlank(rightFooterSection)){
					rightFooterSection = rightFooterSection.replace("&F",title);
					ps.setFooter(i, rightFooterSection);
				}
			}
		}
		ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
		workbook.save(outputStream, SaveFormat.XLSX);
		byte[] result = outputStream.toByteArray();
	}

@ZhonghaoSun

使用 23.8我们确实重现了问题. 好消息是我们使用最新的版本 Aspose.Cells for Java 24.10测试后, 您的代码可以正常运行. 所以请使用该最新版本再测试一下您的代码,应该可以解决问题。

@ZhonghaoSun,

请注意,这似乎是 Aspose.Cells for Java v23.8 中关于页眉/页脚操作的一个错误或限制。恐怕使用 Aspose.Cells for Java v23.8 可能没有任何解决方法可以解决此问题。因此,除了升级到较新版本以获得更智能、功能更丰富的 API 之外,别无选择。

@ZhonghaoSun
我们仔细检查了转换过程,读取Custom Xml Part的过程中发生了异常。我们在24.3 版本开始修复了这个问题。
请用尝试使用新版本。