精华内容
下载资源
问答
  • 本系列的第四部分也是最后一部分将向您展示如何使用模板创建文档,如何通过自己的方法实现来丰富投影以及如何扩展内置类型转换器。 我们已经在本系列的第二部分中演示了写作预测。 现在,我们将更深入地编写投影,...

    word文档模板 xml

    本系列的第四部分也是最后一部分将向您展示如何使用模板创建文档,如何通过自己的方法实现来丰富投影以及如何扩展内置类型转换器。

    我们已经在本系列的第二部分中演示了写作预测。 现在,我们将更深入地编写投影,并了解到XMLBeam不仅仅限于编写元素和属性的值。 利用第一部分中显示的子投影,可以将整个子图写入DOM树。 这可用于分别处理文档的静态和动态部分,从而减少编程工作。 因此,我们定义了作为投影读取的模板,并用Java代码进行了修改,然后组成了一个新文档。 我们提供了一个示例,简化了其说明原理的过程。

    Example 1: Document template "svg_document_template.svg“
    <svg>
       <!-- simple document template -->
            <g style="stroke:black; stroke-width:3;"/>
    </svg>

    元素“ <svg>”将成为我们文档的基础。 我们将在代码示例中插入更多元素,因此我们将创建更多具有合理默认值的模板。

    Example 1: Element template "rect_template.svg“
    <rect width="100" height="100" style="fill:blue" />
    Example 1: Element template "circle_template.svg“
    <circle r="50" style="fill:red" />
    Example 1: Element template "ellipse_template.svg“
    <ellipse rx="50" ry="100" style="fill:yellow" />

    之后,我们定义投影界面以能够使用这些模板。 为了共享通用方法,投影 Rectangle Circle Ellipse 通过常规Java类型继承 Shape 继承投影方法 将投影定义为内部接口没有更深层的含义,这只是在我们的示例中节省了几行。

    Example 1:
    @XBDocURL("resource://svg_document_template.svg")
    public interface SVG {
    
        public interface Shape {
            @XBWrite("./@x")
            Shape setX(int x);
    
            @XBWrite("./@y")
            Shape setY(int y);
        }
    
        @XBDocURL("resource://rect_template.svg")
        public interface Rect extends Shape {
            @XBWrite("./@width")
            Rect setWidth(int w);
    
            @XBWrite("./@heigth")
            Shape setHeight(int h);
        }
    
        @XBDocURL("resource://circle_template.svg")
        public interface Circle extends Shape {
            @XBWrite("./@r")
            Shape setRadius(int r);
        }
    
        @XBDocURL("resource://ellipse_template.svg")
        public interface Ellipse extends Shape {
            @XBWrite("./@rx")
            Shape setRadiusX(int rx);
            
            @XBWrite("./@ry")
            Shape setRadiusY(int ry);
        }
    
        @XBWrite("/svg/g/*")
        SVG setShapes(List<Shape> shapes);
    }

    s etShapes(List <Shape> )方法是我们文档组成模式的关键。 它以 Shape 类型的投影 作为参数,并将这些投影作为元素“ <g>”的子元素插入到投影 SVG 的DOM树中 头是隐藏的,因为书写的对象不是元素的子投影,而是文档的投影。 XMLBeam支持此用例,并将根元素的副本插入DOM树。 之所以制作副本,是因为模板元素的所有权在写入操作期间发生了变化。 通配符“ *”指示XMLBeam保留写入的子元素的名称。 像“ / svn / g / shape”这样的XPath将导致将所有子元素重命名为“ shape”。

    Example 1: Document composition with templates
    XBProjector projector = new XBProjector(Flags.TO_STRING_RENDERS_XML);
    
    Rect rect = projector.io().fromURLAnnotation(Rect.class);
    Circle circle = projector.io().fromURLAnnotation(Circle.class);
    Ellipse ellipse = projector.io().fromURLAnnotation(Ellipse.class);
    
    List<Shape> shapes = new LinkedList<Shape>();
    shapes.add(rect.setX(10).setY(120));
    shapes.add(circle.setX(60).setY(60));
    shapes.add(ellipse.setX(180).setY(120));
    
    SVG svgDoc = projector.io().fromURLAnnotation(SVG.class);
    svgDoc.setShapes(shapes);
    
    System.out.println(svgDoc.toString());

    作为示例的结果,我们获得了以下SVG文档。

    Example 1: Result
    <svg>
      <!-- simple document template -->
      <g style="stroke:black; stroke-width:3;">
        <rect height="100" style="fill:blue" width="100" x="10" y="120"/>
        <circle r="50" style="fill:red" x="60" y="60"/>
        <ellipse rx="50" ry="100" style="fill:yellow" x="180" y="120"/>
      </g>
    </svg>

    投影中的自定义方法实现

    正如我们在本系列前面的部分中了解到的那样,可以像普通的旧Java对象(PO​​JO)一样使用投影。 由于equals()和hashcode()的预定义实现,它们可以 直接 Collection中 使用 支持继承,并且通过扩展 Serializeable ,甚至可以像常规对象一样对投影进行序列化。 在这里,我们展示了如何向投影添加自己的方法实现。

    如果XMLBeam与Java 8一起使用,则只需将自己的默认方法添加到投影接口即可。 XMLBeam与Java 6兼容,但仍将检测默认方法调用并将其转发给Java 8实现。 如果您使用Java 8之前的版本并且不能使用默认方法,那么仍然可以使用一种方法来覆盖方法或添加自己的实现。

    为此,XMLBeam利用与其他编程语言中的mixin相似的概念。 XMLBeam当然不会使用真正的mixin扩展Java语言的功能,但是该术语是适合此上下文的隐喻。 从现在开始,它将用于一堆要添加到投影中的方法。 它是这样工作的:首先定义一个mixin接口:

    A "mixin-interface“
    public interface Validatable {
            boolean isValid();      
    }

    我们让投影接口从mixin接口 Validatable 继承, 以便 isValid() 方法 可用于投影接口的客户端。

    A projection with inherited method "isValid()“
    public interface Person extends Validatable {
            @XBRead("/person/@age“)
            int getAge();   
    }

    mixin方法的定义仍然缺失。 它是在单独的“混合对象”中实现的,在创建投影之前,投影机必须将其注册:

    Registering a mixin implementation
    projektor.mixins().addProjectionMixin(Person.class,new Validatable() {
            private Person me;
            @Override
            public boolean isValid() {
               return me.getAge() >= 18;
            }
    });

    XMLBeam将对person.isValid()的调用委托给为相应的投影接口 Person 注册的mixin对象 为了使该投影对于混合实现变得可见,投影仪将当前投影预先注入到属性“ me”中。 可以为不同的投影接口注册不同的mixin实现。 甚至有可能重写现有的方法,例如“ toString()”(请参阅​​[2],或使用现有的接口,例如 Comparable 作为mixin接口(请参见[3])。

    创建一个类型转换器

    XMLBeam注意读取的XML数据会自动转换为所需的投影方法返回类型。 这些转换可以轻松扩展以满足您的要求。

    A custom type converter
    public static class HexToLongConversion extends Conversion<Long> {
    
            private HexToLongConversion(final Long defaultValue) {
                super(defaultValue);
            }
    
            @Override
            public Long convert(final String data) {
                return Long.parseLong(data, 16);
            }
        }
    public interface Projection {
            @XBRead("/foo")
            long getData();
        }

    在我们的示例中,XML字符串中的十六进制数字应转换为 Long 值。 为了对此进行归档,我们实现了 Conversion 接口, 并将我们的实例作为 Long的 所需转换移交给DefaultTypeConverter

    Using the type converter
    XBProjector projector = new XBProjector();
    DefaultTypeConverter converter = projector.config().getTypeConverterAs(DefaultTypeConverter.class);
    converter.setConversionForType(Long.TYPE, new HexToLongConversion(0L));
    Projection projection = projector.projectXMLString("<foo>CAFEBABE</foo>", Projection.class);
    assertEquals(3405691582L, projection.getData());

    这是覆盖现有转化所要做的全部工作。 以相同的方式添加了针对自己的Java类型的新转换。 如果您已经具有可以用 String 实例化的值类,则 有一个捷径:XMLBeam自动调用 投影方法返回类型的 String 构造函数或 String -Factory方法(请参见[4])。

    这样就完成了有关XMLBeam的系列文章。 在项目站点[1]有更多的教程和示例有待探索。

    关于作者

    Sven Ewald(Twitter句柄:@Cfx)是库XMLBeam(@XMLBeam)的作者。 他从事Java解决方案已有15年的历史了,而且还没有结束。 目前,他在汽车行业的领域特定语言领域工作。


    Links & Literature

    [1] http://xmlbeam.org

    [2] http://xmlbeam.org/faq.html#How_do_I_implement_the_toString_method_for_my_projection

    [3] http://xmlbeam.org/t07.html

    [4] http://xmlbeam.org/refcards.html#Let_a_projection_return_a_custom_type_that_can_be_created_with_a_String



    翻译自: https://jaxenter.com/a-new-approach-to-xml-part-4-a-template-pattern-to-create-xml-documents-107733.html

    word文档模板 xml

    展开全文
  • 来源:fasiondog 许多UML建模工具可以自动生成文档,让需求人员、开发人员专心于需求、设计的建模。...不同的建模工具配置文档模板的方式和要求,如StarUML使用Word中的批注命令对元素模型进行遍历,而EA则通过R...

    来源:fasiondog

    许多UML建模工具可以自动生成文档,让需求人员、开发人员专心于需求、设计的建模。当然为了能够生成符合自己要求的模板,需对建模时的目录结构(模型和包)有所规划和要求,否则很难生成相应的文档。这要求提前了解相应的建模工具如何生成文档以及如何配置文档模板。不同的建模工具配置文档模板的方式和要求,如StarUML使用Word中的批注命令对元素模型进行遍历,而EA则通过RTF标注以及模型目录,相比之下EA的文档生成和模型的目录结构绑定的更紧,如果没有事先规划,更难生成文档。这里简单记录StarUML配置生成Word文档的模板方法和注意事项,作为StarUML帮助的一些补充。EA的文档生成,另外记述。详细的StarUML文档配置方法,详见:http://staruml.sourceforge.net/docs/developer-guide(en)/ch11.html

    StarUML文档生成功能菜单在“[Tool]->StarUML Generator”,如下图所示:

    创建文档模板

    由于StarUML的中文支持不好,如果直接按Help中的方式创建以中文命名的文档模板会出错。可以简单的到StarUML的安装路径下,找到模板所做路径,如:D:\Program Files (x86)\StarUML\modules\staruml-generator\templates。直接复制一份已有的Word模板目录(安装后默认有一份usecase specification),然后将目录改名为所希望的名称。接着将该目录下的“Template.doc”更换为自己的文档模板,作为后续添加命令的基础文档。然后,启动“[Tool]->StarUML Generator”在界面中更改,模板的注册名称。其详细做法,见下面各图所示。

    1)复制已有的Wor的模板目录,并改名为所希望的名称,如“需求规格说明书”

    2)在文档生成功能界面([Tool]->StarUML Generator)中,更改模板的注册名称

    如何在Word文档中通过批注添加StarUML命令

    StarUML是通过Word文档中的“批注”来标识如何将UML模型中的内容插入到文档的指定位置。其指示生成内容的语法主要是“命令+参数”的形式。如下图所示:

    其中,命令只有4个,其中IF和SCRIPT很少用,分别是:

    • REPEAT ~ ENDREPEAT (如果是在表格中自动插入多条数据,需用 ENDREPTR 结尾)
    • IF ~ ENDIF (如果是在表格中自动插入多条数据,需用 ENDIFTR 结尾)
    • DISPLAY
    • SCRIPT

    由于命令部分是通过“批注”中的作者来表示的,而Word又不能随便更改作者,所以需要下载StarUML提供的默认模板(其中提供了所有命令的批注,模板下载地址:http://staruml.sourceforge.net/files/template-word.zip),从其中拷贝批注来添加命令。在Word中拷贝批注,最好将批注的显示方式改为嵌入方式,见下图:

    在嵌入批注的显示方式下,点击“审阅窗格”按钮,可编辑批注内容,输入参数:

    命令用法

    命令:REPEAT ~ ENDREPEAT

    用途:遍历满足输入参数条件的模型元素,并执行REPEAT和ENDREPEAT之间的其它命令。注意,如果是在表格中增加多条数据,结尾应用ENDREPTR。注意,该命令可以嵌套,即REPEAT中嵌套REPEAT

    参数:PathName;FilterType;CollectionName;Condition参数都是可选的,彼此之间使用“;”分隔,如果不指定某个参数空着即可,如::Use Case View;UMLClass;;,表示遍历目录::Use Case View中的类型为UMLClass的元素。PathName:路径名指的是模型(Model)和包(Package)的名称,可以在StarUML中选择元素后在状态栏中查看,如下图所示:

    在路径前加上“{R}”表示递归该路径下的所有子模型/子包,如“{R}::Use Case View;UMLActor;;”表示递归模型Use Case View下所有的Actor。FilterType:UML模型中元素,如Class、Actor、UseCase。其也可以在StarUML中的状态栏中查看选定元素的类型,见前图。CollectionName:指的是选中元素后右键菜单里(见下图)的“Constraints”和“Collection Editor”中的Attributes/Operations等,其名字和界面中显示的一样,如“;;Constraints;”。

    Condition:指定条件,如“current().Documentation != ""”

    命令:DISPLAY

    用途:显示元素指定的属性或者显示图形

    参数:Pathname;Expression

    Pathname:见REPEAT命令

    Expression:指定元素的属性,使用current()表示当前遍历到的元素,current().Name表示当前元素的名称,其它属性类似。

    常用的有:显示元素名称:current().Name;I

    显示元素文档内容:current().Documentation

    显示Tag内容:;trim(current().GetTaggedValueAsString("UMLStandard", "UseCaseSpecification", "Preconditions"));


    显示约束内容,属性、操作等类似:

    REPEAT ;;Contraints;

    DISPLAY ;current().Name

    DISPLAY ;current().Body

    ENDREPEAT


    显示图形:

    REPEAT {R};UMLActivityDiagram;;

    DISPLAY ;;  (只要在REPEAT中选定图形,此处参数默认为空即可

    ENDREPEAT

    命令:SCRIPT

    用途:简单的JScript脚本用的不多,可以简单的添加文本前缀,如在用例名称加上“UC_”的前缀

    SCRIPT new_name = "UC_" + current().Name

    DISPLAY ;new_name;

    更复杂一点的,比如为Use Case View模型下的每个包里的用例进行编号,其中每个用例通过添加Tag“ID”指明序号(如何添加新的Tag另外记录)。比如,包“需求管理”下的用例“创建需求申请单”,其ID为“001”,则自动生成用例编号“UC_需求管理_001”。代码如下:

    REPEAT ::Use Case View;UMLPackage;;

    SCRIPT package_name = current().Name

    REPEAT ;UMLUseCase;;

    SCRIPT uc_id = "UC_"+ package_name+"_" + current().GetTaggedValueAsString("UMLStandard", "UseCaseSpecification", "ID")

    DISPLAY ;uc_id;

    ENDPEAT

    ENDPEAT

    命令:IF ~ ENDIF

    我很少用,不介绍了

    示例模板(需求规格说明书)

    供参考:下载地址:http://www.kuaipan.cn/file/id_14930590516188149.htm?source=1

    转载于:https://www.cnblogs.com/hainange/p/6153662.html

    展开全文
  • word模板格式,将需要替换的位置用&amp;xx&amp;占位符填上,在后台找到跟数据相同的名称时替换 #region 带模板导出 public HttpResponseMessage ExportWordModel(dynamic obj) { long formId = obj.id; ...

     

    word模板格式,将需要替换的位置用&xx&占位符填上,在后台找到跟数据相同的名称时替换

    #region 带模板导出
            public HttpResponseMessage ExportWordModel(dynamic obj)
            {
                long formId = obj.id;
                string selectedModel = obj.selectedModel;
                string tempFile = HttpContext.Current.Server.MapPath("~/ExcelModel/" + selectedModel).ToString();//获取模板路径
                string filePath = "导出模板文件的文件名"
                string filePathId = filePath + formId * 4564;//文件名加上一个唯一id组成的文件名, 防止表单名称重复,加上表单的唯一值id
                string saveFilePath = HttpContext.Current.Server.MapPath("~/SaveExcel/" + filePathId).ToString(); // 保存表格的路径
                try // 为空的时候会提示找不到文件夹
                {
                    ClearDownloadDirectory(saveFilePath, ""); //清空saveFilePath文件夹下的所有内容 保证每次导出时zip文件都是最新的
                }
                catch { }
                    var result = “你的数据” // 我这里result为json格式的所有后面需要序列号循环出来,具体看自己的数据格式
                    if (result.Count() != 0)
                    {
                        int num = 0; // 导出的时候给word文档命名
                        string fullPath = saveFilePath; //上传路径 
                        if (!Directory.Exists(fullPath))
                        {
                            Directory.CreateDirectory(fullPath); //如果路径不存在则创建
                        }
                        for (int i = 0; i < result.Count(); i++) // 把所有要导出的内容循环出来保存为docx
                        {
                            var formData = result[i].formData;
                            JArray tempData = (JArray)JsonConvert.DeserializeObject(formData);  //序列化(也可使用JToken代替JObject)
                            try
                            {
                                Document doc = new Document(tempFile);
                                int selectedNum = 0;// 循环的次数,第一次不要逗号
                                var dic = new Dictionary<string, string>();
                                dic = CommonFun.JsonToDir(tempData); // 将查到的json转换成dictionary
                                DocumentBuilder builder = new DocumentBuilder(doc);
                                foreach (var key in dic.Keys)//关键点 当模板里面找到和数据相同的字段,将数据写到模板对应的位置
                                {
                                    var repStr = string.Format("&{0}&", key);
                                    doc.Range.Replace(repStr, dic[key], false, false); // 循环出json 中的label 字段和模板里面进行比较 如果相等则替换成对应的value值
                                }
                                string fileName = filePathId + num++;
                                doc.Save(saveFilePath + "/" + fileName + ".docx");//也可以保存为1.doc 兼容03-07
                            }
                            catch
                            {
    
                            }
                        }
                    }
                    else
                    {
                        var response = new HttpResponseMessage();
                        response.StatusCode = HttpStatusCode.OK;
                        return response;
                    }
                    var respose = DownloadZip(filePathId); //将某个文件夹的所有内容导出成zip格式
                    return respose;
                }
              
            }
    
            #endregion

     ClearDownloadDirectory方法,当fileName为空的时候文件夹的所有内容全部删除

     #region 删除指定文件夹下的内容
            private void ClearDownloadDirectory(string directory, string fileName)
            {
                var files = Directory.GetFiles(directory);
                if (fileName == "") // 全部删除
                {
                    foreach (var file in files)
                    {
                        try
                        {
                            File.Delete(file);
                        }
                        catch
                        {
                        }
                    }
                }
                else
                {
                    foreach (var file in files)
                    {
                        if (file == fileName) // 中删除指定文件名
                        {
                            try
                            {
                                File.Delete(file);
                            }
                            catch
                            {
                            }
                        }
                    }
                }
    
            }
            #endregion

    DownZip:

    #region 将整个文件夹打包成zip并下载
            public HttpResponseMessage DownloadZip(string filePath)
            {
                var response = new HttpResponseMessage();
                try
                {
                    var zipFileName = string.Format("{0}.zip", filePath);
                    var downloadDir = HttpContext.Current.Server.MapPath("~/SaveExcel/zip/" + filePath); // 组成的zip文件夹保存路径
                    var archive = $"{downloadDir}/{zipFileName}";
                    var temp = HttpContext.Current.Server.MapPath("~/SaveExcel/" + filePath); // 要组成zip文件的文件夹路径
                    if (!Directory.Exists(downloadDir))
                    {
                        Directory.CreateDirectory(downloadDir);
                    }
                    // 清空zip文件夹中的所有临时文件
                    ClearDownloadDirectory(downloadDir, ""); // 保证每次导出时zip文件都是最新的
                    Thread.Sleep(500);
                    using (var zip = new ZipFile())
                    {
                        // Make zip file
                        zip.AddDirectory(temp); // 组成zip文件
                        zip.Save(archive); // zip 文件保存
                    }
                    response.Content = new StreamContent(new FileStream(archive, FileMode.Open, FileAccess.Read));
                    response.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment") { FileName = zipFileName };
                    response.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
                }
                catch (Exception ex)
                {
                    response.StatusCode = HttpStatusCode.InternalServerError;
                    response.Content = new StringContent(ex.ToString());
                }
                return response;
            }
            #endregion

     前端代码:

     this.$axios({
                method: 'POST',
                url: url, // 你对应后台的url
                responseType: 'blob',
                data: JSON.stringify({ id: this.selectedId, selectedModel: this.ruleForm.selectedModel })
              }).then((response) => {
                console.log(response)
                if (response.data.size === 22) {
                  _this.errorTip('找不到模板文件')
                } else if (response.data.size === 0) {
                  _this.errorTip('无数据')
                } else {
                  var blob = new Blob([response.data])
                  var downloadElement = document.createElement('a')
                  var href = window.URL.createObjectURL(blob) // 创建下载的链接
                  downloadElement.href = href
                  downloadElement.download = '导出模板文件.zip' // 下载后文件名
                  document.body.appendChild(downloadElement)
                  downloadElement.click() // 点击下载
                  document.body.removeChild(downloadElement) // 下载完成移除元素
                  window.URL.revokeObjectURL(href) // 释放掉blob对象
                }
                _this.loading = false
              })

    效果图:

    展开全文
  • 使用模板引擎生成复杂Word文档

    千次阅读 2018-05-22 00:09:52
    先准备好word文档模板,进行排版等操作,在需要替换填写变量字符,然后保存为xml格式。例如在word中写入以下信息2.另存为xml格式(个人使用时都是保存为2003的xml,最好别用wps,生成的xml可能会有些出...

        当使用java代码生成word文档,要进行一些复杂的排版操作时比较困难,这时可以通过模板引擎(如 freemarker、velocity等)来生成想要的word文档。

    步骤:

    1.先准备好word文档模板,进行排版等操作,在需要替换填写变量字符,然后保存为xml格式。

    例如在word中写入以下信息


    2.另存为xml格式(个人使用时都是保存为2003的xml,最好别用wps,生成的xml可能会有些出入)


    3.打开xml,找到需要替换的变量,用模板引擎定义的变量格式替换。我使用的是velocity,所以将var替换为${var}。


    4.然后将文件后缀改为模板引擎能识别文件,velocity使用的模板后缀为.vm,所以我将文件保存为test.vm

    5.接下来的操作就是使用模板引擎将变量替换,输出文件时将文件后缀改回.doc就行了。

    以上是生成简单文档的做法-----------------------------------------------------------------------------------

    有时添加某些特殊元素,如:表格、图片、分页。我们可以根据word生成xml进行改造,利用模板引擎生成想要元素

    -图片:在xml中图片元素为<w:pict>,找到该元素的位置,根据模板引擎的语法进行改写


    word中图片使用base64编码,将图片的base64编码填写入<w:binData>元素的位置就能显示图片了;

    -表格:先编辑一个表格,再在xml中拷贝表格中的一行,进行输入数据的行数循环输出就行

    -分页:将生成的word xml数据放入数组中,在页与页之间用word的分页符间隔即可。(注意:以下变量$pageContent的内容应当是word xml里<wx:sect>文档体元素中包含的数据,其中还要排除<w:sectPr>尾部信息元素的数据



    Word的xml中相关定义:

    <w:br w:type="page"/> 分页符号

    <w:pict>图片资源

    <wx:sect> 文档体

    <w:sectPr> 尾部信息

    </w:tbl>表格

    <w:tr>表格行

    分页符(这是我自己在xml截取出的,你们可以自己保存一个多页的文档,在xml里找到它的分页符并使用它)

    <w:p wsp:rsidR="001E05E9"wsp:rsidRDefault="001E05E9">

           <w:pPr>

           <w:widowControl/>

           <w:jc w:val="left"/>

           </w:pPr>

           <w:r>

           <w:br w:type="page"/>

           </w:r>

      </w:p>

     换页符:(有时在表格后添加不起作用)

    <w:br w:type="page"/>



    展开全文
  • Java-POI替换Word模板文档中的变量,生成Word文档

    千次阅读 热门讨论 2017-10-31 14:33:39
    第一步:在项目中导入POI的jar包,以及相关的jar包。 所需的jar包列表: 下载地址:... ...第二步:建立util工具类。... * @Description: 将t中的字段转换成替换模板需要的数据${字...
  • java 解析word模板为xml, 动态填充数据到xml,最后输出word文档 在项目中, 一开始是使用java Apache poi 根据word模板生成word报表, 后面发现框架有个低版本的poi 3.0.1, 由于这个版本太低, 新版本poi整合不了旧版本...
  • java 根据模板文件生成word文档

    万次阅读 多人点赞 2018-09-19 16:18:05
    最近需要做一个导出word的功能, 在网上搜了下, 有用POI,JXL,iText等jar生成一个word文件然后将数据写到该文件中,API非常繁琐而且拼出来的样式也不美观,于是选择了另一种方式----feemarker基于word模板的导出方式, ...
  • 大致的思路是先用office2003或者2007编辑好word的样式,然后另存为xml,将xml翻译为FreeMarker模板,最后用java来解析FreeMarker模板并输出‘.doc’ word文档。经测试这样方式生成的word文档完全符合office标准,...
  • Android使用模板生成Word文档并查看

    千次阅读 2017-10-31 11:07:38
    Android想要使用模板生成Word文档需要借助,Apache 公司推出的 Apache POI,这个是官方下载地址:http://poi.apache.org/download.html,这是CSDN的下载地址:...最低就是2积分大家多多谅解呀)
  • 这篇文章主要介绍了C#实现通过模板自动创建Word文档的方法,详细讲述了C#生成Word文档的实现方法,是非常实用的技巧,需要的朋友可以参考下 本文实例讲述了C#实现通过模板自动创建Word文档的方法,是非常...
  • 动态生成Word文档

    2016-10-14 12:50:48
    利用Aspose.Words.dll动态生成Word文档 步骤:1、创建word模板,在模板中指定地方插入书签 2、运行代码 功能:1、动态生成Word文档 2、给图片添加文字水印
  • Word 模板引擎

    2020-12-15 11:59:47
    poi-tl(poi-template-language) ...FreeMarker、Velocity基于文本模板和数据生成新的HTML页面、配置文件等,poi-tl是Word模板引擎,基于Microsoft Word模板和数据生成新的文档Word模板拥有丰富的样式,poi-tl在生
  • html导出 word文档教程

    万次阅读 多人点赞 2017-10-19 13:24:47
    最近搞项目 需要用到导出word 文档,由于呢 他要显示word格式,我就 用word文档生成模板,现在 分享给大家。 这是我在网上找的 demo,按照 功能 不错大家可以看看 1、加入两个外部js FileSaver.js /* ...
  • 在项目需求中,需要对于一个word模板文档生成相对应的word文件,而此word模板是多页的并且需要在最终文件中生成相应的目录,由于项目环境是Linux,所以舍弃了jacob(windows环境)。然后主要是研究了Apache poi 进行...
  • Word文档排版

    2019-05-03 16:51:15
    Office Word文档排版排版样式页面设置设置样式 (08:23)存为模板(16:16)Word排版6原则(24:42)总结 排版样式 页面设置 元素:页眉、页脚、页边距 插入节 设置样式 (08:23) 正文 标题,注意设置大纲目录 链接 ...
  • 最近遇到一个需求,需要根据数据生成一份word文档,于是就研究了下phpword。 phpword生成word文档有两种方法 1 直接生成word文档 例如$phpWord = new PHPWord(); 然后可以在新的文档里用代码写所需要的内容 如 ...
  • java 编码填充 word 模板生成 word合同,并将word合同转成pdf 文档 一、 1、 package com.test; import java.io.IOException; import java.io.InputStream; import org.apache.poi....
  • C# 替换Word文档中的图片

    千次阅读 2017-06-05 17:08:33
    图片是Word文档中非常常见的一种元素,我们在处理Word文档时经常会对图片进行如添加,提取,替换和删除等操作。之前我已经介绍过如何提取Word文档中的图片,这篇文章将介绍如何使用C#和免费Word组件Free Spire.Doc来...
  • 利用Aspose.Words打印word文档

    千次阅读 热门讨论 2015-09-13 22:17:39
    的情况下,仍然可以生成,更改,转换,渲染和打印word文档,并且支持DOC,PDF等其他格式。  下面就以 Aspose.Words如何实现打印word文档为例做一个小demo。 1·制作word模板  在word模板中,在需要插入的地方...
  • word文档加密

    2011-10-11 21:16:43
    文档的安全是我们每个用户都非常关心的话题,尤其是在...Word有着非常强大的文字编辑功能,是我们日常工作生活中十分常用的办公软件,同时Word本身也提供了许多安全和保护功能,下面就让我们来看看给Word文档加密的技巧
  • Python操作Word文档,建表

    千次阅读 2019-04-10 16:23:02
    一、使用jinja2模板创建word文档(推荐) 使用这种方法,我们需要一个xml模板,之后将需要插入的数据通过变量传递,就能出色的达到目的,完全不需要考虑word中复杂的格式设置。 1.新建一个word文档,按需要创建...
  • 2、市面上主流的 Java 模板引擎有:JSP、Velocity、Freemarker、Thymeleaf,Spring Boot 官方支持:Thymeleaf Templates、FreeMarker Templates、Groovy Templates 等模板引擎。 ...
  • 1,最近有个需求,动态生成 Word 文当并供前端下载,网上找了一下,发现基本都是用 word 生成 xml ...1.2,所以笔者找到了以下可以直接用 word 文档作为模板的方法,这里做以下笔记,以下代码依赖于 JDK8 以上 2...
  • 一、制作mht模板  使用word(不能用wps)制作好导出后想要的样子,并使用占位符填充,例如${NAME},设置好格式,另存为.mht格式的文件。之后用文本编辑器打开(我用的notepad++),检查一下(绑定语句可能会有‘=...
  • OpenXML : C#操作word文档

    千次阅读 2019-07-22 21:27:54
    Word文档,本身就是一个压缩包,使用压缩工具打开一个Word文件,可以看到里边的文件列表如下图: OpenXML是微软官方一个开源的操作Word、Excel和PPT的SDK,用C#进行开发,使用此类库可以方便的对office这三类主要...
  • 使用java Apache poi 根据word模板生成word报表

    万次阅读 多人点赞 2018-03-24 16:19:37
    使用java Apache poi 根据word模板生成word报表 使用poi读取word模板,替换word中的{text}标签,并根据自定义标签循环生成表格或表格中的行。 代码示例下载:...
  • -- list内元素是基本数值,字符串日期 --> <#list sequence?sort as item> ... </#list> <!-- list内元素是对象 --> <#list sequence?sort_by("age") as item> ... </#list> ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 14,081
精华内容 5,632
关键字:

word文档模板的元素