精华内容
下载资源
问答
  • Java操作Word模板插入列表通过poi操作word,插入各种编号的列表,包括数字,字母,罗马字符,自定义任意字符。下面的示例就用了音乐符♬。1.制作模板,插入列表使用语法*,模板内容为{{*number123}} 2.使用Poi-tl,...

    Java操作Word模板插入列表

    通过poi操作word,插入各种编号的列表,包括数字,字母,罗马字符,自定义任意字符。下面的示例就用了音乐符♬。

    1.制作模板,插入列表使用语法*,模板内容为{{*number123}}

    0818b9ca8b590ca3270a3433284dd417.png

    2.使用Poi-tl,添加依赖

    com.deepoove

    poi-tl

    1.0.0

    poi-tl是一个java的模板引擎。

    3.Java代码示例

    package com.deepoove.poi.tl;

    import static com.deepoove.poi.data.NumbericRenderData.FMT_BULLET;

    import static com.deepoove.poi.data.NumbericRenderData.FMT_DECIMAL;

    import static com.deepoove.poi.data.NumbericRenderData.FMT_DECIMAL_PARENTHESES;

    import static com.deepoove.poi.data.NumbericRenderData.FMT_LOWER_LETTER;

    import static com.deepoove.poi.data.NumbericRenderData.FMT_LOWER_ROMAN;

    import static com.deepoove.poi.data.NumbericRenderData.FMT_UPPER_LETTER;

    import static com.deepoove.poi.data.NumbericRenderData.FMT_UPPER_ROMAN;

    import java.io.FileOutputStream;

    import java.util.ArrayList;

    import java.util.HashMap;

    import java.util.Map;

    import org.apache.commons.lang3.tuple.Pair;

    import org.junit.Test;

    import org.openxmlformats.schemas.wordprocessingml.x2006.main.STNumberFormat;

    import org.openxmlformats.schemas.wordprocessingml.x2006.main.STNumberFormat.Enum;

    import com.deepoove.poi.XWPFTemplate;

    import com.deepoove.poi.data.NumbericRenderData;

    import com.deepoove.poi.data.TextRenderData;

    /**

    * 列表模板

    * @author Sayi

    * @version 0.0.5

    */

    public class NumbericRenderTest {

    @SuppressWarnings("serial")

    @Test

    public void testNumbericRender() throws Exception {

    Map datas = new HashMap() {

    {

    //1. 2. 3.

    put("number123", getData(FMT_DECIMAL));

    put("number123_dulplicate", getData(FMT_DECIMAL));

    //1) 2) 3)

    put("number123_kuohao", getData(FMT_DECIMAL_PARENTHESES));

    //无序

    put("bullet", getData(FMT_BULLET));

    //A B C

    put("ABC", getData(FMT_UPPER_LETTER));

    //a b c

    put("abc", getData(FMT_LOWER_LETTER));

    //ⅰ ⅱ ⅲ

    put("iiiiii", getData(FMT_LOWER_ROMAN));

    //Ⅰ Ⅱ Ⅲ

    put("IIIII", getData(FMT_UPPER_ROMAN));

    //自定义有序列表显示 (one) (two) (three)

    put("custom_number", getData(Pair.of(STNumberFormat.CARDINAL_TEXT, "(%1)")));

    //自定义无序列表显示:定义无序符号

    put("custom_bullet", getData(Pair.of(STNumberFormat.BULLET, "♬")));

    }

    };

    XWPFTemplate template = XWPFTemplate.compile("src/test/resources/numberic.docx")

    .render(datas);

    FileOutputStream out = new FileOutputStream("out_numberic.docx");

    template.write(out);

    out.flush();

    out.close();

    template.close();

    }

    @SuppressWarnings("serial")

    private NumbericRenderData getData(Pair pair) {

    return new NumbericRenderData(pair, new ArrayList() {

    {

    add(new TextRenderData("df2d4f", "Deeply in love with the things you love, just deepoove."));

    add(new TextRenderData("Deeply in love with the things you love, just deepoove."));

    add(new TextRenderData("5285c5", "Deeply in love with the things you love, just deepoove."));

    }

    });

    }

    }

    输出word

    0818b9ca8b590ca3270a3433284dd417.png

    展开全文
  • 在平时工作当中,经常会遇到大部分文字固定不变,小部分内容修改的相关文档。如放假通知、工作日志、工作周报、合同等。以往都要打开,修改,保存,犹如机械...1在Python编程语言当中,操作Word模板,需要用到pyt...

    在平时工作当中,经常会遇到大部分文字固定不变,小部分内容修改的相关文档。如放假通知、工作日志、工作周报、合同等。

    以往都要打开,修改,保存,犹如机械一般的操作,如内容少还可勉强接受,倘若内容多时,反复浏览,未免有些头晕目眩。

    不过,现在好了,有很多工具可以实现:无需打开文档,只需在软件界面,输入要变更的内容便可,这就要用到所谓的模板技术了。

    1

    在Python编程语言当中,操作Word模板,需要用到python-docx-template开发包。废话不多说,打开命令行窗口,输入:pip install docxtpl命令,下载开发包。

    2

    有了开发包,咱就可以做下模板内容修改的试验了。首先创建一个模板文件:leave_temp.docx并把:“{% who %}的请假申请单“这个内容拷贝到Word文档里。 接下来,咱就编写代码测试一下。

    from docxtpl import DocxTemplate

    tpl = DocxTemplate('leave_temp.docx')

    # 需要替换内容以key:value的方式进行更换

    context = {

    'who': '程旭阳'

    }

    tpl.render(context)

    tpl.save('leave.docx')

    3

    除了基本的内容替换之外,python-docx-template开发包还可对指定的内容特色处理,如更改文本的字体和颜色,如给表格单元格加背景色或合并单元格,还有就是图片内容的替换,再者就是可以把另一个Word文档里面提取出来并插入到本文档当中。

    核心的功能大概就这么多了。咱再试下文本颜色和表格单元格背景的调整。在编写代码之前,我提供一个模板(leave_temp.docx)供你参考,拿走不谢。

    4

    自从有了模板,腰不痛,手也不酸了,编写代码也有了依据,妥妥的。来了,上代码。

    from docxtpl import DocxTemplate, RichText

    tpl = DocxTemplate('leave_temp.docx')

    # 需要替换内容以key:value的方式进行更换

    context = {

    'year': '2019', 'month': '3', 'day': '8',

    'name': '程旭阳', 'department': '研发部',

    'reason': '女朋友说我好久没陪她了,再不陪伴,她就要跟我说拜拜了。为爱走天涯,特请假4天!',

    'date': '2019-3-9至2019-3-12',

    'num': RichText('4天', color='000000', bold=True), 'bg': 'FF0000'

    }

    tpl.render(context)

    tpl.save('leave.docx')

    展开全文
  • Java通过word模板导出word1.创建word模板文件,注意调整好格式,后期修改较为麻烦2.打开创建好的word模板,点击文件另存为,选择xml格式3.将生成的模板xml文件后缀改成ftl,例如:模板.xml-->模板.ftl4.在项目中...

    Java通过word模板导出word

    1.创建word模板文件,注意调整好格式,后期修改较为麻烦

    2.打开创建好的word模板,点击文件另存为,选择xml格式

    e0e73426e0d41fbe5db08e3603793375.png

    3.将生成的模板xml文件后缀改成ftl,例如:模板.xml-->模板.ftl

    4.在项目中引入freemarker依赖

    5.将模板.ftl文件放入项目resources下面的templates(自定义文件夹)

    6.编写代码程序。

    示例如下:

    public void exportReport(HttpServletResponse response) throws IOException, TemplateException {

    //map存储word需要的数据

    Map dataMap = new HashMap<>();

    //封装好的数据

    ReportDataDto dataForWord = getDataForWord(taskNo, isExport);

    //将数据指定key存储到map中

    dataMap.put("reportData", dataForWord);

    //配置对象

    Configuration configuration = new Configuration();

    //设置配置的字符编码为utf-8,避免字符集问题

    configuration.setDefaultEncoding("UTF-8");

    //获取resources下指定的文件夹路径,如果项目需要打成jar包,

    //此举很重要,别的方式可能无法获取到模板文件夹的相对路径

    configuration.setClassForTemplateLoading(this.getClass(), "/templates");

    // 获取模板实例,上行配置了模板文件所在路径

    Template t = configuration.getTemplate("模板.ftl", "utf-8");//以utf-8的编码读取ftl文件

    //设置响应类型为word

    response.setContentType("application/msword");

    //设置响应头,注意如果导出的word名含有汉字则需要将文件名

    //变成byte并且指定字符集为gbk,表示将GBK汉字转为byte

    //然后将其转为iso8859-1的字符串

    response.setHeader("Content-Disposition", "attachment;filename=\""

    + new String(("导出报告").getBytes("GBK"), "iso8859-1") + "\"");

    //此句非常关键,不然word文档全是乱码

    response.setCharacterEncoding("utf-8");

    PrintWriter out = response.getWriter();

    //使用数据填充模板

    t.process(dataMap, out);

    //以流的输出到浏览器,即下载

    out.close();

    }

    复制代码

    7.使用freemarker标签对模板.ftl文件进行数据渲染,例如:

    740b1e4955dc23f77d374a35a5d7b0d5.png

    tip:

    1.

    代表xml的段落,代表行,代表文本内容

    2.对于word中存在图片的情况,生成的模板.ftl将有这样一部分:

    9f1b6a4b52b93eb063f23eb7cedd4a5b.png

    找到 ${photo.zposs}

    标签,将里面的base64替换为${图片的base64}

    需要先将图片转为base64,下面提供一种方式

    public class Base64Util {

    /**

    *通过图片的URL转为base64

    */

    public static String getBase64ByImgUrl(String url){

    String suffix = url.substring(url.lastIndexOf(".") + 1);

    try {

    URL urls = new URL(url);

    ByteArrayOutputStream baos = new ByteArrayOutputStream();

    Image image = Toolkit.getDefaultToolkit().getImage(urls);

    BufferedImage biOut = toBufferedImage(image);

    ImageIO.write(biOut, suffix, baos);

    String base64Str = encodeImage(baos.toByteArray());

    return base64Str;

    } catch (Exception e) {

    e.printStackTrace();

    return null;

    }

    }

    /**

    * 图片转字符串

    * @param image

    * @return

    */

    public static String encodeImage(byte[] image){

    BASE64Encoder decoder = new BASE64Encoder();

    return replaceEnter(decoder.encode(image));

    }

    }

    复制代码

    注意:

    1.使用frermarker标签时,尽量对数据做非空判断,避免出错

    2.如果模板一开始样式不对,可以在后来在模板中修改好样式,重新另存为xml文件,然后到ftl文件中找到此内容,替换

    展开全文
  • 因工作需要,使用了版本比较旧的PHPWord项目官方已不见维护更新,...=5.3.3,强烈推荐使用PHPOffice/PHPWord这个开源项目本篇针对的为旧版本的PHPWord基本安装问题总结Autoloader自动加载部分情况下失败在使用Yii ...

    e143c1d478b5811e026f6168097e9db6.png

    文章排版有点乱,建议点击左下角的“阅读原文”查看。

    因工作需要,使用了版本比较旧的 PHPWord项目

    官方已不见维护更新,上次版本更新是在 Fri Jul 8, 2011 at 8:00 AM

    如果PHP版本>=5.3.3,强烈推荐使用 PHPOffice/PHPWord这个开源项目

    本篇针对的为旧版本的 PHPWord

    基本安装

    问题总结

    Autoloader 自动加载部分情况下失败

    在使用 Yii 1 配置自动加载时无法正常加载类库,需对其 PHPWord/Autoloader.php 做部分调整,这儿借鉴了 PHPExcel 的 Autoloader :

    /**

    * PHPWord_Autoloader

    */class PHPWord_Autoloader{ /**

    * Register the Autoloader with SPL

    *

    */

    public static function Register(){

    $functions = spl_autoload_functions();

    foreach ( $functions as $function)

    spl_autoload_unregister($function);

    $functions = array_merge(array(array('PHPWord_Autoloader','Load')),$functions);

    foreach ( $functions as $function)

    $x = spl_autoload_register($function);

    return $x;

    } //    function Register()

    /**

    * Autoload a class identified by name

    *

    * @param    string    $pClassName        Name of the object to load

    */

    public static function Load($pClassName){

    if ((class_exists($pClassName,FALSE)) || (strpos($pClassName, 'PHPWord') !== 0)) { //    Either already loaded, or not a PHPWord class request

    return FALSE;

    }

    $pClassFilePath = PHPWORD_BASE_PATH .

    str_replace('_',DIRECTORY_SEPARATOR,$pClassName) . '.php'; if ((file_exists($pClassFilePath) === FALSE) || (is_readable($pClassFilePath) === FALSE)) {

    //    Can't load

    return FALSE;

    } require($pClassFilePath);

    } //    function Load()}

    模板替换时无法识别模板标签

    表现

    使用/复制官方样例的模板文件替换正常

    自己手动敲出模板标签替换异常

    原因

    PHPWord的替换规则是将 Word 文件解析成 XML 进行替换处理,当 Word 解析成 XML 时字符分离了,导致匹配不上模板标签;

    具体分析可参考一下资料:

    解决办法

    改进 Template 类:

    因为下面仍需要修改 Template 类,这儿暂时就不贴代码了,下面一并贴出改造后的代码。

    中文乱码

    编辑 PHPWord/Template.php ,找到代码 $replace = utf8_encode($replace); ,删除或者注释掉这行代码,添加 $replace = iconv( 'gbk','utf-8', $replace); ,比如代码改为如下:

    /**

    * Set a Template value

    *

    * @param mixed $search

    * @param mixed $replace

    */public function setValue($search, $replace){ if(substr($search, 0, 2) !== '${' && substr($search, -1) !== '}') {

    $search = '${'.$search.'}';

    }

    if(!is_array($replace)) { //$replace = utf8_encode($replace);

    $replace =iconv('gbk', 'utf-8', $replace); // 注释掉上面行后添加这行

    }

    $this->_documentXML = str_replace($search, $replace, $this->_documentXML);

    }

    空格输出

    在想要输出换行的地方用 
     代替即可.

    标记符号输出

    仅以输出 □ 和 ☑ 为例,其它符号与之类似。

    注: PHP 文件需要使用 UTF-8 编码

    在 Word 文件中按照参考文件方式插入 ☑ ;

    复制符号到 PHP 文件;

    正常的输出替换。

    具体代码见如下的 项目代码 。

    Template 类代码

    // code/**

    * Set a Template value

    *

    * @param mixed $search

    * @param mixed $replace

    */public function setValue($search, $replace, $limit=-1){ if(substr($search, 0, 1) !== '{' && substr($search, -1) !== '}') {

    $search = '{'.$search.'}';

    }

    if(!is_array($replace)) { // $replace = utf8_encode($replace);

    // $replace = iconv( 'gbk','utf-8', $replace);

    $replace = str_replace("\n","
    ",$replace);

    }

    preg_match_all('/\{[^}]+\}/', $this->_documentXML, $matches); foreach ($matches[0] as $k => $match) {

    $no_tag = strip_tags($match); if ($no_tag == $search) {

    $match = '{'.$match.'}'; $this->_documentXML = preg_replace($match, $replace, $this->_documentXML, $limit);

    if ($limit == 1) { break;

    }

    }

    }

    }// code

    项目代码

    // @author Heier xheier@outlook.compublic function actionExportPersonTable(){ // 获取数据部分代码

    // ...

    $PHPWord = new PHPWord();

    // Word模板目录

    $personBasePath = Yii::app()->basePath.'/person/';

    // 删除目录下临时文件-十分钟以前

    $this->delfile( $personBasePath, 10 );

    // 模板文件名

    $tempName = $personBasePath . '/moban.docx';

    $word = $PHPWord->loadTemplate( $tempName );

    // 项目使用的是GBK编码,需要做转换

    $username = iconv('gbk', 'utf-8', getUserNameById($personData[0]['user_id']) );

    $personal_type = $personData[0]['personal_type'];

    // 模板替换开始

    // 可以输出打勾的方框

    $deptA=$deptBP=$deptB=$deptC=$deptD = '□'; if( $DirectorLevel == 'A' ) {

    $deptA = '☑';

    } elseif( $DirectorLevel == 'B+' ) {

    $deptBP = '☑';

    } elseif( $DirectorLevel == 'B' ) {

    $deptB = '☑';

    } elseif( $DirectorLevel == 'C' ) {

    $deptC = '☑';

    } elseif( $DirectorLevel == 'D' ) {

    $deptD = '☑';

    }

    $word->setValue('deptA', $deptA);

    $word->setValue('deptBP', $deptBP);

    $word->setValue('deptB', $deptB);

    $word->setValue('deptC', $deptC);

    $word->setValue('deptD', $deptD); // 设置其它替换

    // ...

    // 生成临时文件以供下载

    $tmpFileName = md5( time().'Heier' );

    $word->save($personBasePath . '/' . $tmpFileName .'.docx');

    $file = $personBasePath . '/' . $tmpFileName .'.docx';

    // 下载Word文件

    ob_start(); //打开缓冲区

    $fp = fopen($file,"r");

    $file_size = filesize($file);

    $downFileName = 'XXX.docx';

    header("Cache-Control: public");

    header("Content-type: application/octet-stream");

    header("Accept-Ranges: bytes");

    header("Content-Disposition: attachment; filename={$downFileName}");

    header("Pragma:no-cache");

    header("Expires:0");

    $buffer = 1024;

    $file_count = 0; //向浏览输出回数据

    while(!feof($fp) && $file_count < $file_size){

    $file_con = fread($fp,$buffer);

    $file_count += $buffer; echo $file_con;

    }

    ob_end_flush();//输出全部内容到浏览器}

    参考文档汇总

    关注微信公众号:PHP技术大全

    PHPer升级为大神并不难!

    7cfb4c6bdf8f0570f6bcfb0ec633df24.png

    展开全文
  • publicstaticvoidmain(String[]args){//模板、文件、图片路径StringworkPath=System.getProperty("user.dir")+"/static-utils/src/main/resources/word/";StringtemplateName="test.docx";Mapdatas=newHashMap()...
  • java 调用word模板实现循环套打生成word文档首先我用的技术是 poi 这是代码,一个工具类得调用 public class WordUtil { /** * 基于模板文件导出 word 文档,此方法主要是用来处理文档中需要替换的文本内容,对图片...
  • } /** * 实现对word读取和修改操作 * * @param filePath * word模板路径和名称 * @param map * 待填充的数据,从数据库读取 */ public static void readwriteWord(String filePath, Map map) { // 读取word模板 /...
  • 重点:解决 访问不到Word模板路径 //word模板文件流 这种方法不会在linux上或者jar启动失效 InputStream inputStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("static/template/...
  • spring下载word模板文件

    2021-03-21 09:56:56
    1.使用Poi-tl,添加依赖com.deepoovepoi-tl1.0.0poi-tl是一个java的模板引擎。2.生成模板,并输出到out流提供下载package com.deepoove.hooks.web.controller;import java.io.BufferedOutputStream;import java.io....
  • phpword生成word文档两种方法 ... 然后可以在新的文档里用代码...2 使用word模板,在模板里设置变量 然后替换变量就行了。这种方法简单快捷 大力推荐。 下面正式开始 1 安装phpword 我用的laravel框架 所以就用comp
  • 1.word每次打开都会自动打开默认模板,而我们自己设置了一些样式时候却用不上,每次打开都得重新设置样式。本文记录一下怎么设置自己的模板为默认打开模板。 2.首先需要设置好自己需要的样式。不知道怎么设置...
  • importjava.io.FileOutputStream;importjava.util.HashMap;importjava.util.Iterator;importjava.util.List;importjava.util.Map;importjava.util.Map.Entry;importorg.apache.poi.POIXMLDocument;...
  • 需求通过提前准备的word模板,渲染填充数据,生成新的加工好的word文件。(也试过使用Freemarker渲染数据,但是个很大的弊端:使用Freemarker渲染的后文件会变大)用法POI的Maven依赖org.apache.poipoi3.8需要将模板...
  • 一、首先composer安装PHPword,就不多说了二、然后是把模板中要替换的部分用变量代替三、把原始的模板文件放入项目目录,tp框就放在了public/upload/目录下四、查看php.ini中是否已经开启了com.allow_dcom = true从...
  • 1、word模板文件处理,如下图所示在word 文档中填值的地方写入占位变量2、将word文档另存为xml文件、编辑如下图,找到填写的占位,修改为${bcrxm}格式3、将文件后缀名改为.ftl文件4、java处理过程 、 引入frameMark jar...
  • 展开全部先下载jacob_1.10.1.zip。解压后将jacob.dll放到windows/system32下面或\j2.../** Java2word.java** Created on 2007年8月13日, 上午10:32** Tochange this template, choose Tools | Template Manager* and...
  • pom文件中引入依赖com.deepoovepoi-tl1.7.3org.apache.poipoi-ooxml4.1.0org.apache.poipoi4.1.2制作导出word用的模板文件docx,如图java导出word代码import com.deepoove.poi.XWPFTemplate;import ...
  • JAVA生成word模板程序步骤1、 将freemarker-2.3.13.jar复制到项目\WEB-INF\lib目录下2、 编辑模板文件(1) 将DOC文件另存为xml文件,将xml文件在eclipse环境下打开,右键选“源”→“格式”。此处注意xml文件属性是...
  • 本篇文章给大家分享的内容是phpword替换模板内容和解决中文乱码的问题,需要的朋友可以看一下。好吧 先下载吧:下载地址:https://pan.baidu.com/s/1upup2rpLTVXIdJpGi9kK6A密码:qxsd手册 ...
  • Word模板导出

    2021-03-17 23:50:35
    Word模板导出 制作导出模板 1、创建word模板,添加替换数据的占位符 2、保存模板为XML格式 3、修改文件后缀,改为ftl 4、添加FreeMark标签(Ctrl+Alt+L格式化文件) 5、添加FreeMark标签 编写替换代码 /** ...
  • 首先从spring官网中下载word模板, 这个dot文件不能直接打开,本质是word2000以前的遗留产物,在新版word特别是word2020中,新建一个word文档 2.1 将dot后缀的文件模板添加到word默认的存放文档模板的文件夹中 2.2...
  • PHP 使用word模板生成word文档示例PHP 使用word模板生成word文档示例namespace Home\Controller;use PhpOffice\PhpWord\TemplateProcessor;use Think\Controller;class TestController extends Controller {/*** ...
  • 在复杂word文档场景下,使用模板引擎是比POI、easypoi更优的解决方案
  • 一、安装依赖 1、npm install docxtemplater 2、npm install pizzip 3、npm install jszip-utils 4、npm install ... } 四、设置word模板并放入static目录(vue3放入public目录) 缺点:碰到文本换行符/n 无法换行
  • 调查问卷word转化成网页却又不一样问卷做得太长,用在选择题上也很方便。二。出现密码询问对话盒后,在对话盒中输入两次你的密码,将此Word文件用密码保护好、 插入核取方块(适用於选择题)第1步 首先,可以在「表单...
  • package xuzhenzhen.wordprocess.view;import java.awt.Dimension;import java.awt.Toolkit;import java.awt.datatransfer.Clipboard;import java.awt.datatransfer.DataFlavor;import java.awt.datatransfer.String...
  • 由于在大学毕业论文的时候,论文格式的要求十分严格,但是在完成论文编辑之后,发现这个论文的格式样式对于今后word排版大有益处,于是就将该论文的格式样式保存在一个.dox的文件中。由于电脑重装系统后,office上...
  • 用到的工具:jacob-1.17-M2.zip,文件解压后主要三个文件:jacob.jar、jacob-1.17-M2-x64.dll和jacob-1.17-M2-x86.dll。jacob.jar引入到项目工程中,jacob-1.17-M2-x64.dll放在C:\Windows\System32下,如果系统是...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 117,937
精华内容 47,174
关键字:

word有模板怎么写