Code Monkey home page Code Monkey logo

kbase-doc's Introduction

文档在线预览编辑系统

Badge

之前做过在线编辑文档的功能,使用 webdav 来实现在线编辑, 存在的问题是编辑页面保存不可控(是否可以保存为版本、是否可以放弃保存等)。如果大家有实现类似功能,希望能提供帮助。

当前应用的主要功能是采用 LibreOffice 和 ckeditor 来实现文档的预览和编辑功能,先介绍操作步骤,再谈下面临的问题。

操作步骤

文件列表

展示当前用户已上传的文件,并提供预览和删除操作

列表页面

上传文件

上传文件时直接利用 LibreOffice 将文件转换成 html并保存

上传页面

预览文件

用户可以在预览界面单击编辑按钮,并实现保存或保存为版本功能

预览页面

编辑页面

已知问题

  1. word中包含图片如何处理?目前是用Html正则将图片加上一个 地址 进行加载,这样在保存的时候,html文件的图片地址有异常

    答:word 中的图片,不在后端进行处理,如果该图片是网络图片,可以进行正常访问吗,如果该图片是本地图片,前端采用js处理

  2. html 图片的正则未区分网络图片还是本地图片

    答:见第1点

  3. 用户修改word中的图片如何处理?

    答:按照第1点处理后,不存在该问题

  4. 将html转换成doc后,文件内容格式有误

    答:html直接转换成docx,采用 LibreOffice 转换,效果略优于 OpenOffice

  5. windows 操作系统上如何删除一个正在被占用的进程?

  6. 是否能很好的兼容 excel 和 ppt 的预览编辑功能

    答:暂时不能

  7. Cannot read JPEG2000 image: Java Advanced Imaging (JAI) Image I/O Tools are not installed

<dependency>
    <groupId>com.github.jai-imageio</groupId>
    <artifactId>jai-imageio-core</artifactId>
    <version>1.4.0</version>
</dependency>
<dependency>
    <groupId>com.github.jai-imageio</groupId>
    <artifactId>jai-imageio-jpeg2000</artifactId>
    <version>1.3.0</version>
</dependency>

总结

  1. visio 文件可采用 LibreOffice 转换成 pdf 实现在线预览,OpenOffice无法实现
  2. LibreOffice 支持转换加密的 office 文件,前提是给出明文密码。详见 ConvertTests#testEncrypt
  3. pdf 文件可以调用 pdf2dom 来实现转换 html,从而也可以在线编辑。详见 PdfToHtmlTests#pdf2html
  4. 水印(Watermark)实现方案,本案例中实现了对图片,word,excel,ppt,pdf等格式的水印处理,支持文本水印和图片水印。详见 WatermarkProcessorTests

Restful Apis

http://localhost:8080/kbase-doc/swagger-ui.html

感谢

mirkonasato / jodconverter

sbraconnier/jodconverter

kbase-doc's People

Contributors

dependabot[bot] avatar ekoz avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

kbase-doc's Issues

soffice.bin为什么找不到

java.lang.IllegalStateException: invalid officeHome: it doesn't contain soffice.bin
org.artofsolving.jodconverter.office.DefaultOfficeManagerConfiguration.buildOfficeManager(DefaultOfficeManagerConfiguration.java:167) ~[jodconverter-core-3.0-beta-4.jar:na]
我已经安装了LibreOffice软件,也能在电脑上找到,我是在win10上安装的,请问有解决方案吗?

请问这个系统对doc、xls、ppt的格式是无法加水印吗?

`com.eastrobot.doc.watermark.WatermarkException: Docx4JException

Caused by: org.docx4j.openpackaging.exceptions.Docx4JException: This file seems to be a binary doc/ppt/xls, not an encrypted OLE2 file containing a doc/pptx/xlsx`

另外,问下同学。我看代码,发现生成水印的方式(图片水印/文字水印),最后都是以图片的形式作为水印加到文档里的是吗

excel加水印会强制Full GC

在 ExcelProcessor 类中,会调用BinaryPartAbstractImage.createImagePart方法,该方法内部有一段逻辑:

		// Delete the tmp file
		// As per http://stackoverflow.com/questions/991489/i-cant-delete-a-file-in-java
		// the following 3 lines are necessary, at least on Win 7 x64
		// Also reported on Win XP, but in my testing, the files were deleting OK anyway.
		fos = null;
		fis = null;
		if (Docx4jProperties.getProperty("docx4j.openpackaging.parts.WordprocessingML.BinaryPartAbstractImage.TempFiles.ForceGC", true)) {
			System.gc();
		}

此处会强制 Full GC。

所以针对 excel 加水印,是不是换成其他方法会好一些。

swagger2.9.2的文件类型需要将dateType修改为__file

如下,@ApiImplicitParam中参数的dataType需要修改为__file才能在swagger-ui中正常上传文件,否则就是一个普通输入框

	/**
	 * 上传文件
	 * @author eko.zhan at 2017年8月9日 下午8:32:39
	 * @param uploadFile
	 * @param request
	 * @return
	 */
	@ApiOperation(value="上传文件", notes="")
	@ApiImplicitParams({
		@ApiImplicitParam(name="uploadFile", value="待上传的文件", required=true, dataType="__file")
	})
	@RequestMapping(value="uploadData", method=RequestMethod.POST)
	public JSONObject uploadData(@RequestParam("uploadFile") MultipartFile uploadFile, HttpServletRequest request){

如何提取水印?

您好,查看了您对于pdf文件嵌入的源码,请问是否有对应提取水印的方法?

加水印失败

当我使用这种方式加水印时:
InputStream in = new FileInputStream(inputUrl);
//获取word文档解析对象
XWPFDocument doucument = new XWPFDocument(in);
addWaterMark(doucument,"水印","#d8d8d8");
报错:
Exception in thread "main" java.lang.IndexOutOfBoundsException
at org.openxmlformats.schemas.wordprocessingml.x2006.main.impl.CTRImpl.getPictArray(Unknown Source)
at com.zhibei.utils.PoiUtil.addWaterMark(PoiUtil.java:339)
at com.zhibei.utils.PoiUtil.changeWord(PoiUtil.java:290)
at com.zhibei.utils.PoiUtil.main(PoiUtil.java:486)

Math

Hello, nice work.
Is there and implemented math support?

任重而道远

加油!
目前还是没有很好的解决 -PPT的预览问题,
不过做出来提取文字已经蛮厉害了。

上传pdf文件时前端显示成功,但是后端报错。
2019-04-23 14:40:52.355 ERROR 16872 --- [nio-8080-exec-8] com.eastrobot.web.IndexController : failed conversion: pdf [1511384b] to html; org.artofsolving.jodconverter.office.OfficeException: unsupported conversion; input file: 1556001649210.pdf
image

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.