| | |
| | | import java.io.FileOutputStream; |
| | | import java.io.IOException; |
| | | import java.io.InputStream; |
| | | import java.math.RoundingMode; |
| | | import java.text.DecimalFormat; |
| | | import java.util.ArrayList; |
| | | import java.util.Iterator; |
| | | import java.util.List; |
| | | |
| | | import com.aspose.cells.Cells; |
| | | import com.aspose.cells.HtmlSaveOptions; |
| | | import com.aspose.cells.PdfSaveOptions; |
| | | import com.aspose.cells.Workbook; |
| | | import com.aspose.cells.Worksheet; |
| | | import com.aspose.cells.WorksheetCollection; |
| | | import com.aspose.slides.Presentation; |
| | | import com.aspose.words.Document; |
| | | import com.aspose.words.ImportFormatMode; |
| | | import com.aspose.words.NodeCollection; |
| | | import com.aspose.words.NodeType; |
| | | import com.aspose.words.Paragraph; |
| | | import com.aspose.words.SaveFormat; |
| | | import com.aspose.words.Section; |
| | | import com.aspose.words.SectionStart; |
| | | import com.aspose.words.*; |
| | | import com.product.core.exception.BaseException; |
| | | import com.product.core.spring.context.SpringMVCContextHolder; |
| | | import com.product.file.config.FileCode; |
| | | |
| | | public class AsposeUtil { |
| | | private static int OFFICE_XLS=1; |
| | | private static int OFFICE_WORD=2; |
| | | private static int OFFICE_PPT=3; |
| | | private static boolean OFFICE_XLS_=false; |
| | | private static boolean OFFICE_WORD_=false; |
| | | private static boolean OFFICE_PPT_=false; |
| | | //是否初始了license |
| | | private static boolean isInitLicense=false; |
| | | /** |
| | |
| | | boolean result = true; |
| | | InputStream is = null; |
| | | try { |
| | | is = AsposeUtil.class.getClassLoader().getResourceAsStream("license.xml"); |
| | | com.aspose.cells.License excel = new com.aspose.cells.License(); |
| | | excel.setLicense(is); |
| | | |
| | | is = AsposeUtil.class.getClassLoader().getResourceAsStream("license.xml"); |
| | | com.aspose.words.License word = new com.aspose.words.License(); |
| | | word.setLicense(is); |
| | | |
| | | is = AsposeUtil.class.getClassLoader().getResourceAsStream("license.xml"); |
| | | com.aspose.slides.License ppt = new com.aspose.slides.License(); |
| | | ppt.setLicense(is); |
| | | |
| | | isInitLicense=true; |
| | | if(type==OFFICE_XLS && !OFFICE_XLS_ ) { |
| | | is = AsposeUtil.class.getClassLoader().getResourceAsStream("license.xml"); |
| | | com.aspose.cells.License excel = new com.aspose.cells.License(); |
| | | excel.setLicense(is); |
| | | OFFICE_XLS_=true; |
| | | }else if(type==OFFICE_WORD && !OFFICE_WORD_ ){ |
| | | is = AsposeUtil.class.getClassLoader().getResourceAsStream("license.xml"); |
| | | com.aspose.words.License word = new com.aspose.words.License(); |
| | | word.setLicense(is); |
| | | OFFICE_WORD_=true; |
| | | }else if(type==OFFICE_PPT && ! OFFICE_PPT_) { |
| | | is = AsposeUtil.class.getClassLoader().getResourceAsStream("license.xml"); |
| | | com.aspose.slides.License ppt = new com.aspose.slides.License(); |
| | | ppt.setLicense(is); |
| | | OFFICE_PPT_=true; |
| | | } |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | result=false; |
| | | throw new BaseException(FileCode.DOC_CONVERT_FALL,e); |
| | | }finally{ |
| | |
| | | Word2Pdf(officePath,outFile); |
| | | }else if(officeType.equals("xls")||officeType.equals("xlsx")){ |
| | | // Excel2Pdf(officePath,outFile); |
| | | // Excel2Html(officePath,outFile); |
| | | xls2xlsx(officePath,outFile,officeType); |
| | | Excel2Html(officePath,outFile); |
| | | // xls2xlsx(officePath,outFile,officeType); |
| | | }else if(officeType.equals("ppt")||officeType.equals("pptx")){ |
| | | PPT2Pdf(officePath,outFile); |
| | | }else{ |
| | |
| | | } |
| | | /** |
| | | * word文档的合并 |
| | | * @param targetWordFile |
| | | * @param sourceWordFile |
| | | * @param |
| | | * @param |
| | | * @return |
| | | * @throws Exception |
| | | */ |
| | |
| | | return source; |
| | | } |
| | | // 验证License |
| | | if (!getLicense(2)) { |
| | | if (!getLicense(OFFICE_WORD)) { |
| | | return null; |
| | | } |
| | | FileInputStream tin=null; |
| | |
| | | sin=new FileInputStream(source); |
| | | Document targetDoc = new Document(tin); |
| | | Document sourceDoc = new Document(sin); |
| | | docBlankProcess(targetDoc); |
| | | // docBlankProcess(targetDoc); |
| | | targetDoc.appendDocument(sourceDoc, ImportFormatMode.KEEP_SOURCE_FORMATTING); |
| | | |
| | | |
| | | // for(Section sect : targetDoc.getSections()) |
| | | // { |
| | | // if (sect.getBody().getParagraphs().getCount() == 0) { |
| | | // sect.remove(); |
| | | // } |
| | | // NodeCollection t =sourceDoc.getChildNodes(); |
| | | // for(int c=0;c<t.getCount();c++) { |
| | | // targetDoc.getChildNodes().add(t.get(c)); |
| | | // } |
| | | File dir=new File(temp); |
| | | if(!dir.exists()) { |
| | |
| | | targetDoc.save(out, SaveFormat.DOCX); |
| | | } |
| | | }catch(Exception e) { |
| | | e.printStackTrace(); |
| | | throw new BaseException(FileCode.DOC_MERGE_FALL,e); |
| | | } |
| | | finally{ |
| | |
| | | public static void docBlankProcess(Document targetDoc) { |
| | | NodeCollection nodes=targetDoc.getChildNodes(NodeType.PARAGRAPH, true); |
| | | System.out.println(nodes.getCount()); |
| | | List <Node> ss=new ArrayList<>(); |
| | | for(Paragraph para :(Iterable<Paragraph>) nodes) { |
| | | System.out.println("==========================="); |
| | | System.out.println(para.isEndOfSection()); |
| | | System.out.println(para.hasChildNodes()); |
| | | String text=para.getText(); |
| | | if("\r".equals(text)) { |
| | | System.out.println("rrrrrrrrrrrr"); |
| | | }else if("\f".equals(text)) { |
| | | System.out.println("ffffffffffff"); |
| | | }else { |
| | | System.out.println(text); |
| | | if("\r".equals(text))System.out.println("\\\\r"); |
| | | else if("\f".equals(text))System.out.println("\\\\f"); |
| | | else if("".equals(text.trim())) System.out.println("空格"); |
| | | else System.out.println(text); |
| | | |
| | | NodeCollection pnodes =para.getChildNodes(); |
| | | if(pnodes.getCount()==0)para.appendChild(new Run(targetDoc,"a")); |
| | | if(para.isEndOfSection())para.appendChild(new Run(targetDoc,"B")); |
| | | System.out.println("sub nodes:"+pnodes.getCount()); |
| | | for(int i=0;i<pnodes.getCount();i++) { |
| | | Node d=pnodes.get(i); |
| | | System.out.println("type:"+NodeType.getName(d.getNodeType())); |
| | | |
| | | if("\r".equals(text))System.out.println("\\\\r"); |
| | | else if("\f".equals(text))System.out.println("\\\\f"); |
| | | else if("".equals(text.trim())) System.out.println("空格"); |
| | | else System.out.println(text); |
| | | if("BOOKMARK_END".equals(NodeType.getName(d.getNodeType()))) { |
| | | BookmarkEnd b=(BookmarkEnd)d; |
| | | } |
| | | if(d.getNodeType()==NodeType.SHAPE) { |
| | | ss.add(d); |
| | | } |
| | | } |
| | | if ("\r".equals(text) |
| | | //|| "\f".equals(text) |
| | | ) { |
| | | para.remove(); |
| | | } |
| | | |
| | | |
| | | } |
| | | } |
| | | public static void docProcess(Document targetDoc) { |
| | | NodeCollection nodes=targetDoc.getChildNodes(); |
| | | for(Paragraph para :(Iterable<Paragraph>) nodes) { |
| | | String text=para.getText(); |
| | | if("\r".equals(text)) { |
| | | System.out.println("rrrrrrrrrrrr"); |
| | | }else if("\f".equals(text)) { |
| | | System.out.println("ffffffffffff"); |
| | | }else { |
| | | System.out.println(text); |
| | | } |
| | | if ("\r".equals(text) |
| | | //|| "\f".equals(text) |
| | | ) { |
| | | para.remove(); |
| | | } |
| | | for(Node d:ss) { |
| | | d.remove(); |
| | | } |
| | | |
| | | } |
| | | |
| | | private static String appendDoc(String sohuyepath, String xuyepath, boolean includeSection) throws Exception { |
| | | // 验证License |
| | | if (!getLicense(OFFICE_WORD)) { |
| | | return null ; |
| | | } |
| | | Document dstDoc = new Document(sohuyepath); |
| | | Document srcDoc = new Document(xuyepath); |
| | | System.out.println("目标文档页数:"+dstDoc.getPageCount()+" | 源文档页数:"+srcDoc.getPageCount()); |
| | | if (includeSection) { |
| | | Iterator<Section> var3 = srcDoc.getSections().iterator(); |
| | | while (var3.hasNext()) { |
| | | Section srcSection = (Section) var3.next(); |
| | | Node dstNode = dstDoc.importNode(srcSection, true, 0); |
| | | dstDoc.appendChild(dstNode); |
| | | } |
| | | } else { |
| | | Node node = dstDoc.getLastSection().getBody().getLastParagraph(); |
| | | if (node == null) { |
| | | node = new Paragraph(srcDoc); |
| | | dstDoc.getLastSection().getBody().appendChild(node); |
| | | } |
| | | |
| | | if (node.getNodeType() != 8 & node.getNodeType() != 5) { |
| | | throw new Exception("Use appendDoc(dstDoc, srcDoc, true) instead of appendDoc(dstDoc, srcDoc, false)"); |
| | | } |
| | | |
| | | insertDocumentAfterNode(node, dstDoc, srcDoc); |
| | | } |
| | | File f=new File(sohuyepath); |
| | | dstDoc.save(f.getParent()+"/merge/"+f.getName()); |
| | | return f.getParent()+"/merge/"+f.getName(); |
| | | } |
| | | |
| | | private static void insertDocumentAfterNode(Node insertAfterNode, Document mainDoc, Document srcDoc) |
| | | throws Exception { |
| | | if (insertAfterNode.getNodeType() != 8 & insertAfterNode.getNodeType() != 5) { |
| | | throw new Exception("The destination node should be either a paragraph or table."); |
| | | } else { |
| | | CompositeNode dstStory = insertAfterNode.getParentNode(); |
| | | |
| | | while (null != srcDoc.getLastSection().getBody().getLastParagraph() |
| | | && !srcDoc.getLastSection().getBody().getLastParagraph().hasChildNodes()) { |
| | | srcDoc.getLastSection().getBody().getLastParagraph().remove(); |
| | | } |
| | | |
| | | NodeImporter importer = new NodeImporter(srcDoc, mainDoc, 1); |
| | | int sectCount = srcDoc.getSections().getCount(); |
| | | |
| | | for (int sectIndex = 0; sectIndex < sectCount; ++sectIndex) { |
| | | Section srcSection = srcDoc.getSections().get(sectIndex); |
| | | int nodeCount = srcSection.getBody().getChildNodes().getCount(); |
| | | |
| | | for (int nodeIndex = 0; nodeIndex < nodeCount; ++nodeIndex) { |
| | | Node srcNode = srcSection.getBody().getChildNodes().get(nodeIndex); |
| | | Node newNode = importer.importNode(srcNode, true); |
| | | dstStory.insertAfter(newNode, insertAfterNode); |
| | | insertAfterNode = newNode; |
| | | } |
| | | } |
| | | |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 把源文档内容放到最后一页的页末 |
| | | * @param sohuyepath |
| | | * @return |
| | | * @throws Exception |
| | | */ |
| | | private static void appendDocToPageTail(String sohuyepath) throws Exception { |
| | | Document dstDoc = new Document(sohuyepath); |
| | | int destPages=dstDoc.getPageCount(); |
| | | System.out.println("合并合的最后总页数:"+destPages); |
| | | Node lastNode=dstDoc.getLastSection().getBody().getLastChild(); |
| | | Paragraph lp=null; |
| | | if(lastNode.getNodeType()==NodeType.PARAGRAPH){ |
| | | lp=(Paragraph)lastNode; |
| | | Node ld=lp.getFirstChild(); |
| | | while(ld!=null && ld.getNodeType()!=NodeType.SHAPE && ld.getNodeType()!=NodeType.RUN && ld.getNodeType()!=NodeType.TABLE){ |
| | | System.out.println("type name "+NodeType.getName(ld.getNodeType())); |
| | | ld=ld.getPreviousSibling(); |
| | | } |
| | | } |
| | | System.out.println("最后一节点:"+NodeType.getName(lastNode.getNodeType())); |
| | | for(int i=0;i<40;i++) { |
| | | Run t = new Run(dstDoc, "======\r"); |
| | | if(lp!=null){ |
| | | lp.insertBefore(t,lp.getLastChild()); |
| | | System.out.println("子元素数:"+lp.getChildNodes().getCount()); |
| | | } |
| | | System.out.println("合并合的最后总页数:"+dstDoc.getPageCount()); |
| | | if(destPages < dstDoc.getPageCount()){ |
| | | System.out.println("================分页================="); |
| | | } |
| | | } |
| | | File ff=new File(sohuyepath); |
| | | dstDoc.save(ff.getParent()+"/merge/"+ff.getName(),SaveFormat.DOCX); |
| | | } |
| | | |
| | | public static void main(String args[]) { |
| | | String file="E:/工作内容.xlsx"; |
| | | // String file="E:/工作内容.xlsx"; |
| | | // String file="E:/爆破母线.xls"; |
| | | // String file="E:/采集提取日志表结构.xlsx"; |
| | | // String file="E:/FE信息系统国产化解决方案V1.0.docx"; |
| | | AsposeUtil.OfficeToPdf(file); |
| | | String file="E:/FE信息系统国产化解决方案V1.0.docx"; |
| | | // AsposeUtil.OfficeToPdf(file); |
| | | |
| | | // AsposeUtil.mergeWord("E:\\QQ\\住房担保置换公司.docx","E:\\QQ\\住房担保置换公司2.docx"); |
| | | // try { |
| | | // processDocPage(); |
| | | // }catch(Exception e) { |
| | | // e.printStackTrace(); |
| | | // } |
| | | try { |
| | | // String sohuyepath="E:/QQ/住房担保置换公司.docx"; |
| | | // String xuyepath="E:/QQ/FE信息系统国产化解决方案V1.0.docx"; |
| | | // String npath=appendDoc(sohuyepath, xuyepath, false); |
| | | String tail="E:/QQ/住房担保置换公司2.docx"; |
| | | // appendDoc(npath, tail, false); |
| | | appendDocToPageTail(tail); |
| | | |
| | | |
| | | }catch(Exception e) { |
| | | e.printStackTrace(); |
| | | } |
| | | } |
| | | } |