使用 Aspose.Words 在 Java 中复制 Word 宏

又一个月,又一个功能丰富的版本! Aspose.Words for Java 19.12 已经推出了一系列有用的功能、增强功能和错误修复。使用最新版本,您将能够通过克隆 Java 中的 VBA 模块或 VBA 项目将 Word 宏从一个文档复制到另一个文档。此外,我们还添加了对 PDF 1.7 标准的支持,用于 Word 到 PDF 的转换。此外,最新版本的 Aspose.Words for Java 能够扫描 Windows 10 中用户安装的字体以查找字体源。因此,让我们更详细地了解这些有用的功能。

在 Java 中将 VBA 宏从一个 Word 文档复制到其他文档

Word 文档中的宏是用 VBA(Visual Basic for Applications)编写的,用于自动执行常用任务。 MS Word 宏包含一组代码语句,这些语句在单击工具栏中的特定按钮或按下组合键时执行。

在 Aspose.Words for Java 上一版本 中,我们引入了在 Word 文档中为 VBA 项目或 VBA 模块添加宏的功能。但是,当您需要克隆 VBA 模块或整个 VBA 项目以以编程方式将 Word 宏从一个文档复制到另一个文档时,可能会出现这种情况。为了使它成为可能,我们在 VABModuleVBAProject 类中添加了 deepClone() 方法,以从特定的 VBA 模块或项目中复制 Word 宏。

现在让我们看看如何在 Java 中使用 Aspose.Words for Java 将 Word 宏从一个文档复制到另一个文档。

克隆 VBA 模块

以下 Java 代码示例显示了如何通过克隆 Word 文档中的特定 VBA 模块来复制宏。

Document doc = new Document(dataDir + "test.docm");
      VbaProject project = doc.getVbaProject();

      Document destDoc = new Document();

      destDoc.setVbaProject(new VbaProject());

      // 克隆单个模块。
      VbaModule copyModule = doc.getVbaProject().getModules().get("Module1").deepClone();
      destDoc.getVbaProject().getModules().add(copyModule);

      destDoc.save(dataDir + "output.docm");

克隆 VBA 项目

以下 Java 代码示例显示了如何通过在 Word 文档中克隆完整的 VBA 项目来复制宏。

Document doc = new Document(dataDir + "test.docm");
VbaProject project = doc.getVbaProject();

Document destDoc = new Document();

// 克隆整个项目。
destDoc.setVbaProject(doc.getVbaProject().deepClone());

destDoc.save(dataDir + "output.docm");

在 Java 中将 Word 转换为 PDF 1.7 标准

PDF 文档可能符合各种标准或 PDF 规范的版本。 PDF 1.7 是 PDF 规范的第六版,它包含了一些仅由 Adobe 定义的专有技术。 Aspose.Words for Java 已经支持 Word 到 PDF 转换,但是,我们已经扩展了此支持,现在您可以将 Word 文档转换为 PDF 1.7。为此,我们在 PdfCompliance 枚举中添加了 PDF17 选项。

以下 Java 代码示例显示了如何通过指定 PdfCompliance 将 Word 转换为 PDF。

// 如需完整的示例和数据文件,请访问 // https://github.com/aspose-words/Aspose.Words-for-Java
// 文档目录的路径。
Document originalDoc = new Document(dataDir + "Document.docx");

// 为 PDF17 提供 PDFSaveOption 合规性
// 或者只是在没有 SaveOptions 的情况下进行转换
PdfSaveOptions pso = new PdfSaveOptions();
pso.setCompliance(PdfCompliance.PDF_17);

originalDoc.save(dataDir + "Output.pdf", pso);

在 Windows 10 上为 SystemFontSource 使用用户安装的字体

在 Aspose.Words for Java 的早期版本中,API 用于仅扫描 SystemFontSource 的系统安装字体。这种方法不适合 Windows 10,其中字体可能安装到所有用户的系统文件夹“%windir%\fonts”或用户文件夹“%userprofile%\AppData\Local\Microsoft \Windows\Fonts" 为当前用户。我们增强了这个功能,现在 Aspose.Words for Java 也可以扫描用户安装的字体。

新的查找和替换选项 {#Aspose.Words for Java19.12ReleaseNotes-AddedanewFindReplaceOptions.UseLegacyOrderoption}

Aspose.Words for Java 提供 查找和替换 选项来替换 Word 文档中所需的单词或短语。在 API 的早期版本中,查找/替换功能用于将文本框与文档内容分开分析。此行为是根据 MS Word 的行为设计的,但是,您可能需要按顺序查找和替换内容,包括文本框中的文本。对于这种情况,我们在 FindReplaceOptions 类中引入了一个新选项,即 UseLegacyOrder。以下 Java 代码示例显示了在 Word 文档中查找和替换文本时如何使用此选项。

public static void FineReplaceUsingLegacyOrder(String dataDir) throws Exception
{
    // 打开文档。
    Document doc = new Document(dataDir + "source.docx");
    FindReplaceOptions options = new FindReplaceOptions();
    options.setReplacingCallback(new ReplacingCallback());
    options.setUseLegacyOrder(true);

    doc.getRange().replace(Pattern.compile("\\[(.*?)\\]"), "", options);

    dataDir = dataDir + "usingLegacyOrder_out.doc";
    doc.save(dataDir);
}

private static class ReplacingCallback implements IReplacingCallback
{
    public int replacing(ReplacingArgs args) {
    	System.out.print(args.getMatch().group());
        return ReplaceAction.REPLACE;
    }
}

好吧,这是我们在最新版本中添加的一些重要功能的简要概述。您可以查看 发行说明 中的功能和错误修复的完整列表。您可以下载 最新版本并自行评估新功能。有关任何功能的更多详细信息,您可以查阅 API 的 文档 并通过我们的 论坛 联系我们。