首页 > 其他分享 >毕设6:总结

毕设6:总结

时间:2024-02-27 17:59:44浏览次数:206  
标签:总结 xObject 毕设 int List images pages resources

呃好久没写了感觉没什么好写的,然后做完了(

1. List的add只是一个接口,并没有实现,各种操作请认准arraylist。

2. 关于Task

一个JavaFX异步执行的类,但请单独开一个线程给它不然还是同步的。

3. 关于TreeView界面乱跳的问题

treeitem expend的时候会展示父节点和尽量多的子节点,但可能是我的treeitem太高了所有scroll的地方不对,最终选择手动scrollTo

4. Cannot invoke "javafx.css.Styleable.getStyleableParent()" because "<local3>" is null

没查出来什么原因,可能初始化时候总有这样那样的问题。没事少用xxx.setStyle("...")

5. 关于PDF提取文字断行的问题

由于排版的原因PDF会在一个段落中间加若干换行符,提取成txt后不太方便。但它普通换行和段落换行也没啥区别,粗浅观察了一下,段落之前会有两个空字符串,于是重写了一下outputstream的write方法手动加换行符。

6. PDF提取图片

PDFBox2.0之后没有getImage方法了,要获取资源然后一个个判断是不是PDImageXObject。但有的图片会提取不出来,debug了一下发现是藏在PDFormXObject里面,递归导出一下:

public static List<RenderedImage> getImagesFromResources(PDResources resources) throws IOException {
        List<RenderedImage> images = new ArrayList<>();
        for (COSName xObjectName : resources.getXObjectNames()) {
            PDXObject xObject = resources.getXObject(xObjectName);
            if (xObject instanceof PDImageXObject) {
                images.add(((PDImageXObject) xObject).getImage());
            } else if (xObject instanceof PDFormXObject) {
                images.addAll(getImagesFromResources(((PDFormXObject) xObject).getResources()));
            }
        }
        return images;
    }
    public static void getImages(List<Pair<Integer, Integer>> pages, File file, String dest) throws IOException {
        PDDocument document = PDDocument.load(file);
        String filename = FileUtil.getPDFFilename(file);

        if(pages.isEmpty()) {
            int end = document.getNumberOfPages();
            pages.add(new Pair<>(1, end));
        }

        for(Pair<Integer, Integer> pair:pages) {
            int start = pair.getKey();
            int end = pair.getValue();

            for(int i=start;i<=end;i++) {
                PDPage page = document.getPage(i-1);
                PDResources resources = page.getResources();
                List<RenderedImage> images = getImagesFromResources(resources);
                int cnt = 1;
                for(RenderedImage image:images) {
                    String newFile = FileUtil.getUniqueFilename(dest,  filename + " p"+ i + "(" + cnt + ")", ".png");
                    File tempfile = new File(newFile);
                    tempfile.createNewFile();
                    ImageIO.write(image, "png", tempfile);
                    cnt++;
                }
            }
        }
        document.close();
    }
View Code

啊缓存图片对内存是不是不太好,不过一篇论文也不会有太多太大的图,先观察一下。

7. 在FileUtil里写了一堆又破又长的代码判字符串,不想改正则了就这样吧。

8. 其他逻辑写毕设论文的时候再说吧。

 

TODO:内存优化

看了一下平时在20M左右,但预览的时候会飙到200M,图片还是占内存的,怎么给它优化一下。

标签:总结,xObject,毕设,int,List,images,pages,resources
From: https://www.cnblogs.com/capterlliar/p/18037394

相关文章

  • Scala学习总结(三)
    Scala学习总结六、集合1.Scala集合的特点Java集合:三大类型:列表List、集合Set、映射Map,有多种不同实现。Scala集合:三大类型:序列Seq,集合Set,映射Map,所有集合都扩展自Iterable。对于几乎所有集合类,都同时提供可变和不可变版本。不可变集合:scala.collec......
  • 2.27每日总结
    今天课上学习了软件测试技术,对软件测试技术有了简单的了解。软件测试技术是一门涉及软件质量保证和验证的课程,旨在教授学生如何设计、执行和评估软件测试方案以确保软件系统的质量。这门课程通常涵盖以下内容:软件测试基础知识:介绍软件测试的基本概念、原则和方法论,包括白盒测......
  • 今日总结
    Master和Worker在Spark中,Master是独立集群的控制者,而Worker是工作者。一个Spark独立集群需要启动一个Master和多个Worker。Worker就是物理节点,可以在上面启动Executor进程。Executor在每个Worker上为某应用启动的一个进程,该进程负责运行Task,并且负责将数据存在内存或者磁盘上,每......
  • 近期总结 2024.2.26
    dp专场*2。CF1608FMEXCounting题意:给出\(n,m,b_{1...n}\),求出有多少个长度为\(n\)的序列\(a\)满足\(\foralli\in[1,n],\space0\lea_i\len\)且\(|\operatorname{mex}\{a_1,a_2,...,a_i\}-b_i|\lem\)。\(1\len\le2000,\space1\lek\le50\)很简单的......
  • 比赛总结录
    比赛总结录【寒假集训】20240206测试90/400T1.珠子题目链接0/100思路:双指针,赛场上想到了,但是没有打出来代码。T2.数组题目链接0/100思路:暴力+记录。赛场上也想到了,但是赛场上忽略了一个点。又因为多打了几行而丢了$40pts$。T3.幸运区间题目链接60/100思......
  • 补上之前空缺的总结,另外反思一下自己
    前几天学习了javase的方法,其实挺简单的,就类似于学习c++的时候用的函数,是解决一类问题的步骤。不过要注意的是方法包括在类或对象中,这一点与c++是肯定不同的,因为java更加面向对象,在编写方法时要注意,一个方法最好用于解决一个问题,实现一个功能,方法的格式是修饰+类型+方法名+实现部分......
  • Spring Boot 信息泄露总结
    1.目标2.微信sessionkey泄露导致任意用户登录点击快捷登录,发现可以使用手机号进行登录发现sessionkey,使用工具利用没有账号,尝试13111111111(一般测试账号是这个),成功登录 3.进行指纹识别,发现为SpringBoot框架,测试发现SpringActuator信息泄露 4.发现actuator/gate......
  • SSH框架使用AOP代理+自定义注解遇到的相关问题总结
    1、AOP注解失效问题编写完成注解和AOP切面类时,在controller中加上注解,注解不生效。在配置文件xml中开启AOP注解:<aop:aspectj-autoproxyproxy-target-class="true"/>如果该配置以加在项目里,但是还是不生效。需要检查一下自己的项目是否是Spring.xm分层配置的。如果分层配置的,需......
  • Taro 项目总结
    对公司以Taro框架开发的项目进行部分总结。快速上手快速搭建Taro项目#全局安装taroclinpminstall-g@tarojs/cli#使用taro命令初始化项目taroinit[项目名称]#或者直接使用npx安装npx@tarojs/cliinit[项目名称]启动项目,查看package.json文件,其中......
  • EvoSuite使用总结
    1.安装EvoSuite插件以IDEA为例,在Plugins栏搜索EvoSuite后点击install,安装完成后重启IDEA2.使用EvoSuite选中文件右键选择RunEvoSuite生成成功可以看到如下提示:注意事项:生成路径:src/test/java使用junit4版本然后在pom.xml文件添加如下依赖:<dependency>......