流程阅览超链接代码
This commit is contained in:
parent
028be0161a
commit
f9554796cf
@ -3,7 +3,7 @@
|
||||
<app xmlns="http://www.actionsoft.com.cn/app">
|
||||
<name>PAL数据迁移</name>
|
||||
<version>1.0</version>
|
||||
<buildNo>12</buildNo>
|
||||
<buildNo>16</buildNo>
|
||||
<developer id="776cca9a287c8b4d63b9cad216aa3859" tablePrefix="ACT" url="http://www.actionsoft.com.cn">北京炎黄盈动科技发展有限责任公司</developer>
|
||||
<categoryVisible>false</categoryVisible>
|
||||
<description><![CDATA[数据迁移]]></description>
|
||||
|
||||
@ -1,10 +1,13 @@
|
||||
/*
|
||||
package com.actionsoft.apps.coe.pal.datamigration.util.htmltodocx;
|
||||
|
||||
*/
|
||||
/**
|
||||
* @author baizp
|
||||
* @Description:
|
||||
* @date 2022/6/24 16:01
|
||||
*/
|
||||
*//*
|
||||
|
||||
|
||||
import org.docx4j.dml.wordprocessingDrawing.Inline;
|
||||
import org.docx4j.jaxb.Context;
|
||||
@ -28,22 +31,26 @@ import java.io.*;
|
||||
import java.math.BigInteger;
|
||||
import java.util.List;
|
||||
|
||||
*/
|
||||
/**
|
||||
* @program: htmltoword
|
||||
* @description: html 转 docx
|
||||
* @author: corey
|
||||
* @create: 2020-04-29 14:10
|
||||
**/
|
||||
**//*
|
||||
|
||||
public class HtmlToWord {
|
||||
private static ObjectFactory factory;
|
||||
private static WordprocessingMLPackage wordMLPackage;
|
||||
|
||||
/**
|
||||
*/
|
||||
/**
|
||||
* 将一段富文本字符串转为一个字节数组
|
||||
*
|
||||
* @param data
|
||||
* @return
|
||||
*/
|
||||
*//*
|
||||
|
||||
public static byte[] resolveHtml(String data) {
|
||||
Document document = Jsoup.parseBodyFragment(data, "UTF-8");
|
||||
ByteArrayOutputStream out = null;
|
||||
@ -144,20 +151,28 @@ public class HtmlToWord {
|
||||
public static void setNum1(int level,P p){
|
||||
|
||||
|
||||
/*ObjectFactory factory = new org.docx4j.wml.ObjectFactory();
|
||||
P p = factory.createP();*/
|
||||
*/
|
||||
/*ObjectFactory factory = new org.docx4j.wml.ObjectFactory();
|
||||
P p = factory.createP();*//*
|
||||
|
||||
/*org.docx4j.wml.Text t = factory.createText();
|
||||
t.setValue(em.text());*/
|
||||
|
||||
/*org.docx4j.wml.R run = factory.createR();
|
||||
*/
|
||||
/*org.docx4j.wml.Text t = factory.createText();
|
||||
t.setValue(em.text());*//*
|
||||
|
||||
|
||||
*/
|
||||
/*org.docx4j.wml.R run = factory.createR();
|
||||
run.getContent().add(t);
|
||||
|
||||
p.getContent().add(run);*/
|
||||
p.getContent().add(run);*//*
|
||||
|
||||
/*org.docx4j.wml.PPr ppr = factory.createPPr();
|
||||
|
||||
p.setPPr(ppr);*/
|
||||
*/
|
||||
/*org.docx4j.wml.PPr ppr = factory.createPPr();
|
||||
|
||||
p.setPPr(ppr);*//*
|
||||
|
||||
org.docx4j.wml.PPr ppr =p.getPPr();
|
||||
// Create and add <w:numPr>
|
||||
PPrBase.NumPr numPr = factory.createPPrBaseNumPr();
|
||||
@ -176,14 +191,16 @@ public class HtmlToWord {
|
||||
//wordMLPackage.getMainDocumentPart().addObject(p);
|
||||
}
|
||||
|
||||
/**
|
||||
*/
|
||||
/**
|
||||
* @param @param text
|
||||
* @param @return 设定文件
|
||||
* @return P 返回类型
|
||||
* @throws
|
||||
* @Title: addParapraph
|
||||
* @Description: (文本转段落)
|
||||
*/
|
||||
*//*
|
||||
|
||||
private static P addParapraph(String text) {
|
||||
factory = Context.getWmlObjectFactory();
|
||||
P paragraph = factory.createP();
|
||||
@ -197,13 +214,15 @@ public class HtmlToWord {
|
||||
return paragraph;
|
||||
}
|
||||
|
||||
/**
|
||||
*/
|
||||
/**
|
||||
* @param @param p
|
||||
* @param @param str 设定文件
|
||||
* @return void 返回类型
|
||||
* @throws
|
||||
* @Title: setFirstLine
|
||||
*/
|
||||
*//*
|
||||
|
||||
private static void setFirstLine(P p, String str) {
|
||||
PPr ppr = getPPr(p);
|
||||
Ind ind = ppr.getInd();
|
||||
@ -225,9 +244,11 @@ public class HtmlToWord {
|
||||
return ppr;
|
||||
}
|
||||
|
||||
/**
|
||||
*/
|
||||
/**
|
||||
* table @param @return 设定文件 @return Tbl 返回类型 @throws
|
||||
*/
|
||||
*//*
|
||||
|
||||
private static Tbl addTable(Element table) {
|
||||
factory = Context.getWmlObjectFactory();
|
||||
Tbl tbl = factory.createTbl();
|
||||
@ -240,9 +261,11 @@ public class HtmlToWord {
|
||||
return tbl;
|
||||
}
|
||||
|
||||
/**
|
||||
*/
|
||||
/**
|
||||
* tr @param @return 设定文件 @return Tr 返回类型 @throws
|
||||
*/
|
||||
*//*
|
||||
|
||||
private static Tr addTableTr(Element tr) {
|
||||
Elements tds = tr.getElementsByTag("th").isEmpty() ? tr.getElementsByTag("td") : tr.getElementsByTag("th");
|
||||
Tr ftr = factory.createTr();
|
||||
@ -255,9 +278,11 @@ public class HtmlToWord {
|
||||
return ftr;
|
||||
}
|
||||
|
||||
/**
|
||||
*/
|
||||
/**
|
||||
* 本方法创建一个单元格属性集对象和一个表格宽度对象. 将给定的宽度设置到宽度对象然后将其添加到 属性集对象. 最后将属性集对象设置到单元格中.
|
||||
*/
|
||||
*//*
|
||||
|
||||
private static void setCellWidth(Tc tableCell, int width) {
|
||||
TcPr tableCellProperties = new TcPr();
|
||||
TblWidth tableWidth = new TblWidth();
|
||||
@ -266,9 +291,11 @@ public class HtmlToWord {
|
||||
tableCell.setTcPr(tableCellProperties);
|
||||
}
|
||||
|
||||
/**
|
||||
*/
|
||||
/**
|
||||
* 本方法为表格添加边框
|
||||
*/
|
||||
*//*
|
||||
|
||||
private static void addBorders(Tbl table) {
|
||||
table.setTblPr(new TblPr());
|
||||
CTBorder border = new CTBorder();
|
||||
@ -287,14 +314,16 @@ public class HtmlToWord {
|
||||
table.getTblPr().setTblBorders(borders);
|
||||
}
|
||||
|
||||
/**
|
||||
*/
|
||||
/**
|
||||
* 将图片从文件对象转换成字节数组.
|
||||
*
|
||||
* @param file 将要转换的文件
|
||||
* @return 包含图片字节数据的字节数组
|
||||
* @throws FileNotFoundException
|
||||
* @throws IOException
|
||||
*/
|
||||
*//*
|
||||
|
||||
private static byte[] convertImageToByteArray(File file) throws FileNotFoundException, IOException {
|
||||
InputStream is = new FileInputStream(file);
|
||||
long length = file.length();
|
||||
@ -316,7 +345,8 @@ public class HtmlToWord {
|
||||
return bytes;
|
||||
}
|
||||
|
||||
/**
|
||||
*/
|
||||
/**
|
||||
* Docx4j拥有一个由字节数组创建图片部件的工具方法, 随后将其添加到给定的包中. 为了能将图片添加 到一个段落中, 我们需要将图片转换成内联对象.
|
||||
* 这也有一个方法, 方法需要文件名提示, 替换文本, 两个id标识符和一个是嵌入还是链接到的指示作为参数. 一个id用于文档中绘图对象不可见的属性,
|
||||
* 另一个id用于图片本身不可见的绘制属性. 最后我们将内联 对象添加到段落中并将段落添加到包的主文档部件.
|
||||
@ -324,7 +354,8 @@ public class HtmlToWord {
|
||||
* @param wordMLPackage 要添加图片的包
|
||||
* @param bytes 图片对应的字节数组
|
||||
* @throws Exception 不幸的createImageInline方法抛出一个异常(没有更多具体的异常类型)
|
||||
*/
|
||||
*//*
|
||||
|
||||
private static void addImageToPackage(WordprocessingMLPackage wordMLPackage, byte[] bytes) throws Exception {
|
||||
BinaryPartAbstractImage imagePart = BinaryPartAbstractImage.createImagePart(wordMLPackage, bytes);
|
||||
|
||||
@ -337,13 +368,15 @@ public class HtmlToWord {
|
||||
wordMLPackage.getMainDocumentPart().addObject(paragraph);
|
||||
}
|
||||
|
||||
/**
|
||||
*/
|
||||
/**
|
||||
* 创建一个对象工厂并用它创建一个段落和一个可运行块R. 然后将可运行块添加到段落中. 接下来创建一个图画并将其添加到可运行块R中. 最后我们将内联
|
||||
* 对象添加到图画中并返回段落对象.
|
||||
*
|
||||
* @param inline 包含图片的内联对象.
|
||||
* @return 包含图片的段落
|
||||
*/
|
||||
*//*
|
||||
|
||||
private static P addInlineImageToParagraph(Inline inline) {
|
||||
// 添加内联对象到一个段落中
|
||||
ObjectFactory factory = new ObjectFactory();
|
||||
@ -356,7 +389,8 @@ public class HtmlToWord {
|
||||
return paragraph;
|
||||
}
|
||||
|
||||
/**
|
||||
*/
|
||||
/**
|
||||
* This method alters the default style sheet that is part of each document.
|
||||
* <p>
|
||||
* To do this, we first retrieve the style sheet from the package and then get
|
||||
@ -365,7 +399,8 @@ public class HtmlToWord {
|
||||
* the alterations if applicable.
|
||||
*
|
||||
* @param
|
||||
*/
|
||||
*//*
|
||||
|
||||
public static void alterStyleSheet() {
|
||||
StyleDefinitionsPart styleDefinitionsPart = wordMLPackage.getMainDocumentPart().getStyleDefinitionsPart();
|
||||
Styles styles = null;
|
||||
@ -389,12 +424,14 @@ public class HtmlToWord {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
*/
|
||||
/**
|
||||
* First we create a run properties object as we want to remove nearly all of
|
||||
* the existing styling. Then we change the font and font size and set the run
|
||||
* properties on the given style. As in previous examples, the font size is
|
||||
* defined to be in half-point size.
|
||||
*/
|
||||
*//*
|
||||
|
||||
private static void alterNormalStyle(Style style) {
|
||||
// we want to change (or remove) almost all the run properties of the
|
||||
// normal style, so we create a new one.
|
||||
@ -404,16 +441,20 @@ public class HtmlToWord {
|
||||
style.setRPr(rpr);
|
||||
}
|
||||
|
||||
/**
|
||||
*/
|
||||
/**
|
||||
* For this style, we get the existing run properties from the style and remove
|
||||
* the theme font information from them. Then we also remove the bold styling,
|
||||
* change the font size (half-points) and add an underline.
|
||||
*/
|
||||
*//*
|
||||
|
||||
private static void alterHeading1Style(Style style) {
|
||||
RPr rpr = getRunPropertiesAndRemoveThemeInfo(style);
|
||||
removeBoldStyle(rpr);
|
||||
changeFontSize(rpr, 28);
|
||||
/* addUnderline(rpr); */
|
||||
*/
|
||||
/* addUnderline(rpr); *//*
|
||||
|
||||
}
|
||||
|
||||
private static void alterHeading2Style(Style style) {
|
||||
@ -421,7 +462,9 @@ public class HtmlToWord {
|
||||
removeBoldStyle(rpr);
|
||||
changeFontSize(rpr, 24);
|
||||
|
||||
/* addUnderline(rpr); */
|
||||
*/
|
||||
/* addUnderline(rpr); *//*
|
||||
|
||||
}
|
||||
|
||||
private static RPr getRunPropertiesAndRemoveThemeInfo(Style style) {
|
||||
@ -432,7 +475,8 @@ public class HtmlToWord {
|
||||
return rpr;
|
||||
}
|
||||
|
||||
/**
|
||||
*/
|
||||
/**
|
||||
* Change the font of the given run properties to Arial.
|
||||
* <p>
|
||||
* A run font specifies the fonts which shall be used to display the contents of
|
||||
@ -441,7 +485,8 @@ public class HtmlToWord {
|
||||
* properties.
|
||||
*
|
||||
* @param runProperties
|
||||
*/
|
||||
*//*
|
||||
|
||||
private static void changeFontToArial(RPr runProperties) {
|
||||
RFonts runFont = new RFonts();
|
||||
runFont.setAscii("Arial");
|
||||
@ -449,47 +494,55 @@ public class HtmlToWord {
|
||||
runProperties.setRFonts(runFont);
|
||||
}
|
||||
|
||||
/**
|
||||
*/
|
||||
/**
|
||||
* Change the font size of the given run properties to the given value.
|
||||
*
|
||||
* @param runProperties
|
||||
* @param fontSize Twice the size needed, as it is specified as half-point value
|
||||
*/
|
||||
*//*
|
||||
|
||||
private static void changeFontSize(RPr runProperties, int fontSize) {
|
||||
HpsMeasure size = new HpsMeasure();
|
||||
size.setVal(BigInteger.valueOf(fontSize));
|
||||
runProperties.setSz(size);
|
||||
}
|
||||
|
||||
/**
|
||||
*/
|
||||
/**
|
||||
* Removes the theme font information from the run properties. If this is not
|
||||
* removed then the styles based on the normal style won't inherit the Arial
|
||||
* font from the normal style.
|
||||
*
|
||||
* @param runProperties
|
||||
*/
|
||||
*//*
|
||||
|
||||
private static void removeThemeFontInformation(RPr runProperties) {
|
||||
runProperties.getRFonts().setAsciiTheme(null);
|
||||
runProperties.getRFonts().setHAnsiTheme(null);
|
||||
}
|
||||
|
||||
/**
|
||||
*/
|
||||
/**
|
||||
* Removes the Bold styling from the run properties.
|
||||
*
|
||||
* @param runProperties
|
||||
*/
|
||||
*//*
|
||||
|
||||
private static void removeBoldStyle(RPr runProperties) {
|
||||
runProperties.getB().setVal(false);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
*/
|
||||
/**
|
||||
* As in the previous example, this method creates a footer part and adds it to
|
||||
* the main document and then returns the corresponding relationship.
|
||||
*
|
||||
* @return
|
||||
* @throws InvalidFormatException
|
||||
*/
|
||||
*//*
|
||||
|
||||
private static Relationship createFooterPart() throws InvalidFormatException {
|
||||
FooterPart footerPart = new FooterPart();
|
||||
footerPart.setPackage(wordMLPackage);
|
||||
@ -499,7 +552,8 @@ public class HtmlToWord {
|
||||
return wordMLPackage.getMainDocumentPart().addTargetPart(footerPart);
|
||||
}
|
||||
|
||||
/**
|
||||
*/
|
||||
/**
|
||||
* As in the previous example, we create a footer and a paragraph object. But
|
||||
* this time, instead of adding text to a run, we add a field. And just as with
|
||||
* the table of content, we have to add a begin and end character around the
|
||||
@ -507,7 +561,8 @@ public class HtmlToWord {
|
||||
* content of the footer and then return it.
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
*//*
|
||||
|
||||
public static Ftr createFooterWithPageNr() {
|
||||
Ftr ftr = factory.createFtr();
|
||||
P paragraph = factory.createP();
|
||||
@ -520,7 +575,8 @@ public class HtmlToWord {
|
||||
return ftr;
|
||||
}
|
||||
|
||||
/**
|
||||
*/
|
||||
/**
|
||||
* Creating the page number field is nearly the same as creating the field in
|
||||
* the TOC example. The only difference is in the value. We use the PAGE
|
||||
* command, which prints the number of the current page, together with the
|
||||
@ -528,7 +584,8 @@ public class HtmlToWord {
|
||||
* preserved when the field is updated.
|
||||
*
|
||||
* @param paragraph
|
||||
*/
|
||||
*//*
|
||||
|
||||
private static void addPageNumberField(P paragraph) {
|
||||
R run = factory.createR();
|
||||
Text txt = new Text();
|
||||
@ -538,12 +595,14 @@ public class HtmlToWord {
|
||||
paragraph.getContent().add(run);
|
||||
}
|
||||
|
||||
/**
|
||||
*/
|
||||
/**
|
||||
* Every fields needs to be delimited by complex field characters. This method
|
||||
* adds the delimiter that precedes the actual field to the given paragraph.
|
||||
*
|
||||
* @param paragraph
|
||||
*/
|
||||
*//*
|
||||
|
||||
private static void addFieldBegin(P paragraph) {
|
||||
R run = factory.createR();
|
||||
FldChar fldchar = factory.createFldChar();
|
||||
@ -552,12 +611,14 @@ public class HtmlToWord {
|
||||
paragraph.getContent().add(run);
|
||||
}
|
||||
|
||||
/**
|
||||
*/
|
||||
/**
|
||||
* Every fields needs to be delimited by complex field characters. This method
|
||||
* adds the delimiter that follows the actual field to the given paragraph.
|
||||
*
|
||||
* @param paragraph
|
||||
*/
|
||||
*//*
|
||||
|
||||
private static void addFieldEnd(P paragraph) {
|
||||
FldChar fldcharend = factory.createFldChar();
|
||||
fldcharend.setFldCharType(STFldCharType.END);
|
||||
@ -566,12 +627,14 @@ public class HtmlToWord {
|
||||
paragraph.getContent().add(run3);
|
||||
}
|
||||
|
||||
/**
|
||||
*/
|
||||
/**
|
||||
* This method fetches the document final section properties, and adds a newly
|
||||
* created footer reference to them.
|
||||
*
|
||||
* @param relationship
|
||||
*/
|
||||
*//*
|
||||
|
||||
public static void createFooterReference(Relationship relationship) {
|
||||
|
||||
List<SectionWrapper> sections = wordMLPackage.getDocumentModel().getSections();
|
||||
@ -590,11 +653,13 @@ public class HtmlToWord {
|
||||
sectPr.getEGHdrFtrReferences().add(footerReference);
|
||||
}
|
||||
|
||||
/**
|
||||
*/
|
||||
/**
|
||||
* Adds a page break to the document.
|
||||
*
|
||||
* @param documentPart
|
||||
*/
|
||||
*//*
|
||||
|
||||
private static void addPageBreak(MainDocumentPart documentPart) {
|
||||
Br breakObj = new Br();
|
||||
breakObj.setType(STBrType.PAGE);
|
||||
@ -608,3 +673,4 @@ public class HtmlToWord {
|
||||
}
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
Binary file not shown.
@ -23,11 +23,13 @@ import com.actionsoft.apps.coe.pal.pal.ws.web.VersionUtil;
|
||||
import com.actionsoft.apps.resource.plugin.profile.DCPluginProfile;
|
||||
import com.actionsoft.bpms.bpmn.engine.cache.ProcessDefCache;
|
||||
import com.actionsoft.bpms.bpmn.engine.model.def.ProcessDefinition;
|
||||
import com.actionsoft.bpms.commons.login.constant.LoginConst;
|
||||
import com.actionsoft.bpms.commons.mvc.view.ResponseObject;
|
||||
import com.actionsoft.bpms.org.model.DepartmentModel;
|
||||
import com.actionsoft.bpms.org.model.RoleModel;
|
||||
import com.actionsoft.bpms.org.model.UserModel;
|
||||
import com.actionsoft.bpms.server.DispatcherRequest;
|
||||
import com.actionsoft.bpms.server.SSOUtil;
|
||||
import com.actionsoft.bpms.server.UserContext;
|
||||
import com.actionsoft.bpms.server.fs.DCContext;
|
||||
import com.actionsoft.bpms.server.fs.dc.DCProfileManager;
|
||||
@ -2253,7 +2255,24 @@ public class CoeProcessLevelUtil {
|
||||
JSONObject attribute = new JSONObject();
|
||||
attribute.put("name", property.getPropertyName());
|
||||
attribute.put("key", property.getPropertyId());
|
||||
attribute.put("value", inputValue);
|
||||
|
||||
|
||||
//如果是关联属性,增加链接功能
|
||||
if(attributeModel.getType().equals("relation")){
|
||||
|
||||
String sessionId = new SSOUtil().registerClientSessionNoPassword(plModel.getCreateUser(), LoginConst.DEFAULT_LANG, "localhost", LoginConst.DEVICE_PC);
|
||||
|
||||
String relationFileId = JSONObject.parseObject(property.getPropertyValue()).get("relationFileId").toString();
|
||||
|
||||
|
||||
String url=SDK.getPortalAPI().getPortalUrl()+"/r/w?uuid="+relationFileId+"&teamId=&cmd=com.actionsoft.apps.coe.pal_pl_repository_designer&sid="+sessionId+"";
|
||||
String appUrl="<a href='"+url+"' style='color:blue'>"+inputValue+"</a>";
|
||||
attribute.put("value", appUrl);
|
||||
}else{
|
||||
attribute.put("value", inputValue);
|
||||
}
|
||||
|
||||
|
||||
attribute.put("type", attributeModel.getType());
|
||||
result.put(String.valueOf(index++), attribute);
|
||||
}
|
||||
|
||||
@ -1445,6 +1445,7 @@ function isObjectRelationshipModel(linker, isAlert) {
|
||||
|
||||
// 文件属性的处理
|
||||
function initProcessDesc() {
|
||||
debugger;
|
||||
var length = Object.keys(processDesc).length;
|
||||
var t = '';
|
||||
for(var i = 1; i <= length; i++) {
|
||||
|
||||
Loading…
Reference in New Issue
Block a user