呃好久没写了感觉没什么好写的,然后做完了(
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里面,递归导出一下:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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(); }
啊缓存图片对内存是不是不太好,不过一篇论文也不会有太多太大的图,先观察一下。
7. 在FileUtil里写了一堆又破又长的代码判字符串,不想改正则了就这样吧。
8. 其他逻辑写毕设论文的时候再说吧。
TODO:内存优化
看了一下平时在20M左右,但预览的时候会飙到200M,图片还是占内存的,怎么给它优化一下。