Apache POI XWPF:如何创建一组线?

2023-12-24

我是 Poi 的新手。我尝试用画线制作一组形状复合材料。 在 LibreOffice 文档上我可以制作,但使用 Poi 似乎更困难。

例子:


里面没有关于形状的内容apache poi's XWPF除了到目前为止的图表。但是还有com.microsoft.schemas.vml它能够为 Microsoft Office 文件创建 VML 图形。 Microsoft Word 也支持这些图形。

创建图形本身并不像从 VML 路径绘制那样复杂。所以只有关于VML https://en.wikipedia.org/wiki/Vector_Markup_Language是需要的。但是在Word文档中插入图形需要用到低级的org.openxmlformats.schemas.wordprocessingml.x2006.main.* and com.microsoft.schemas.vml.*类并需要有关内部 XML 结构的知识*.docx file.

希望您能从下面这个完整的例子中得到原理:

import java.io.FileOutputStream;

import org.apache.poi.xwpf.usermodel.*;

import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTPicture;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTR;

import com.microsoft.schemas.vml.CTGroup;
import com.microsoft.schemas.vml.CTShape;

import org.w3c.dom.Node;

public class CreateWordPathShape {

 public static void main(String[] args) throws Exception {

  String boxWidth = "100pt";
  String boxHeight = "100pt";
  String posLeft = "150pt";
  String posTop = "0pt";

  XWPFDocument doc= new XWPFDocument();

  XWPFParagraph paragraph = doc.createParagraph();
  XWPFRun run=paragraph.createRun();  
  run.setText("The Body text: ");

  CTGroup ctGroup = CTGroup.Factory.newInstance();

  CTShape ctShape = ctGroup.addNewShape();
  ctShape.setCoordsize("21600,21600");
  ctShape.setPath2("m21600,0 l0,0 l0,21600 l21600,21600 e");
  //path: from 0,0 (top left) move to 21600,0 (top right), line to 0,0 (top left), line to 0,21600 (bottom left), line to 21600,21600 (bottom right), end

  ctShape.setStyle("position:absolute"
   +";top:" + posTop
   +";left:" + posLeft
   +";width:" + boxWidth
   +";height:" + boxHeight
  );

  Node ctGroupNode = ctGroup.getDomNode(); 
  CTPicture ctPicture = CTPicture.Factory.parse(ctGroupNode);
  run=paragraph.createRun();  
  CTR cTR = run.getCTR();
  cTR.addNewPict();
  cTR.setPictArray(0, ctPicture);

  paragraph = doc.createParagraph();

  FileOutputStream out = new FileOutputStream("CreateWordPathShape.docx");
  doc.write(out);
  out.close();

 }
}

此代码需要所有模式的完整 jar,如中提到的Apache POI 常见问题解答 https://poi.apache.org/help/faq.html#faq-N10025.

下面是一个将 VML 线形状放入XWPFDocument:

 private static void createLineShape(XWPFParagraph paragraph, String coordsize, String vmlPath, String strokecolor, String style) throws Exception {
  XWPFRun run = paragraph.createRun(); 
  com.microsoft.schemas.vml.CTGroup ctGroup = com.microsoft.schemas.vml.CTGroup.Factory.newInstance();
  com.microsoft.schemas.vml.CTShape ctShape = ctGroup.addNewShape();
  ctShape.setCoordsize(coordsize);
  ctShape.setPath2(vmlPath);
  ctShape.setStrokecolor(strokecolor);
  ctShape.setStyle(style);
  org.w3c.dom.Node ctGroupNode = ctGroup.getDomNode(); 
  CTPicture ctPicture = CTPicture.Factory.parse(ctGroupNode);
  CTR cTR = run.getCTR();
  cTR.addNewPict();
  cTR.setPictArray(0, ctPicture);  
 }

它可以这样调用:

...
XWPFParagraph paragraph = ...
...
createLineShape(paragraph, "21600,21600", "m21600,0 l0,0 l0,21600 l21600,21600 e", "#FF0000", "position:absolute;left:0;width:100pt;height:100pt");
...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Apache POI XWPF:如何创建一组线? 的相关文章

  • 我是否需要安装 SQLite 才能使 SQLiteJDBC 正常工作?

    我想我只是没有 明白 如果我的计算机上尚未安装 SQLite 并且我想编写一个使用嵌入式数据库的 Java 应用程序 并且我将 SQLiteJDBC JAR 下载 导入到我的项目中 那么这就是我所需要的吗 或者 我是否需要先安装 SQLit
  • 垃圾收集器如何在幕后工作来收集死对象?

    我正在阅读有关垃圾收集的内容 众所周知 垃圾收集会收集死亡对象并回收内存 我的问题是 Collector 如何知道任何对象已死亡 它使用什么数据结构来跟踪活动对象 我正在研究这个问题 我发现GC实际上会跟踪活动对象 并标记它们 每个未标记的
  • 什么是抽象类? [复制]

    这个问题在这里已经有答案了 当我了解抽象类时 我说 WT H 问题 创建一个无法实例化的类有什么意义呢 为什么有人想要这样的课程 什么情况下需要抽象类 如果你明白我的意思 最常见的是用作基类或接口 某些语言有单独的interface构建 有
  • 如何调试“com.android.okhttp”

    在android kitkat中 URLConnection的实现已经被OkHttp取代 如何调试呢 OkHttp 位于此目录中 external okhttp android main java com squareup okhttp 当
  • 如何检查某个元素是否存在于一组项目中?

    In an ifJava中的语句如何检查一个对象是否存在于一组项目中 例如 在这种情况下 我需要验证水果是苹果 橙子还是香蕉 if fruitname in APPLE ORANGES GRAPES Do something 这是一件非常微
  • 如何在 ant 中为 junit 测试设置 file.encoding?

    我还没有完全完成file encoding 和 ant https stackoverflow com questions 1339352 how do i set dfile encoding within ants build xml
  • 从jar中获取资源

    我有包含文件的 jar myJar res endingRule txt myJar wordcalculator merger Marge class 在 Marge java 中我有代码 private static final Str
  • 提高 PostgreSQL 1 亿数据左连接查询性能

    我在用Postgresql 9 2 version Windows 7 64 bit RAM 6GB 这是一个Java企业项目 我必须在我的页面中显示订单相关信息 有三个表通过左连接连接在一起 Tables TV HD 389772 行 T
  • 在 Java 中获取并存储子进程的输出

    我正在做一些需要我开始子处理 命令提示符 并在其上执行一些命令的事情 我需要从子进程获取输出并将其存储在文件或字符串中 这是我到目前为止所做的 但它不起作用 public static void main String args try R
  • 不可变的最终变量应该始终是静态的吗? [复制]

    这个问题在这里已经有答案了 在java中 如果一个变量是不可变的并且是final的 那么它应该是一个静态类变量吗 我问这个问题是因为每次类的实例使用它时创建一个新对象似乎很浪费 因为无论如何它总是相同的 Example 每次调用方法时都会创
  • hibernate 6.0.2.Final 和 spring boot 2.7.0 的entityManagerFactory bean 未配置问题

    所以最近我想升级我的 Spring Boot 项目项目的一些依赖项 特别是这些组件 雅加达 EE 9 弹簧靴2 7 休眠 6 0 2 Final 完成此操作后 所有更新和代码折射 更新将 javax 导入到 jakarta 以及一些 hib
  • Java Swing - 如何禁用 JPanel?

    我有一些JComponents on a JPanel我想在按下 开始 按钮时禁用所有这些组件 目前 我通过以下方式显式禁用所有组件 component1 setEnabled false 但是有什么办法可以一次性禁用所有组件吗 我尝试禁用
  • 为什么\0在java中不同系统中打印不同的输出

    下面的代码在不同的系统中打印不同的输出 String s hello vsrd replace 0 System out println s 当我在我的系统中尝试时 Linux Ubuntu Netbeans 7 1 它打印 When I
  • 使用 HtmlUnit 定位弹出窗口

    我正在构建一个登录网站并抓取一些数据的程序 登录表单是一个弹出窗口 所以我需要访问这个www betexplorer com网站 在页面的右上角有一个登录链接 写着 登录 我单击该链接 然后出现登录弹出表单 我能够找到顶部的登录链接 但找不
  • Android S8+ 警告消息“不支持当前的显示尺寸设置,可能会出现意外行为”

    我在 Samsung S8 Android 7 中收到此警告消息 APP NAME 不支持当前的显示尺寸设置 可能会 行为出乎意料 它意味着什么以及如何删除它 谢谢 通过添加解决supports screens 机器人 xlargeScre
  • Hibernate 本机查询 - char(3) 列

    我在 Oracle 中有一个表 其中列 SC CUR CODE 是 CHAR 3 当我做 Query q2 em createNativeQuery select sc cur code sc amount from sector cost
  • 列表过滤器内的 Java 8 lambda 列表

    示例 JSON id 1 products id 333 status Active id 222 status Inactive id 111 status Active id 2 products id 6 status Active
  • Java 正则表达式中的逻辑 AND

    是否可以在 Java Regex 中实现逻辑 AND 如果答案是肯定的 那么如何实现呢 正则表达式中的逻辑 AND 由一系列堆叠的先行断言组成 例如 foo bar glarch 将匹配包含所有三个 foo bar 和 glarch 的任何
  • 子类构造函数(JAVA)中的重写函数[重复]

    这个问题在这里已经有答案了 为什么在派生类构造函数中调用超类构造函数时 id 0 当创建子对象时 什么时候在堆中为该对象分配内存 在基类构造函数运行之后还是之前 class Parent int id 10 Parent meth void
  • Java RMI - 客户端超时

    我正在使用 Java RMI 构建分布式系统 它必须支持服务器丢失 如果我的客户端使用 RMI 连接到服务器 如果该服务器出现故障 例如电缆问题 我的客户端应该会收到异常 以便它可以连接到其他服务器 但是当服务器出现故障时 我的客户端什么也

随机推荐

  • Python 分组依据

    假设我有一组数据对 其中index 0是值并且index 1是类型 input 11013331 KAT 9085267 NOT 5238761 ETH 5349618 ETH 11788544 NOT 962142 ETH 7795297
  • 如何在 Node.js 中检索客户端和服务器 IP 地址和端口号

    我尝试进行大量搜索以找到一种方法来了解客户端和服务器的 IP 地址和端口号 到目前为止我发现 客户端IP 可以知道req ip 客户端端口 我搜索了很多 但找不到任何方法来找到这个客户端临时端口 检查完后req and res对象 我发现有
  • 使用 joda 时间的两个日期之间的秒数差异?

    假设有两个日期 A 开始时间 和 B 结束时间 A 和 B 可以是同一天甚至不同天的时间 我的任务是在几秒钟内显示差异 我正在使用的日期格式是 Date Format yyyy MM dd T HH mm ss SSSZ 例如 start
  • 找不到System.Xaml?

    我有一个 VS2010 项目需要引用 System Xaml 我转到 添加引用 搜索 NET 引用 但它不在那里 我也仔细检查了 GAC 但没有这样的运气 我就是想不通为什么它不在机器上 该计算机安装了 NET 3 5 SP1 和 NET
  • UILabel 的字体在视图重新出现之前不会调整

    使用故事板 我创建了一个带有带有标签的单元格的表格视图 我希望能够轻松地将相同的字体分配给应用程序中的所有标签 因此我在辅助文件 smallFont mediumFont 和 largeFont 中创建了一些字体tableView tabl
  • 访问 ASP.NET 中没有值的查询字符串参数

    我正在尝试设置一个具有两种行为的页面 我通过 URL 将它们分开 一种行为通过 some controller some action 另一个是通过 some controller some action customize 不过 当我访问
  • 将派生类转换为基类

    我正在尝试刷新我的记忆 但无法通过 Google 找到答案 public class BaseClass public virtual void DoSomething Trace Write base class public class
  • Docker:连接期间出错

    每当我尝试使用 RSelenium 包时 我都会收到上述错误 shell docker run d p 4445 4444 selenium standalone chrome docker error during connect Pos
  • 将 DAO 注入构造函数是否被认为是不好的做法?如果是这样,为什么?

    我有一个 DAL 数据访问层 但这个问题也与 DAO 相关 它与 android 中的静态 Web 服务进行通信 除了我不想包含大量静态库之外 它的相关性较小 交互并不那么复杂 我有一个对象 它包装一个列表 该列表由来自该数据访问层的信息填
  • 为什么我不能通过 import scipy as sp 来使用 sp.signal? [复制]

    这个问题在这里已经有答案了 我想用scipy signal lti and scipy signal impulse函数来计算传递函数 我导入scipy模块按以下方式 import scipy as sp import numpy as n
  • 使用 pytest-asyncio 测试 FastAPI 路由时出现“RuntimeError:事件循环已关闭”

    我收到错误 运行时错误 事件循环已关闭 每次我尝试在测试中进行多个异步调用时 我已经尝试使用其他 Stack Overflow 帖子中的所有其他建议来重写event loop固定装置但没有任何作用 我想知道我错过了什么 运行测试命令 pyt
  • 在 odoo 10 中向状态栏添加颜色

    需要在odoo10中的状态栏添加颜色 哪些可用的openerp版本 例如
  • 一种数据结构,其中键为单词簇,值为单个单词或字符串

    我想创建一个能够将一组或一组单词映射到单个单词或字符串的数据结构 它可以被认为是 python 中字典的反向操作 您可以使用常规字典 targetword good wordmap best targetword positive targ
  • PHP MYSQL 博客存档菜单(按年和月)

    我正在寻找一种有效的方法将所有博客文章整理到以下格式的菜单中 2012 八月 6 九月 4 十月 2 Month 代表月份 显然 括号内的值代表该月的帖子数 单击后 将搜索该月 该年的所有帖子 我需要它是动态的 当该月创建帖子时自动选取 1
  • useSWR 不适用于异步获取器功能

    我正在使用 SWR 获取数据来填充表 我正在使用以下代码 const data items error useSWR fetchAllItems name fetchAllItems fetcher 函数看起来像这样 async funct
  • graphql查询SQL父子关系

    我有一个 postgres 表 它表示具有父子表的层次结构 表 类别 id name parentId 1 CatA null 2 CatB null 3 CatC 1 4 CatD 1 5 CatE 3 期望的结果 categories
  • 如何使用字典从嵌套 json 创建 pandas 数据框

    我正在尝试创建一个 pandas 数据框形式的 json 文件 我已经看到了这个问题的多种解决方案 它们使用内置函数 from dict json normalize 但我无法将其应用到我的代码中 以下是我的数据在 json 文件中的结构
  • DotNetOpenAuth:如何实现一个简单的 OpenId 提供程序?

    每个 OpenId 提供商都有一个提供商 Url 例如 Google https www google com accounts o8 id https www google com accounts o8 id Using OpenIdR
  • 如何在表单中放置两个提交按钮

    我在一种表单中有两个提交按钮 我想在两个按钮中调用不同的操作 有没有什么方法可以在不使用 JavaScript 的情况下完成此任务 如果没有 JavaScript 就不可能调用不同的操作 您可以调用相同的控制器操作 并在该操作内使用 nam
  • Apache POI XWPF:如何创建一组线?

    我是 Poi 的新手 我尝试用画线制作一组形状复合材料 在 LibreOffice 文档上我可以制作 但使用 Poi 似乎更困难 例子 里面没有关于形状的内容apache poi s XWPF除了到目前为止的图表 但是还有com micro