精华内容
下载资源
问答
  • 使用java获取word文档批注

    千次阅读 2019-01-24 16:17:10
    使用jar poi3.14 public class DocPostil{ private File file; /** Word document */ private XWPFDocument docx; /** 批注内容数组 */ private XWPFComment[] comments;// /** 批注引用正文map,结构-<...

    使用jar poi3.14

    public class DocPostil{
    	private File file;
    	/** Word document */
    	private XWPFDocument docx;
    	/** 批注内容数组 */
    	private XWPFComment[] comments;//
    	/** 批注引用正文map,结构-<批注Id,正文text> */
    	private Map<String, String> commentRefs;// /** 日期格式化类型 */
    	private final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    	/** 批注所引用正文装配Map完毕标识 */
    	private static final String COMMENT_REF_FILLED_OK = "OK";
    	/** 批注最大下标 */
    	private String maxCommentIndex;
    
    	/*
    	 * @param filePath Word文件路径
    	 */
    	public POI_S4_Test(String filePath) throws Exception {
    		file = new File(filePath);
    		initAttributes();
    	} 
    	
    	/*
    	 * 初始化成员变量
    	 * @throws Exception Word缺陷导入异常
    	 */
    	private void initAttributes() throws Exception {
    		try {
    			docx = new XWPFDocument(POIXMLDocument.openPackage(file
    					.getCanonicalPath()));
    			comments = docx.getComments();
    			maxCommentIndex = String.valueOf(comments.length - 1);
    			commentRefs = new HashMap<String, String>();
    			fillCommentRef(docx.getDocument().getDomNode(),
    					new StringBuilder(), new StringBuilder(),
    					new StringBuilder(), commentRefs);
    		} catch (Exception e) {
    			throw new Exception(new StringBuilder().append("Word文件格式错误")
    					.append("-").append(e.getMessage()).toString(), e);
    		}
    	}
    
    	/*
    	 * 获取批注内容
    	 */
    	public XWPFComment[] getComments() {
    		return comments;
    	}
    
    	public Map<String, String> getCommentRefs() {
    		return commentRefs;
    	}
    
    	/*
    	 * 获取日期格式化类型
    	 */
    	public SimpleDateFormat getSdf() {
    		return sdf;
    	}
    
    	/* 获取批注日期List */
    	public List<Date> getSubmitDateList() {
    		Map<String, Date> dateMap = new HashMap<String, Date>();
    		List<Date> dateList = new ArrayList<Date>();
    		try {
    			Iterator<POIXMLDocumentPart> iter = docx.getRelations().iterator();
    			do {
    				if (!iter.hasNext())
    					break;
    				POIXMLDocumentPart p = (POIXMLDocumentPart) iter.next();
    				String relation = p.getPackageRelationship()
    						.getRelationshipType();
    				if (relation.equals(XWPFRelation.COMMENT.getRelation())) {
    					CommentsDocument cmntdoc;
    					cmntdoc = Factory
    							.parse(p.getPackagePart().getInputStream());
    					List<CTComment> commentList = cmntdoc.getComments()
    							.getCommentList();
    					int len = commentList.size();
    					int j = 0;
    					while (j < len) {
    						CTComment ctcomment = commentList.get(j);
    						dateMap.put(ctcomment.getId().toString(), ctcomment
    								.getDate().getTime());
    						j++;
    					}
    				}
    			} while (true);
    		} catch (Exception e) {
    		}
    		if (dateMap != null) {
    			for (XWPFComment comment : comments) {
    				dateList.add(dateMap.get(comment.getId()));
    			}
    		}
    		return dateList;
    	}
    
    	/*
    	 * 获取批注作者List
    	 */
    	public List<String> getSubmitterList() {
    		List<String> list = new ArrayList<String>();
    		for (XWPFComment comment : comments) {
    			list.add(comment.getAuthor().trim());
    		}
    		return list;
    	}
    	/*
    	 * 组装批注引用文本Map,Map结构-<commentId,text>
    	 * @param node WordProcessingML node
    	 * @param id 批注ID
    	 * @param value 批注引用正文文本
    	 * @param convertOK 正文组装完毕标识 ,组装完毕 = "OK"
    	 * @param map 要填充的目标Map
    	 */
    	private void fillCommentRef(Node node, StringBuilder id,
    			StringBuilder value, StringBuilder convertOK,
    			Map<String, String> map) throws Exception {
    		// fillCommentRef方法要求所有参数不能为null,如果为null,抛出异常
    		if (!insureNotNull(node, id, value, convertOK, map)) {
    			throw new IllegalArgumentException(new StringBuilder()
    					.append(this.getClass().getName())
    					.append("fillCommentRef(").append(node).append(",")
    					.append(id).append(",").append(value).append(",")
    					.append(convertOK).append(",").append(map).append(")")
    					.toString());
    		}
    	
    		if ("w:t".equals(node.getNodeName()) && id.length() > 0) {
    			value.append(node.getFirstChild().getNodeValue());
    		} else if ("wp:docPr".equals(node.getNodeName()) && id.length() > 0) {
    			value.append("[").append(getAttribute(node, "name")).append("]");
    		} else if ("w:commentRangeStart".equals(node.getNodeName())) {
    			id.setLength(0);
    			id.append(getAttribute(node, "w:id"));
    			value.setLength(0);
    		} else if ("w:commentRangeEnd".equals(node.getNodeName())
    				&& id.length() > 0) {
    			if (id.toString().equals(getAttribute(node, "w:id"))) {
    				map.put(id.toString(), value.toString());
    				if (id.toString().equals(maxCommentIndex)) {
    					convertOK.setLength(0);
    					convertOK.append(COMMENT_REF_FILLED_OK);
    					id.setLength(0);
    					value.setLength(0);
    				}
    			}
    		}
    		if (node.hasChildNodes()) {
    			NodeList temp = node.getChildNodes();
    			for (int i = 0; i < temp.getLength(); i++) {
    				if (convertOK.toString().endsWith(COMMENT_REF_FILLED_OK)) {
    					break;
    				}
    				fillCommentRef(temp.item(i), id, value, convertOK, map);
    			}
    		}
    	}
    
    	/***
    	 * @param node
    	 *            当前的Node
    	 * @param attName
    	 *            要获取的属性名
    	 * @return 属性值,没有该属性时返回null
    	 */
    	private static String getAttribute(Node node, String attName) {
    		return (node.hasAttributes() && node.getAttributes().getNamedItem(
    				attName) != null) ? node.getAttributes().getNamedItem(attName)
    				.getNodeValue() : null;
    	}
    
    	/*
    	 * 确保此方法的所有参数均不为空
    	 * @param objects 对象参数
    	 * @return 所有参数均不为空返回true 否则为false
    	 */
    	private boolean insureNotNull(Object... objects) {
    		for (Object object : objects) {
    			if (object == null) {
    				return false;
    			}
    		}
    		return true;
    	}
    
    	public static void main(String[] args) throws Exception {
    		StringBuffer value = new StringBuffer();
    		POI_S4_Test wh = new POI_S4_Test(
    				"D:\\example.docx");
    		XWPFComment[] comments = wh.getComments();
    		Map<String, String> commenRefMap = wh.getCommentRefs();
    		List<Date> l = wh.getSubmitDateList();
    		SimpleDateFormat sdf = wh.getSdf();
    		XWPFComment comment;
    		for (int i = 0; i < comments.length; i++) {
    			comment = comments[i];
    			value.append("批注Id:").append(comment.getId()).append(", ")
    					.append("批注作者:").append(comment.getAuthor()).append(", ")
    					.append("批注日期:").append(sdf.format(l.get(i))).append(", ")
    					.append("批注内容:").append(comment.getText()).append(", ")
    					.append("批注引用正文:")
    					.append(commenRefMap.get(comment.getId()));
    			value.append("\n");
    		}
    		System.out.println(value);
    	}
    }
    

    以上代码仅供参考

    展开全文
  • word文档添加批注

    2020-03-17 19:05:19
    插入->批注

     插入->批注

     

    展开全文
  • word文档中添加批注

    千次阅读 2017-11-26 22:19:24
    审阅、选择文字,插入批注即可

    审阅、选择文字,插入批注即可

    展开全文
  • 功能描述: 提取docx格式Word文档中所有批注。 测试文档: 参考代码: 运行结果:

    功能描述:

    提取docx格式Word文档中所有批注。

    测试文档:

    参考代码:

    运行结果:

    展开全文
  • word2010批注使用

    千次阅读 热门讨论 2013-08-06 21:33:39
    曾经我们都接触过word使用,也自以为自己懂多少多少,也号称过了计算机一级。最近我们在看英语学习文档,当老师说到批注的时候,才了解到还有这么个东西。 不仅仅是我们现在的英语学习,以后各类各业的学习,批注...
  • 默认情况下, Microsoft Office Word 2007 使用批注框显示删除内容、批注、格式更改和已移动的内容。如果要查看所有嵌入式修订,可以更改设置以便按需要的方式显示修订和批注批注框显示格式更改、批注和删除内容。...
  • Java在线打开word文档实现手写批注

    千次阅读 2019-04-04 13:29:04
    有些OA系统会有用户在线对word文档添加手写批注的需求,这样的需求看似不好实现,其实是可以实现的。 但是这需要开发者具备将activex控件集成到Java环境的能力。对于大部分Java开发工程师来说,仅仅解决单一的功能...
  • word怎么批注修改文章

    2019-09-26 17:47:40
    word文档在日常使用时,可以用些非常实用的功能,下面小编给大家介绍下word文档里的批注功能,很多人知道平时领导审阅文件的时候会对一些内容做些批注,在word文档里怎么批注呢?下面就来看下具体步骤吧。 1、新建...
  • WORD 2013可以使用墨迹在文档上面标注,本文讲述通过WPF第三方控件实现类似主要功能如下: 名称 描述 墨迹标注 不论是否触摸屏环境下可以开始墨迹功能,并实现鼠标/触摸在文档任...
  • 巧用 word 批注功能

    千次阅读 2011-04-26 14:13:00
    在修改Word文档时如果遇到一些不能确定是否要改的地方,可以通过插入Word批注的方法暂时做记号。或者是审阅Word文稿的过程中审阅者对作者提出的一些意见和建议时,也可以通过Word批注的形式表达自己的意思。...
  • VC读取Word文档中的批注内容 第一步 import office com对象库 Stdafx.h. #import "C:\Program Files (x86)\Common Files\Microsoft Shared\OFFICE14\MSO.dll" \ rename("RGB", "_OfficeRGB") #import "C:\Program ...
  • 修改word文档中已有的批注者名称

    千次阅读 热门讨论 2019-04-21 11:49:42
    word中可以通过修改用户的信息实现新建的批注者显示不同的名称,但是对于文档中已有的批注则无法进行修改,在vba中通过word.documents(1).comments(1).contact 属性允许读取批注者名称,但是不允许修改。因此,我们...
  • 学Python,用RPA 艺赛旗RPA2020.1版本 正在免费下载...提取 docx 格式 Word 文档中所有批注。 from zipfile import ZipFile from re import findall fn = r"带批注的测试文件.docx" with ZipFile(fn) as fp: try: c...
  • word自动批注

    2019-10-09 11:40:21
    welcome to my blog word开启边修改边添加批注功能: ‘审阅’ → ‘修订’ ‘修订’ 按钮颜色加深后说明进入了修订模式, 此时就可以跟踪对此文档所做的更改 ...
  • 为了能更好的将UEditor的发展成为线上的word编辑工具,UEditor正式上线了...随着word文档导入功能的添加,UEditor后续功能的开发也将会以word功能还原度为目标,例如(分页,批注,文本框,公式,图形编辑等等)。在...
  • Python用什么方法可以获取到Word文档里的批注。试过Python-docx好像没法获取批注
  • 一劳永逸去除Word文档修订和批注帮助(转) 您从同事的电子邮件中收到一个文档,它对于您要制作的文档来说可能是一个很好的起点,于是您用新名称保存了它并按你的需要进行定制。您没有在意您的同事在原始文档中留的...
  • 使用Word 2016编辑文档时也会遇到各种各样此类问题,比如需要为文档添加批注。为了帮助阅读者更好地理解文档内容以及跟踪文档的修改状况,可以为文档添加批注。那么如何进行操作呢?下面小编与你分享具体步骤和...
  • 为了方便大家阅读一般我们在制作办公文件或者重要文档的时候都会在重要的语句下标记和批注,近期就有用户在使用office办公的时候打开Word发现有许多墨迹批注,用户表示自己不需要这些批注该怎么将其去掉呢?...
  • 巧妙去除Word文档修订和批注帮助

    千次阅读 2008-07-28 11:20:00
    巧妙批量删除 去除Word文档修订和批注帮助要除去修订和批注,您需要接受或拒绝更改,以及删除批注。这里就是方法: 1.在“视图”菜单上,指向“工具栏”,然后单击“审阅”。 2.在“审阅”工具栏上,单击“显示”,...
  • Word批注怎样删掉用户名有时候Word在添加批注的时候...Word2003删除方法1、打开文档并添加批注后,找到工具——选项。2、打开选项界面后,切换到”用户信息“进行设置。3、然后将用户信息清空,最后确定,以后添加的...
  • 您从同事的电子邮件中收到一个文档,它对于您要制作的文档来说可能是一个很好的起点,于是您用新名称保存了它并按你的需要进行定制。... 或者您使用Word 中的修订功能来保持跟踪您对简历所做的修改,现在您...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,474
精华内容 1,389
关键字:

word文档批注功能使用