精华内容
下载资源
问答
  • 通过读取xml文件中的内容,通过字符串拼接的方式,生成word文档,目前仅支持某一种固定格式的表格,即生成的word文档目前仅有表格形式,若xml格式发生变化,请自行更改代码
  • 根据word的xml模板生成word文件
  • freemarker生成的word转成PDF后,图片丢失。 所以想到将freemarker生成xml格式的word转成标准格式的word在转成PDF。 现在不知道怎么将xml格式的...或者如何将xml格式的word转为标准的word格式 求帮忙啊!谢谢
  • Freemarker + XML 生成word 文档 。具体步骤先用word做好模板,然后另存为xml 2003 版本的,修改后缀为.ftl文件。在文件中加入需要处理的循环标签 。一般是在开始的前面。
  • 通过xml生成word文档

    千次阅读 2015-01-20 01:18:53
     使用xml生成word的基本步骤在《使用xslt转化xml数据形成word文档导出.doc》中说明比较清楚了。但是其中的细节并未说到,因此自己折腾了两天总算成功了。以下是我在使用过程中碰到的问题要点: 必须使用word 2003...

    Xml生成word总结

       使用xml生成word的基本步骤在《使用xslt转化xml数据形成word文档导出.doc》中说明比较清楚了。但是其中的细节并未说到,因此自己折腾了两天总算成功了。以下是我在使用过程中碰到的问题要点:


    必须使用word 2003.

    1.下面通过例子演示:


    简单 的xml以及对应的xml框架

     

    2.分别创建03版本的word文档log_03.doc和o7版本的word文档log_07.docx,并都应用以上生成的log.xsd框架


    分别另存为log_03_doc.xml,log_07_doc.xml。

    3. 用log_03_doc.xml,log_07_doc.xml生成xslt文件log_03.xslt和log_07.xslt。


    log_03_doc.xml生成log_03.xslt时会弹出以上对话框,仅仅选中xml中指定的namespace就可以了。

     

    log_07_doc.xml生成log_07.xslt时会弹出以上对话框,就是没有xml中指定的namespace,所有无论怎么选,生成的xslt都不是我们想要的。

    不要选其他namespace

    log_03_doc.xml生成log_03.xslt时会弹出以上对话框,不要随便再选其他namespace。 生成的xslt截图

     


    如果再选中其他namespace,生成的xslt也不是我们要的。生成xslt截图

    显然跟上面的不一样。

     

     

     

     

    插入图片

    要实现插入图片,需要修改log_03.doc.

    重新生成log_03.xslt,并修改<ns0:image>节点。

    1、删除整个v:shapetype 节点

    2、删除  <w:binData节点中的数据,并添加<xsl:value-ofselect="."/>

    修改之后

    3、修改v:shape 节点,去掉 style 属性,增加xsl 节点,如下:


    4、去掉w:pict 节点后面的带<xsl:value-ofselect="."/>的所有节点

    例子中去掉了如下代码:

    <w:r>

             <w:t>

               <xsl:value-of select="." />

             </w:t>

      </w:r>

    如果没做第四步,则在word中会出现图片的二进制代码。

     

     

    例子:

      QDomDocumentdom;

        QDomProcessingInstructionproc =

           dom.createProcessingInstruction(

           "xml",

           "version=\"1.0\"standalone=\"no\""

           );

        dom.appendChild(proc);

     

        QDomElementr =dom.createElement("log");

        dom.appendChild(r);

        r.setAttribute("xmlns","logs");

        QDomElementuserNode =dom.createElement("user");

        r.appendChild(userNode);

        QDomTextuserTextNode =dom.createTextNode("john");

        userNode.appendChild(userTextNode);

     

        QDomElementloginNode =dom.createElement("login");

        r.appendChild(loginNode);

        QDomTextloginTextNode =dom.createTextNode("2015-01-1811:10:12");

        loginNode.appendChild(loginTextNode);

     

        QDomElementlogoffNode =dom.createElement("logoff");

        r.appendChild(logoffNode);

        QDomTextlogoffTextNode =dom.createTextNode("2015-01-1813:10:12");

        logoffNode.appendChild(logoffTextNode);

     

        QDomElementimageNode =dom.createElement("image");

        r.appendChild(imageNode);

        QStringpng;

        FILE*fpng =fopen("2.jpg","rb");

        if( fpng )

        {

           encode(fpng,png,0 );

           fclose(fpng );

        }

        imageNode.setAttribute("style","width:300pt;height:300pt" );

        charszBuffer[256];

        //sprintf(szBuffer,"wordml://5.png");

        imageNode.setAttribute("key","2.jpg" );

        QDomTextlogonNodeTextNode =dom.createTextNode(png);

        imageNode.appendChild(logonNodeTextNode);

     

     

     

        QStringxml =dom.toString();

        QFilefile("log.xml");

        if(file.open(QIODevice::WriteOnly))

        {

           QTextStreamoutput( &file);

           output.setCodec(QTextCodec::codecForName("UTF-8"));

           //QStringcontent = dom.toString();

           output<< xml;

           file.close();

        }

     

     

        QStringsrc ="msxsl.exe";

        QStringsrc1 ="log.xml";

        QStringsrc2 ="log_03.xslt";

        QStringsrc3 =QString("122")+".doc";

     

        QProcess*proce =newQProcess( );

        QStringListargumentList;

        argumentList.append(src1 );

        argumentList.append(src2 );

        argumentList.append("-o");

        argumentList.append(src3 );

     

        proce->start(src, argumentList );

        bool ret =proce->waitForStarted( 5000 );

     

    展开全文
  • Java根据xml模板生成word

    千次阅读 2017-09-26 20:46:56
     * 根据模板生成word  * @param templatePath 模板路径  * @param templateName 模板文件名  * @param dataMap 参数map  * @param targetFilePath 生成文件路径  * @param targetFileName 生成文件名(含...
          
    
        /**
         * 根据模板生成word
         * @param templatePath 模板路径
         * @param templateName 模板文件名
         * @param dataMap 参数map
         * @param targetFilePath 生成文件路径
         * @param targetFileName 生成文件名(含后缀)
         */
        public static String createDoc(String templatePath, String templateName,Map<String, String> dataMap, String targetFilePath,String targetFileName) {  
            // 设置模本装置方法和路径  
            Template t = null; 
            try {
            configuration.setDirectoryForTemplateLoading(new File(templatePath));
                t = configuration.getTemplate(templateName,"UTF-8"); // 装载test2.xml模板  
            } catch (IOException e) {  
                e.printStackTrace();  
                return "error:" + e.getMessage();
            }  
            // 输出文档路径及名称  
            File outFolder = new File(targetFilePath);
            if(!outFolder.exists()){
            outFolder.mkdirs();
            }
            File outFile = new File(targetFilePath+File.separator+targetFileName);  
            Writer out = null;  
            try {  
                out = new BufferedWriter(new OutputStreamWriter(  
                        new FileOutputStream(outFile),"utf-8"));  
            } catch (Exception e1) {  
                e1.printStackTrace(); 
                return "error:" + e1.getMessage();
            }  
            
            try {  
                t.process(dataMap, out);
                out.flush(); 
                logger.info("Freemarker生成word成功:"+targetFileName);
                out.close();
            } catch (TemplateException e) {  
                e.printStackTrace();
                
                logger.error("Freemarker生成word失败:"+targetFileName+":"+e.getMessage());
                return "error:" + e.getMessage();
            } catch (IOException e) {  
                e.printStackTrace();  
                logger.error("Freemarker生成word失败:"+targetFileName+":"+e.getMessage());
                return "error:" + e.getMessage();
            }  catch(Exception e){
            logger.error("Freemarker生成word失败:"+targetFileName+":"+e.getMessage());
    e.printStackTrace();
    return "error:" + e.getMessage();
    }finally{
    if(null!=out){
    try {
    out.close();
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    return "error:" + e.getMessage();
    }
    }
    }
            return "success";
        } 
        
    展开全文
  • 1.场景 word文件另存为xml格式,修改后缀名为ftl,生成ftl文件模板,再通过Freemaker框架...后期填充数据,生成word后,发现模板有问题,再重新改xml,或重新生成,工作量不小。 2.问题 1)根据ftl模板生成的word...

    1.场景

    word文件另存为xml格式,修改后缀名为ftl,生成ftl文件模板,再通过Freemaker框架,填充数据生成定制化的Word文件。

    通过Word模板创建ftl模板,注意模板的格式,尤其是序号是否是自动生成,不然,填充数据时,就需要自己填充序号。

    后期填充数据,生成word后,发现模板有问题,再重新改xml,或重新生成,工作量不小。

    2.问题

    1)根据ftl模板生成的word内表格列宽不固定,超出页面边界

    在表格位置新增红色部分

    <w:tbl>

           <w:tblPr>
                    <w:tblOverlap w:val="never"/>
                    <w:tblLayout w:type="fixed"/>

            </w:tblPr>

    </w:tbl>

     

    备注:

    根据实际项目遇到的问题,记录一下解决办法。

     

    展开全文
  • 如下代码可以实现使用Java的POI进行Word文档的解析并生成XML格式文档功能

        如下代码可以实现使用Java的POI进行Word文档的解析并生成XML格式文档功能,此代码编译通过,但是运行有问题,读者可以亲自试试并能否改bug:


    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.io.OutputStreamWriter;
    import java.io.Writer;
    import java.nio.charset.Charset;
    
    import org.apache.poi.hwpf.HWPFDocument;
    import org.apache.poi.hwpf.model.StyleDescription;
    import org.apache.poi.hwpf.model.StyleSheet;
    import org.apache.poi.hwpf.usermodel.CharacterRun;
    import org.apache.poi.hwpf.usermodel.Paragraph;
    import org.apache.poi.hwpf.usermodel.Range;
    
    public final class Word2Forrest {
    	Writer _out;
    	HWPFDocument _doc;
    
    	@SuppressWarnings("unused")
    	public Word2Forrest(HWPFDocument doc, OutputStream stream) throws IOException {
    		OutputStreamWriter out = new OutputStreamWriter(stream, Charset.forName("UTF-8"));
    		_out = out;
    		_doc = doc;
    
    		init();
    		openDocument();
    		openBody();
    
    		Range r = doc.getRange();
    		StyleSheet styleSheet = doc.getStyleSheet();
    
    		int sectionLevel = 0;
    		int lenParagraph = r.numParagraphs();
    		boolean inCode = false;
    		for (int x = 0; x < lenParagraph; x++) {
    			Paragraph p = r.getParagraph(x);
    
    			String text = p.text();
    			if (text.trim().length() == 0) {
    				continue;
    			}
    			StyleDescription paragraphStyle = styleSheet.getStyleDescription(p.getStyleIndex());
    			String styleName = paragraphStyle.getName();
    			if (styleName.startsWith("Heading")) {
    				if (inCode) {
    					closeSource();
    					inCode = false;
    				}
    
    				int headerLevel = Integer.parseInt(styleName.substring(8));
    				if (headerLevel > sectionLevel) {
    					openSection();
    				} else {
    					for (int y = 0; y < (sectionLevel - headerLevel) + 1; y++) {
    						closeSection();
    					}
    					openSection();
    				}
    				sectionLevel = headerLevel;
    				openTitle();
    				System.out.println("++++++" + p.text());
    				writePlainText(text);
    				closeTitle();
    			} else {
    				int cruns = p.numCharacterRuns();
    				CharacterRun run = p.getCharacterRun(0);
    				String fontName = run.getFontName();
    				if (fontName.startsWith("Courier")) {
    					if (!inCode) {
    						openSource();
    						inCode = true;
    					}
    					System.out.println("------" + p.text());
    					writePlainText(p.text());
    				} else {
    					if (inCode) {
    						inCode = false;
    						closeSource();
    					}
    					openParagraph();
    					System.out.println("******" + p.text());
    					writePlainText(p.text());
    					closeParagraph();
    				}
    			}
    		}
    		for (int x = 0; x < sectionLevel; x++) {
    			closeSection();
    		}
    		closeBody();
    		closeDocument();
    		_out.flush();
    
    	}
    
    	public void init() throws IOException {
    		_out.write("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n");
    		_out.write(
    				"<!DOCTYPE document PUBLIC \"-//APACHE//DTD Documentation V1.1//EN\" \"./dtd/document-v11.dtd\">\r\n");
    	}
    
    	public void openDocument() throws IOException {
    		_out.write("<document>\r\n");
    	}
    
    	public void closeDocument() throws IOException {
    		_out.write("</document>\r\n");
    	}
    
    	public void openBody() throws IOException {
    		_out.write("<body>\r\n");
    	}
    
    	public void closeBody() throws IOException {
    		_out.write("</body>\r\n");
    	}
    
    	public void openSection() throws IOException {
    		_out.write("<section>");
    
    	}
    
    	public void closeSection() throws IOException {
    		_out.write("</section>");
    
    	}
    
    	public void openTitle() throws IOException {
    		_out.write("<title>");
    	}
    
    	public void closeTitle() throws IOException {
    		_out.write("</title>");
    	}
    
    	public void writePlainText(String text) throws IOException {
    		_out.write(text);
    	}
    
    	public void openParagraph() throws IOException {
    		_out.write("<p>");
    	}
    
    	public void closeParagraph() throws IOException {
    		_out.write("</p>");
    	}
    
    	public void openSource() throws IOException {
    		_out.write("<source><![CDATA[");
    	}
    
    	public void closeSource() throws IOException {
    		_out.write("]]></source>");
    	}
    
    	public static void main(String[] args) throws IOException {
    		InputStream is = new FileInputStream("D:/QMDownload/hwpftest.doc");
    		OutputStream out = new FileOutputStream("D:/QMDownload/test.xml");
    		try {
    			new Word2Forrest(new HWPFDocument(is), out);
    		} finally {
    			out.close();
    			is.close();
    		}
    	}
    }


    展开全文
  • 使用freemarker技术生成word时,当文件内容是xml,如果直接使用占位符${value}换行符不生效,显示内容达不到预期效果,需要手工对xml内容进行处理,处理方法如下: 代码处理: /** * xml格式化后的xml内容 */...
  • 这里用的是poi相关jar包以及freemarker...1,编辑word并保存为xml 2,把xml后缀改为ftl文件 3,前端代码 // alert(jsonStr); var url = "${ctx}//exportWordXTOdsxdlsdbh.htm?jsonStr="+ jsonStr; window.o...
  • xml格式word文档解析器

    2018-08-09 15:22:50
    自己编写的xml格式word文档分析器,完成了普通书签替换,表格书签替换,表格循环,嵌套循环数据生成表格等功能。请仔细阅读文件中“xml格式word解析器1 .md”
  • 资源名称:使用Javascript解析xml文件xml格式字符串 中文WORD版   内容简介: 本文档主要讲述的是使用Javascript解析xml文件xml格式字符串;javascript中,不论是解析xml文件,...
  • Xml生成word 技巧一

    千次阅读 2015-01-20 19:56:17
    Xml生成word文档的几个基本步骤,就是先定义xml,再生成xml框架。经过一天的折腾,发现其实可以不用生成xsd文件,只要把xml文件另存为word就可以了。还是通过昨天的例子说明。 1. xml另存为word文档log.doc 2....
  • 此程序更加XML(wordtest.xml)配置文件动态生成WORD文档,支持固定表格、列表表格、根据DataSet中Table个数生成多个同一表格,表格可以合并行或列,字体和颜色都可以设置,页眉页脚也可以设置。
  • C#+XML生成word报告

    2015-03-24 15:26:57
    C#结合XML书签配置文件,连接SQL Server数据库,生成word报告。包括文本、表格、chart和图片。基本能够满足一般生成报告的需要。
  • 问:首先需求是什么? 答:需要长成一个word文档,其中格式有模板文件 首先word文档中需要动态生成的文字... * 获取生成Word文档所需要的数据 */ @PostMapping("/getWordData") @ResponseBody public CommonResult
  • 这是《使用 Open XML 生成 Word 文档(VS2015)》的 C# 源码,详细内容见博客文章 https://blog.csdn.net/blackwoodcliff/article/details/91474636
  • java XML解析方式实现自动生成word文档文档中主要描述word模板的使用方法,文件中带有案例代码,可以方便理解
  • java根据xml模板生成word(编辑内容)

    千次阅读 2019-01-11 19:31:05
    1.使用的依赖 <groupId>org.freemarker ...编辑xml文件:(xml模板可编辑word文档使用wps另存为xml格式)   参考: https://blog.csdn.net/qq_32786873/article/details/52535845
  • XML生成Word方法

    2020-11-30 15:47:52
    3、用freemarker 渲染转word格式 public class FreemarkerUtils { public static void doTemplate(String templatePosition,String templateName,Map<String,Object>dataMap,String outPath)throws ...
  • C++ 快速生成word文档 网上大部分都是C#生成xml,我通过对docxml的解析实现了通过C++直接快速生成word。 速度与通过自动化生成word文档相比得到了大幅度的提示,效率很高,用户体验也更好。 需要使用tinyxml进行...
  • 本文主要介绍ASP.NET Core中,使用Web API后台接口通过Open XML SDK生成Word(.doc、.docx)文件模板,并且返回输出到浏览器端的方法,以及实现相关的示例代码。 原文地址:ASP.NET Core使用Web API通过Open XML SDK...
  • 问题描述:不管是wps生成的xml模板还是office生成的xml模板,下载的时候...解决问题思路:既然和生成word的没啥关系,和浏览器下载的时候有关系。那就对该文件进行压缩,在下载,说干就干。利用java提供的压缩方法...
  • xml格式如何转换成doc格式文件通过jodconveter来实现转化(http://www.artofsolving.com/opensource/jodconverter)。这种方式实现起来比较麻烦,操作有点繁琐,但是能解决上述问题。通过启动OpenOffice.org的服务端口...
  • wordxml文档生成freemarker模版,一定要检查带$的变量命名是否正确。 模版可以转换回wordxml文件格式,但是需要把freemarker自带标签删除 转载于:...
  • 【干货】java使用xml方式快速生成word

    千次阅读 2018-12-27 11:46:00
    【干货】java使用xml方式快速生成word为什么不使用POI呢?如何使用生成word的代码 为什么不使用POI呢? 对于这个问题,我想大家都有共同的见解:POI对于word的支持实在是太差了! 在我参与的一个项目中,我负责做一...
  • Wordinator使用Apache POI库[ ]从SWPX XML生成DOCX文件。 使用内置的XSLT支持时,它将Saxon [ ]用于XSLT转换。 此方法提供了两个阶段的X到DOCX转换过程,其中第一阶段是将输入内容转换为一个或多个SWPX文档,第二...
  • 可以快速批量生成HTML/XML/WORD文档/EXCEL...能够按照模板格式生成HTML/XML/WORD文档/EXCEL文档等等各种文档。比如,需要批量生成报表、单据、静态网页、配置文件等等,都可以编辑一个模板,然后用此代码快速批量生成
  • 服务端使用maven创建,数据库连接使用mybatis创建,前端使用小程序,小程序前后端交互使用json数据。json数据是一种常见的数据交互
  • xml格式生成word,可以将图片的二进制数据保存在word中,无需考虑图片的存放位置。 一、制作freemarker模板 1、 准备模板 首先,新建一个docx,然后往word里粘贴一个图片,再将word另存为xml文件。 新建一个...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 46,904
精华内容 18,761
关键字:

文档xml格式生成word