山东大学软件学院2024年项目实训-4

在上次的基础上进行了修改,明确了传入的PPT文字内容参数的具体格式:

封面页
标题:XXXXXXX
副标题:XXXXXXX
目录页
XXX:XXXX
XXX:XXXX
XXX:XXXX
内容页1
XXX:XXXXXXXX
内容页2
XXX:XXXXXXXX
内容页3
XXX:XXXXXXXX
结尾页
XXXXXX
以上是明确的参数格式,下面我将对其进行解释:“封面页”“目录页”“内容页1”“内容页2”“内容页3”“结尾页”标识是一页幻灯片,内容页可能不止3页;“封面页”中“标题:”后的“XXXXXXX”是整个PPT文件的主题,“副标题:”后的“XXXXXXX”是对主题的简要解释。“目录页”中“XXX”依次对应每个“内容页”的主题“XXX”,目录页中“XXX:”后面的“XXXX”是对内容页小主题“XXX”的简要概括。“内容页”中“XXX:”后的“XXXXXXXX”是对小主题的详细描述,后面的“XXXXXXXX”装入内容文本框。最后的“结尾页”装入结尾页内容“XXXXXX”。请注意,我所描述的所有“XXX”“XXXX”“XXXXXXX”“XXXXXX”“XXXXXXXX”不代表任何具体内容,也不代表任何字数限制,只是表示此处有不同的字符内容。
for (String line : lines) {
            log.debug("Parsing line: " + line);
            if (line.equals("封面页") || line.equals("目录页") || line.startsWith("内容页") || line.equals("结尾页")) {
                if (currentTitle != null) {
                    log.debug("Adding slide: Title=" + currentTitle + ", Content=" + currentContent.toString());
                    slides.add(new SlideContent(currentTitle, currentContent.toString(), currentImagePrompt));
                    currentContent.setLength(0);
                }
                currentTitle = line;
                isDirectory = line.equals("目录页");
                currentSubtitle = null;
                currentImagePrompt = null;
            } else if (line.startsWith("标题:")) {
                currentTitle = line.substring(3).trim();
                log.debug("Found title: " + currentTitle);
            } else if (line.startsWith("副标题:")) {
                currentSubtitle = line.substring(4).trim();
                log.debug("Found subtitle: " + currentSubtitle);
                currentContent.append(currentSubtitle).append("\n");
            } else if (line.startsWith("图片:")) {
                currentImagePrompt = line.substring(3).trim();
                log.debug("Found image prompt: " + currentImagePrompt);
            } else if (isDirectory && line.contains(":")) {
                currentContent.append(line).append("\n");
            } else if (!isDirectory && line.contains(":")) {
                String[] parts = line.split(":", 2);
                currentTitle = parts[0].trim();
                currentContent.append(parts[1].trim()).append("\n");
            } else {
                currentContent.append(line).append("\n");
            }
        }

报错布局获取失败。

增加了判断如果识别不到需要的指定布局就使用一个默认的布局或创建一个新的布局的逻辑。

没有指定下载路径,待修改。

修改后可下载文件,但是没有按照我的要求来,全部内容都聚集到因为识别不到版式而在最后新建的幻灯片中,没有插入到模板中,这显然是不合理的,再进行修改。修改过程中出现了生成空文件的问题。感觉是参数内容没有被正确解析,检查解析逻辑、文件生成逻辑,以及文件返回逻辑。

修改后生成的文件首页没有问题,内容页没有正确解析,导致后面的参数全部进入目录页。

图像大模型绘画出的图片不知道为什么并没有替换首页模板中的图片。

我新增加逻辑判断内容页1、2、3、4不太方便,简略起见不如直接将生成的内容页不做数字区分,这样生成的幻灯片内容就在正确的页面上。

单独测试生成图片功能时一切正常,图片也可以正常生成,但奇怪的是放到生成PPT请求里就会出现这样的报错,应该是表示在客户端或服务器端连接意外关闭时发生的错误。的确是提前关闭,因为正常调用大模型生成图片需要较长时间,一般需要100秒左右,而在postman里测试不到一秒钟就能生成并下载好PPT文件,这显然不合理。找了很多种解决办法,包括服务器超时配置等等,目前还未解决。

后续增加通过选择不同模板生成文件。

调试了好几天,我认为图像注入不成功应该是因为并发导致的输入流意外结束,所以不等图片生成就关闭了输入,直接生成并下载PPT文件。

需要做的修改就是把图片生成功能单独分离出去,先生成图片下载之后再进行PPT生成,然后将图片注入。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值