- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在尝试使用 docx4j 将图像添加到新的 word 文档中。我从网上获取了这段代码并为我的程序修改了它,但是我收到了一个奇怪的错误,我不确定是什么原因造成的或如何调试它...
这是我的代码
private static void test()
{
WordprocessingMLPackage wordMLPackage = null;
try {
wordMLPackage = WordprocessingMLPackage.createPackage();
} catch (InvalidFormatException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
javax.swing.JOptionPane.showMessageDialog(panel, "Cannnot create package.");
}
wordMLPackage.getMainDocumentPart().addStyledParagraphOfText("Title", "Hello Word! \n\t" + "Try This!");
byte[] bytes = null;
try {
bytes = convertImageToByteArray();
} catch (FileNotFoundException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
javax.swing.JOptionPane.showMessageDialog(panel, "Image file not found.");
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
javax.swing.JOptionPane.showMessageDialog(panel, "Image file exception: " + e1.toString());
}
try {
addImageToPackage(wordMLPackage, bytes);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
javax.swing.JOptionPane.showMessageDialog(panel, "Cannot add image to package: " + e.toString());
}
try {
wordMLPackage.save(new java.io.File("HelloWord7.docx"));
} catch (Docx4JException e) {
// TODO Auto-generated catch block
e.printStackTrace();
javax.swing.JOptionPane.showMessageDialog(panel, "Cannot save image to file.");
}
}
private static void addImageToPackage(WordprocessingMLPackage wordMLPackage,
byte[] bytes) throws Exception {
BinaryPartAbstractImage imagePart =
BinaryPartAbstractImage.createImagePart(wordMLPackage, bytes);
int docPrId = 1;
int cNvPrId = 2;
Inline inline = imagePart.createImageInline("Filename hint",
"Alternative text", docPrId, cNvPrId, false);
P paragraph = addInlineImageToParagraph(inline);
wordMLPackage.getMainDocumentPart().addObject(paragraph);
}
private static P addInlineImageToParagraph(Inline inline) {
// Now add the in-line image to a paragraph
ObjectFactory factory = new ObjectFactory();
P paragraph = factory.createP();
R run = factory.createR();
paragraph.getContent().add(run);
Drawing drawing = (Drawing) factory.createDrawing();
run.getContent().add(drawing);
((org.docx4j.wml.Drawing) drawing).getAnchorOrInline().add(inline);
return paragraph;
}
private static byte[] convertImageToByteArray() throws IOException {
// get DataBufferBytes from Raster
WritableRaster raster = logo.getRaster();
DataBufferByte data = (DataBufferByte)raster.getDataBuffer();
return (data.getData());
}
我在
上收到以下错误BinaryPartAbstractImage imagePart =
BinaryPartAbstractImage.createImagePart(wordMLPackage, bytes);
返回的错误是:Docx4JException:检查图像格式时出错。
这是“ Logo ”的加载方式,
try {
BufferedImage logo = ImageIO.read(getClass().getResourceAsStream("/logo.png"));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
javax.swing.JOptionPane.showMessageDialog(panel, "Cannot load logo for word doc");
}
感谢任何帮助,谢谢
新信息
我将应用程序作为可运行的 jar 运行,但对于各种图像类型(例如 png、jpg),我收到与上述相同的错误。我尝试通过从 main() 调用 test() 在 eclipse 中运行应用程序,但应用程序卡住了,为什么?我该如何调试它?
我稍微修改了代码,我将文件传递给 createImagePart 而不是 byte[] 数组。
public static P newImage(WordprocessingMLPackage wordMLPackage, File file,
String filenameHint, String altText, int id1, int id2) throws Exception {
BinaryPartAbstractImage imagePart = BinaryPartAbstractImage.createImagePart(wordMLPackage, file);
//.createImagePart(wordMLPackage, bytes);
javax.swing.JOptionPane.showMessageDialog(panel, "Created image part");
Inline inline = imagePart.createImageInline(filenameHint, altText, id1, id2, false);
ObjectFactory factory = new ObjectFactory();
P p = factory.createP();
R run = factory.createR();
p.getContent().add(run);
Drawing drawing = (Drawing) factory.createDrawing();
run.getContent().add(drawing);
((org.docx4j.wml.Drawing) drawing).getAnchorOrInline().add(inline);
return p;
}
private static void test() throws Exception
{
File file = new File("logo.png" );
if (!file.canRead())
javax.swing.JOptionPane.showMessageDialog(panel, "Cannot read file");
if (!file.exists())
javax.swing.JOptionPane.showMessageDialog(panel, "File does not exist");
javax.swing.JOptionPane.showMessageDialog(panel, file.getAbsolutePath());
String filenameHint = null;
String altText = null;
int id1 = 0;
int id2 = 1;
P p = newImage(wordMLPackage, file, filenameHint, altText, id1, id2);
wordMLPackage.getMainDocumentPart().addObject(p);
wordMLPackage.save(new File("Example.docx"));
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
try {
wordMLPackage = WordprocessingMLPackage.createPackage();
} catch (InvalidFormatException e2) {
// TODO Auto-generated catch block
e2.printStackTrace();
javax.swing.JOptionPane.showMessageDialog(panel, "Could not create wordMLPackage: " + e2.toString());
}
new Calculator().setVisible(true);
}
});
}
最佳答案
这里有一个简单的例子,大家可以以此为基础。
import java.io.*;
import org.docx4j.dml.wordprocessingDrawing.Inline;
import org.docx4j.openpackaging.packages.WordprocessingMLPackage;
import org.docx4j.wml.*;
import org.docx4j.openpackaging.parts.WordprocessingML.BinaryPartAbstractImage;
public class Example {
public static void main(String[] args) throws Exception {
WordprocessingMLPackage wordprocessingMLPackage = WordprocessingMLPackage.createPackage();
File file = new File("C://java-duke-logo.jpg" );
InputStream inputStream = new java.io.FileInputStream(file );
long fileLength = file.length();
byte[] bytes = new byte[(int)fileLength];
int offset = 0;
int numRead = 0;
while(offset < bytes.length
&& (numRead = inputStream.read(bytes, offset, bytes.length-offset)) >= 0) {
offset += numRead;
}
inputStream.close();
String filenameHint = null;
String altText = null;
int id1 = 0;
int id2 = 1;
P p = newImage(wordprocessingMLPackage, bytes, filenameHint, altText, id1, id2);
wordprocessingMLPackage.getMainDocumentPart().addObject(p);
wordprocessingMLPackage.save(new File("C://Example.docx"));
}
public static P newImage( WordprocessingMLPackage wordMLPackage, byte[] bytes,
String filenameHint, String altText, int id1, int id2) throws Exception {
BinaryPartAbstractImage imagePart = BinaryPartAbstractImage.createImagePart(wordMLPackage, bytes);
Inline inline = imagePart.createImageInline( filenameHint, altText, id1, id2);
ObjectFactory factory = new ObjectFactory();
P p = factory.createP();
R run = factory.createR();
p.getParagraphContent().add(run);
Drawing drawing = factory.createDrawing();
run.getRunContent().add(drawing);
drawing.getAnchorOrInline().add(inline);
return p;
}
}
例子.docx:
关于java - 我正在尝试使用 docx4j 将图像添加到新的 word 文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21873479/
说真的,你怎么能在不发疯的情况下处理所有这些异常呢?我是不是读了太多关于异常处理的文章或什么?我尝试重构了几次,但每次似乎都以更糟糕的结果告终。也许我应该承认确实会发生异常(exception)情况,
背景 两者 try/rescue和 try/catch是 Elixir 中的错误处理技术。根据 corresponding chapter在介绍指南中。 Errors can be rescued u
每当我尝试在 Raspberry PI 上运行此 python 脚本时,我都会遇到问题: import socket import sys # Create a TCP/IP socket sock
我想知道一些关于 PHP 的 try , catch声明。 让我们考虑以下示例。 abstract class ExceptionA extends Exception {} class Except
我的 laravel v5.4 项目中有两个模型,user 和 admin。 在 config/auth.php 中,我向守卫和提供者添加了管理员,如下所示: 'guards' => [ 'w
try: r = requests.get(url, params={'s': thing}) except requests.ConnectionError, e: print e
我有以下代码。 但是,它并不能捕获所有错误,而我仍然会收到“throw er;//未处理的'错误'事件”。 为什么是这样? app.post('/api/properties/zip/:zip/bed
问题与细节 我正在使用自定义错误处理,遇到的错误之一是“路径中的非法字符”。我有一个自定义函数,旨在通过路径字符串查找此类非法字符,并在找到它们时引发自定义错误。但是我发现,取决于非法字符,Test-
This question already has answers here: How do I catch a numpy warning like it's an exception (not j
我正在使用其他人的代码,但我不熟悉try/catch,因此我举了一个类似的小例子。在第11行上,如果我写了error(''),似乎没有发现错误并增加了索引j。但是,编写error(' ')或error
我在我的一个程序中遇到了这个问题,在这种情况下,尝试/异常(exception)的错误使程序变得更好,以防用户意外输入了他们不应该输入的内容。它仍然给我错误,我为为什么感到困惑。如果对我的问题确实很重
我在尝试TRY ... CATCH块时遇到问题。有人可以解释为什么以下代码无法执行我的sp吗? DECLARE @Result int SET @Result = 0 BEGIN TRY SE
我有一个相当大的 powershell 脚本,其中包含许多(20 多个)执行各种操作的函数。 现在所有代码实际上都没有任何错误处理或重试功能。如果某个特定的任务/功能失败,它就会失败并继续。 我想改进
为什么我尝试时需要导入 inputmismatchException catch(InputMismatchException e){ System.out.println("
我对此感到困惑 - 我为辅助方法编写了一个 try/catch 。它的目的是捕获任何无效输入(任何不是“男性”或“女性”的内容(没有特定情况)。如果输入无效,它将通知用户,然后让他们重试。如果有效,则
我有时会发现自己处于如下场景。尽可能简单地陈述问题 “有时我会创建一段代码,Java 让我将其包含在 try/catch 语句中。我没有使用 catch,所以我将其留空。为什么这是错误的?” boo
我有点困惑为什么当我不使用 Try block 时会出现 Try block 错误。 我在代码块底部附近收到错误通知。如果我不使用 try/catch,有人可以向我解释为什么会发生这种情况吗? 它是否
我已经盯着我的电脑两个小时了,我不知道我做错了什么。谁能帮助我看到光明? package blackjack; import java.util.Random; import java.util.Sc
我想将方法保存在 Enum 中,但 Class.getDeclaredMethod 抛出 NoSuchMethodException,那么我该如何处理呢?我的代码: public enum Car
这个问题已经有答案了: Executing multi-line statements in the one-line command-line (18 个回答) 已关闭 3 年前。 如何使用try.
我是一名优秀的程序员,十分优秀!