FreeMark对导出Word中图片的处理

当导出的Word中带有图片时,我们可以创建一个带有图片的word模板,并将其保存成xml文档。此时我们能看到这样一段代码:
<w:binData w:name="wordml://03000001.png" xml:space="preserve">iVBORw0KGgo...此处省略base64编码...AASUVORK5CYIJ=</w:binData>  <#--用于声明图片的base64编码,并对其命名 --><v:shape id="图片 0" o:spid="_x0000_i1028" type="#_x0000_t75" alt="logo.png" style="width:128.25pt;height:33.75pt;rotation:180;visibility:visible;mso-wrap-style:square">  <v:imagedata src="wordml://03000001.png" o:title="logo"/>  <#--根据图片的命名显示图片 --></v:shape> 
此时我们将需要动态展示的数据换成变量占位符,如下:
<w:binData w:name="${"wordml://logo_"+nameplate_index+".png"}" xml:space="preserve">${logoUrl!}</w:binData>          <v:shape id="图片 0" o:spid="_x0000_i1028" type="#_x0000_t75" alt="logo.png" style="width:128.25pt;height:33.75pt;rotation:180;visibility:visible;mso-wrap-style:square">  <v:imagedata src="${"wordml://logo_"+nameplate_index+".png"}" o:title="logo"/></v:shape> 

注意:此处的${logoUrl!}存放的是图片的base64编码。且<w:binData>与</binData>标签之间除了该变量外不可添加其他字符,即使是一个空格或者换位符等。另外如果word中存在多张不同的图片,那么图片之间的<w:binData>标签中的v:name必须和<v:imagedata>中的src的值要不一致。单个图片内部两个属性值要保持一致。

后台获取图片的base64编码方法:

public String getImageStr(String imgFile) {

    InputStream in = null;    byte[] data = null;    try {        if(imgFile.startsWith("http")){          //获取在线图片            URL url = new URL(imgFile);            HttpURLConnection conn = (HttpURLConnection)url.openConnection();            conn.setRequestMethod("GET");            conn.setConnectTimeout(5 * 1000);            in = conn.getInputStream();        }else{      //获取线下图片            in = new FileInputStream(imgFile);        }        /*     //使用此种方式在获取在线图片时下载word中图片可能显示不全,其原因就是网络通讯往往是间断性的,一串字节往往分几批进行发送。本地程序调用available()方法有时得到0,这可能是对方还没有响应,也可能是对方已经响 应了,但是数据还没有送达本地。对方发送了1000个字节给你,也许分成3批到达,这你就要调用3次available()方法才能将数据总数全部得到。     int count = 0;        while (count == 0) {            count = in.available();        }        data = new byte[count];*/        int c;        ByteArrayOutputStream buff = new ByteArrayOutputStream();        while((c = in.read()) >= 0){            buff.write(c);        }        data = buff.toByteArray();        buff.close();        in.read(data);        in.close();    } catch (FileNotFoundException e) {        e.printStackTrace();    } catch (IOException e) {        e.printStackTrace();    }    BASE64Encoder encoder = new BASE64Encoder();    if(data!=null && data.length>0){        return encoder.encode(data);    }    return null;}
 
 
时间: 2024-10-15 23:41:31

FreeMark对导出Word中图片的处理的相关文章

如何设置Matlab输出到Word中图片的大小

方法一:快速型核心方法:设置Word显示比例100%,Matlab的图像大小与屏幕所见的相同:根据Word的排版要求,估计Matlab图像在Word中的大小,进而调整图像大小. 具体操作:(以下操作应对图像绘制完成后进行,图像绘制中字体大小.线宽等都与排版需要一致,比如8号字体,需要故意设置很大再缩小) (1)在Matlab图像窗口中,选择Edit--Copy Options--Preferences --match screen size(所见即所得) (2)将Word的显示比例设置成100%

Word中图片自动编号且与文中引用的编号对应

当我们在进行大篇幅 word 文档的编写时, 为了节约修改文章中图片所花费的大量时间, 可以将图片自动编号,且让文中引用的顺序跟着图片顺序的变化而变化,具体操作如下: 1. 将鼠标定在欲加编号的下方,点击"引用 "→"插入题注" 2. 点击"标签"右侧的倒三角,看有没有自己想要的格式,若没有,则点击"新 建标签",输入自己想要的格式,然后点击确定,则"标签"项中加入自己想要 的格式       3. 点击确

npoi 导出word中写入特殊字符

今天碰到一个要在word中插入复选框的特殊符号,找了半天,发现相关文档不太多.跟大家分享下. 代码实现起来很简单. run之前的代码就不写了.大家可以网上搜索. run.FontFamily = "Wingdings 2";//这边是特殊字符的字体 text = text.Replace("name", Convert.ToChar(0x0052).ToString());//0x0052是特殊字符的十六进制代码//text = text.Replace("

如何批量处理word中图片的格式,调节亮度和对比度?

每个word文件中有几百个带底纹的图片,需要将这些图片格式设置成的亮度为50,对比度为100,这样能去除底纹.请问如何批量处理? 还是让我帮你来出点子吧,怎么前面的都答非所问呢. 新建一个宏,将如下代码原样复制粘贴进入后按F5执行即可.'Sub Macro1()    For i = 1 To ActiveDocument.InlineShapes.Count        ActiveDocument.InlineShapes(i).PictureFormat.Brightness = 0.5

word中图片不显示了

再次打开word看到这情况我以为是word反应迟缓,加载太慢,过了一段时间再去看它还是这样,此刻我的内心是奔溃的. 然后...

写带有清晰图片的博客:如何将word中的图片复制到windows live writer保持大小不变--清晰度不变

写blog的习惯,先在word写了,复制到windows live writer,再发布到博客园.word中的文章,图片有缩放比例,复制到windows live writer后图片变得不清晰.除了一张一张 设置图片缩放比例为100%外,再复制到windows live writer.这样做太麻烦.就百度了下面的解决办法. word中图片小,复制出来的就不清楚,你需要设置图片大小为原始大小,复制到windows live writer图片才可能清楚. 还需要设置Windows live writ

关于word中插入CAD大图的调整

在word中插入CAD图时经常会有人将其改变成图片,这样的结果就造成在word中图片的不清晰. 最好的方式当然是将原始图清晰的粘贴在word中. 有其他人从CAD中直接复制,粘贴到word中,但是总是出现大小调整不了,或者调整困难的局面如图显示 出现像这种,实际需要的图好小,图片调整有非常困难的情况. 出现这种情况是因为复制图时,系统默认情况是CAD当前显示界面大小,也就是这种情况 对比一下  就会发现  想要在word中画布空白处尽可能少,就需要在复制cad图时将所需要复制的部分放大复制.如图

iText导出pdf、word、图片

一.前言 在企业的信息系统中,报表处理一直占比较重要的作用,本文将介绍一种生成PDF报表的Java组件--iText.通过在服务器端使用Jsp或JavaBean生成PDF报表,客户端采用超级连接显示或下载得到生成的报表,这样就很好的解决了B/S系统的报表处理问题. 二.iText简介 iText是著名的开放源码的站点sourceforge一个项目,是用于生成PDF文档的一个java类库.通过iText不仅可以生成PDF或rtf的文档,而且可以将XML.Html文件转化为PDF文件. iText的

Java 用Freemarker完美导出word文档(带图片)

Java  用Freemarker完美导出word文档(带图片) 前言 最近在项目中,因客户要求,将页面内容(如合同协议)导出成word,在网上翻了好多,感觉太乱了,不过最后还是较好解决了这个问题. 准备材料 1.word原件 2.编辑器(推荐Firstobject free XML editor) 实现步骤 1.用Microsoft Office Word打开word原件: 2.把需要动态修改的内容替换成***,如果有图片,尽量选择较小的图片几十K左右,并调整好位置: 3.另存为,选择保存类型