- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我需要将 ms word 表格的每个单元格转换为图像。我已经为 getImage
和 getText
编写了代码,但我想合并它们并转换成单个图像,所以我只想将单元格转换成图像。
XWPFDocument doc = new XWPFDocument(new FileInputStream(fileName));
List<XWPFTable> table = doc.getTables();
for (XWPFTable xwpfTable : table) {
List<XWPFTableRow> row = xwpfTable.getRows();
for (XWPFTableRow xwpfTableRow : row) {
List<XWPFTableCell> cell = xwpfTableRow.getTableCells();
for (XWPFTableCell xwpfTableCell : cell) {
if (xwpfTableCell != null) {
System.out.println(xwpfTableCell.getText());
String s = xwpfTableCell.getText();
for (XWPFParagraph p : xwpfTableCell.getParagraphs()) {
for (XWPFRun run : p.getRuns()) {
for (XWPFPicture pic : run.getEmbeddedPictures()) {
byte[] pictureData = pic.getPictureData().getData();
System.out.println("picture : " + pictureData);
}
}
}
}
}
}
}
最佳答案
我得到了这个问题的解决方案,你可以使用aspose-word java库来实现..主要方法
public static void main(String[] args) throws Exception {
// The path to the documents directory.
String dataDir = "D://test//";
// Load the documents which store the shapes we want to render.
Document doc = new Document(dataDir + "TestFile.doc");
// Retrieve the target shape from the document. In our sample document
// this is the first shape.
RenderCellToImage(dataDir, doc);
}
//RenderCellToImage
public static void RenderCellToImage(String dataDir, Document doc)
throws Exception {
Cell cell = (Cell) doc.getChild(NodeType.CELL, 0, true);
RenderNode(cell, dataDir + "TestFile.RenderCell".png",
null);
System.out.println("Cell rendered to image__successfully.");
}
}
// / <summary>
// / Renders any node in a document to the path specified using the image
// save options.
// / </summary>
// / <param name="node">The node to render.</param>
// / <param name="path">The path to save the rendered image to.</param>
// / <param name="imageOptions">The image options to use during rendering.
// This can be null.</param>
public static void RenderNode(Node node, String filePath,
ImageSaveOptions imageOptions) throws Exception {
// Run some argument checks.
if (node == null)
throw new IllegalArgumentException("Node cannot be null");
// If no image options are supplied, create default options.
if (imageOptions == null)
imageOptions = new ImageSaveOptions(FileFormatUtil.extensionToSaveFormat((filePath.split("\\.")[filePath
.split("\\.").length - 1])));
// Store the paper color to be used on the final image and change to
// transparent.
// This will cause any content around the rendered node to be removed
// later on.
Color savePaperColor = imageOptions.getPaperColor();
// imageOptions.PaperColor = Color.Transparent;
imageOptions.setPaperColor(new Color(0, 0, 0, 0));
// There a bug which affects the cache of a cloned node. To avoid this
// we instead clone the entire document including all nodes,
// find the matching node in the cloned document and render that
// instead.
Document doc = (Document) node.getDocument().deepClone(true);
node = doc.getChild(NodeType.ANY,node.getDocument().getChildNodes(NodeType.ANY, true).indexOf(node), true);
// Create a temporary shape to store the target node in. This shape will
// be rendered to retrieve
// the rendered content of the node.
Shape shape = new Shape(doc, ShapeType.TEXT_BOX);
Section parentSection = (Section) node.getAncestor(NodeType.SECTION);
// Assume that the node cannot be larger than the page in size.
shape.setWidth(parentSection.getPageSetup().getPageWidth());
shape.setHeight(parentSection.getPageSetup().getPageHeight());
shape.setFillColor(new Color(0, 0, 0, 0)); // We must make the shape and
// paper color transparent.
// Don't draw a surrounding line on the shape.
shape.setStroked(false);
// Move up through the DOM until we find node which is suitable to
// insert into a Shape (a node with a parent can contain paragraph,
// tables the same as a shape).
// Each parent node is cloned on the way up so even a descendant node
// passed to this method can be rendered.
// Since we are working with the actual nodes of the document we need to
// clone the target node into the temporary shape.
Node currentNode = node;
while (!(currentNode.getParentNode() instanceof InlineStory
|| currentNode.getParentNode() instanceof Story || currentNode
.getParentNode() instanceof ShapeBase)) {
CompositeNode parent = (CompositeNode) currentNode.getParentNode()
.deepClone(false);
currentNode = currentNode.getParentNode();
parent.appendChild(node.deepClone(true));
node = parent; // Store this new node to be inserted into the shape.
}
// We must add the shape to the document tree to have it rendered.
shape.appendChild(node.deepClone(true));
parentSection.getBody().getFirstParagraph().appendChild(shape);
// Render the shape to stream so we can take advantage of the effects of
// the ImageSaveOptions class.
// Retrieve the rendered image and remove the shape from the document.
ByteArrayOutputStream stream = new ByteArrayOutputStream();
shape.getShapeRenderer().save(stream, imageOptions);
shape.remove();
// Load the image into a new bitmap.
BufferedImage renderedImage = ImageIO.read(new ByteArrayInputStream(
stream.toByteArray()));
// Extract the actual content of the image by cropping transparent space
// around
// the rendered shape.
Rectangle cropRectangle = FindBoundingBoxAroundNode(renderedImage);
BufferedImage croppedImage = new BufferedImage(cropRectangle.width,
cropRectangle.height, BufferedImage.TYPE_INT_RGB);
// Create the final image with the proper background color.
Graphics2D g = croppedImage.createGraphics();
g.setBackground(savePaperColor);
g.clearRect(0, 0, croppedImage.getWidth(), croppedImage.getHeight());
g.drawImage(renderedImage, 0, 0, croppedImage.getWidth(),
croppedImage.getHeight(), cropRectangle.x, cropRectangle.y,
cropRectangle.x + cropRectangle.width, cropRectangle.y
+ cropRectangle.height, null);
ImageIO.write(croppedImage, "png", new File(filePath));
}
关于java - 使用java将Ms word表格的单元格转换为图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37967552/
我想标记一个字符串,例如 Best Beat Makers,以几乎类似于 NGram 的方式为每个单词生成标记,例如: IN: "Best Beat Makers" OUT: ["Best", "B
这个问题在这里已经有了答案: Is there a way to word-wrap long words in a div? (6 个答案) 关闭 7 年前。
我想编写一个 Python 代码来检查字符串是否包含类似于以下内容的内容: 'word.Word' => 将其替换为 'word.\nWord'。 smallLetter.capitalLetter
我想编写一个 Python 代码来检查字符串是否包含类似于以下内容的内容: 'word.Word' => 将其替换为 'word.\nWord'。 smallLetter.capitalLetter
我有以下正则表达式: ^--([\w|-]+) 我想匹配 --word --no-word 但不是: ---word ----word 最佳答案 将表情更改为 ^--(\w[-\w]*) 这需要在两个
在我的加载项中,我需要为每个打开的文档创建一个任务 Pane 。在加载项的启动方法中,我订阅了 ApplicationEvents4_Event.NewDocument 和 Application.D
我使用 word javascript api 开发了一个 word 插件。我的文档 .docx 文件在服务器上,我需要在加载项中单击按钮打开该 .docx 文档作为新的 Word 文档。 请指导我如
我需要在某个地方修复一些 CSS,因为我的文本没有环绕,如果它是一个非常长的单词,它会无限期地继续下去。 在大多数情况下,我在我的 CSS 文件中尝试了 word-wrap: break-word;
这个问题在这里已经有了答案: What is the difference between "word-break: break-all" versus "word-wrap: break-word
这个问题在这里已经有了答案: What is the differect between word-wrap and overflow-wrap? [duplicate] (1 个回答) Is t
问题详细描述如下: 给定两个单词(beginWord 和 endWord)和字典的单词列表,找出是否存在从 beginWord 到 endWord 的转换序列,这样: 一次只能更改一个字母 每个转换后
我以前没有使用过邮件合并字段,我发现的所有内容都要求您在能够插入合并字段之前选择一个数据源。我想要做的就是将字段放在 word 文档上,并且在代码使用它之前不要将其合并。我基本上是在创建文档模板。这在
将此代码放置在ThisDocument_Startup之外的Word文档级VSTO解决方案中的某个位置(创建带单击事件的功能区按钮): int zero = 0; int divideByZero =
有没有办法在没有加载项的情况下启动 MS Word(仅此实例)?我只能找到一种方法来完全禁用加载项。 最佳答案 来自Word command line switches documentation ,
有没有办法在没有加载项的情况下启动 MS Word(仅此实例)?我只找到一种方法来完全禁用加载项。 最佳答案 来自Word command line switches documentation ,您
当使用 URI 方案从网页上托管的 word 模板打开新文档时不起作用。 https://msdn.microsoft.com/en-us/library/office/dn906146.aspx 这
我的问题: overflow-wrap: break-word 和 word-break: break-word 有区别吗? 非重复: 这里有一些现有的问题,乍一看可能是重复的,但实际上不是。 Wha
我希望使用 WordNet 从一组基本术语中寻找相似术语的集合。 例如,单词'discouraged' - 潜在的同义词可能是:daunted, glum, deterred, pessimistic
部署 Word Add in 时,发布没有错误。复制文件后出现以下错误。 我没有太多事情要做。这是堆栈跟踪。 ************** Exception Text **************
我需要一个 Java 正则表达式来匹配除某个单词之外的任何单词,同时包含另一个单词。 例如字符串中不能包含Apple,但必须有Peach。 Apple and Peach - Not match Pe
我是一名优秀的程序员,十分优秀!