将 Docx 文件转换为图像
Posted
技术标签:
【中文标题】将 Docx 文件转换为图像【英文标题】:Convert a Docx file into Images 【发布时间】:2014-10-08 04:23:05 【问题描述】:我要将 Word 文档 (.docx) 转换为图像,所以我使用 aspose.word.jar! 问题是我是这项工作的新手,并且使用我的代码出现错误。我的代码部分是:
public class NewClass
public static void main(String[] args)
new NewClass().generateImages("D:\\Net Beans Work Space\\Text to Image\\Doc1.docx");
public void generateImages(final String sourcePath)
try
Document doc = new Document(sourcePath);
ImageSaveOptions options = new ImageSaveOptions(SaveFormat.JPEG);
options.setJpegQuality(100);
options.setResolution(100);
for (int i = 0; i < doc.getPageCount(); i++)
String imageFilePath = sourcePath + "_output_" + i + ".jpeg";
options.setPageIndex(i);
doc.save(imageFilePath, options);
catch (Exception e)
e.printStackTrace();
好吧,我是新手,所以我在线获取了此代码部分并根据我的要求对其进行编辑! 问题出在打印堆栈跟踪中! 我已经用谷歌搜索了几个小时,但没有得到任何解决方案,以前有人可以完成这项工作! 是不是我做错了,谁能帮帮我!
java.lang.NullPointerException
at asposewobfuscated.hh.a(GdiRenderer.java:176) at asposewobfuscated.hh.a(GdiRenderer.java:176)
at asposewobfuscated.s.a(ApsGlyphs.java:48)
at asposewobfuscated.p.a(ApsCompositeNode.java:22)
at asposewobfuscated.m.a(ApsCanvas.java:18)
at asposewobfuscated.p.a(ApsCompositeNode.java:22)
at asposewobfuscated.m.a(ApsCanvas.java:18)
at asposewobfuscated.p.a(ApsCompositeNode.java:22)
at asposewobfuscated.m.a(ApsCanvas.java:18)
at asposewobfuscated.p.a(ApsCompositeNode.java:22)
at asposewobfuscated.z.a(ApsPage.java:75)
at asposewobfuscated.p.a(ApsCompositeNode.java:22)
at asposewobfuscated.m.a(ApsCanvas.java:18)
at asposewobfuscated.hh.a(GdiRenderer.java:49)
at com.aspose.words.apd.a(SaveToImageHelper.java:129)
at com.aspose.words.apd.a(SaveToImageHelper.java:94)
at com.aspose.words.apd.a(SaveToImageHelper.java:71)
at com.aspose.words.uz.F(ImagingWriter.java:79)
at com.aspose.words.uz.a(ImagingWriter.java:38)
at com.aspose.words.Document.a(Document.java:1345)
at com.aspose.words.Document.save(Document.java:738)
at NewClass.generateImages(NewClass.java:31)
at NewClass.main(NewClass.java:18)
java.lang.NullPointerException
at asposewobfuscated.hh.a(GdiRenderer.java:176)
at asposewobfuscated.s.a(ApsGlyphs.java:48)
at asposewobfuscated.p.a(ApsCompositeNode.java:22)
at asposewobfuscated.m.a(ApsCanvas.java:18)
at asposewobfuscated.p.a(ApsCompositeNode.java:22)
at asposewobfuscated.m.a(ApsCanvas.java:18)
at asposewobfuscated.p.a(ApsCompositeNode.java:22)
at asposewobfuscated.m.a(ApsCanvas.java:18)
at asposewobfuscated.p.a(ApsCompositeNode.java:22)
at asposewobfuscated.z.a(ApsPage.java:75)
at asposewobfuscated.p.a(ApsCompositeNode.java:22)
at asposewobfuscated.m.a(ApsCanvas.java:18)
at asposewobfuscated.hh.a(GdiRenderer.java:49)
at com.aspose.words.apd.a(SaveToImageHelper.java:129)
at com.aspose.words.apd.a(SaveToImageHelper.java:94)
at com.aspose.words.apd.a(SaveToImageHelper.java:71)
at com.aspose.words.uz.F(ImagingWriter.java:79)
at com.aspose.words.uz.a(ImagingWriter.java:38)
at com.aspose.words.Document.a(Document.java:1345)
at com.aspose.words.Document.save(Document.java:738)
at NewClass.generateImages(NewClass.java:31)
at NewClass.main(NewClass.java:18)
BUILD SUCCESSFUL (total time: 9 seconds)
【问题讨论】:
您可以查看 apache POI (poi.apache.org) 将 docx 转换为 PDF。然后您可以使用 apache PDF 框将 PDF 转换为图像:pdfbox.apache.org 但是如何将表格和数字转换为图像? 从PDF转图片,可以使用ImageWriter:pdfbox.apache.org/docs/1.8.3/javadocs/org/apache/pdfbox/util/… 好的,我正在努力研究它 为 @Athanor 的想法戴上帽子 【参考方案1】:我已经测试了您的代码,它对我来说运行良好。请确保您使用的是最新版本的Aspose.Words for Java。
如果问题仍然存在,请分享您尝试转换的 word 文档。您还可以使用我们的support forums 安全地上传您的文件。
披露:我是 Aspose 的开发人员。
【讨论】:
所以我可以在哪里获得 aspose.words.jar 文件,我认为我的 jar 文件有一些问题 访问Aspose.Words for Java下载最新版本。这是直接链接maven.aspose.com/repository/repo/com/aspose/aspose-words/14.7.0/…。 saqib 它说只评估目的是什么意思? 如果您没有申请许可证,Aspose.Words for Java 将在评估模式下运行。您可以buy 或请求free temporary license。查看our documentation 了解如何申请许可证。【参考方案2】:由于 docx 只是一种 zip 格式,您可以使用 Zip FileSystem 将图像文件复制到外部。
URI docxUri = file.toURI();
docxUri = new URI("jar:" + docxUri.toString()); // "jar:file://..."
final Path targetDirPath = Paths.get("C:/test");
Files.createDirectories(targetDirPath);
Map<String, String> zipProperties = new HashMap<>();
zipProperties.put("encoding", "UTF-8");
try (FileSystem zipFS = FileSystems.newFileSystem(docxUri,
zipProperties))
Path mediaPath = zipFS.getPath("/word/media");
Files.walkFileTree(mediaPath, new SimpleFileVisitor<Path>()
@Override
public FileVisitResult visitFile(Path path,
BasicFileAttributes attributes) throws IOException
String name = path.getFileName().toString();
Path imgPath = Paths.get(targetDirPath.toString(), name);
Files.copy(path, imgPath, StandardCopyOption.REPLACE_EXISTING);
return super.visitFile(path, attributes);
);
这会复制压缩文件夹/word/media
中的所有媒体文件。
当然,您没有元数据,也没有关联图像文件的上下文。但它是文件的一个很好的用法。
【讨论】:
我认为 docx 扩展名代表 MS Word 2007,那么这段代码是用于将 MS Word 文档转换为图像吗? docx 是 MS Word 的“开放格式”。 docx、xlsx 基本上是 zip 档案,其中包含用于内容和样式的 XML,以及用于图像的图像文件。如果您将 docx 重命名为 .zip,您会看到自己。所以我想提一个纯标准java的解决方案。 zip 文件系统也很棒。 没有反对 Aspose。【参考方案3】:代码没问题 但是如何将 .docx 文件作为用户的输入。
代码本身已经预定义了要转换的doc文件的路径
应该对代码进行哪些更改,以便应用程序可以从用户那里获取文档文件,然后生成其图像
我的班级:
import com.aspose.words.Document;
import com.aspose.words.ImageSaveOptions;
import com.aspose.words.SaveFormat;
/**
* Created by white
*/
public class Program
public static void main(String args[]) throws Exception
new Program().generateImages("E:\\pro2\\Document.docx");
public void generateImages(final String sourcePath)
try
Document doc = new Document(sourcePath);
ImageSaveOptions options = new ImageSaveOptions(SaveFormat.JPEG);
options.setJpegQuality(100);
options.setResolution(100);
for (int i = 0; i < doc.getPageCount(); i++)
String imageFilePath = sourcePath + "_output_" + i + ".jpg";
options.setPageIndex(i);
doc.save(imageFilePath, options);
catch (Exception e)
e.printStackTrace();
【讨论】:
以上是关于将 Docx 文件转换为图像的主要内容,如果未能解决你的问题,请参考以下文章
将 docx 转换为 mediawiki 并保留 [[Image:]]
使用Docx4j和PdfBox将Docx转换为图像会导致OutOfMemoryError