基于java语言的word文件重构

dst_doc.appendDocument(src_doc, ImportFormatMode.KEEP_SOURCE_FORMATTING);
dst_doc.save(dst_path);

使用这种方式保存文档,发现目标文档的字体和源文档不一致,而且中文在目标文档中显示乱码
#源文档,字体为宋体,中文显示正常

#目标文档,字体为Courier New,中文显示乱码

@aspose1111 您能否在此处附上您的源文件和输出文件以进行测试? 我们将检查该问题并为您提供更多信息。 不幸的是,无法使用屏幕截图来分析问题。

源文件(35.doc)
目标文件(35_new.doc)
文件.zip (1.7 MB)

@aspose1111 看起来像是编码问题。 正如我所看到的,“35.doc”是一个带有“.doc”扩展名的简单 TXT 文档。
您能否提供用于生成有问题的“35_new.doc”文档的代码和源文档?

源码如下:

public class word_handle {
    public static void main(String[] args) throws Exception {
        System.out.println("处理消息逻辑:");
        String src_path = "D:\\35.doc";
        String dst_path = "D:\\35_new.doc";
        // 文件重构

        System.setOut(new PrintStream(System.out, true, "UTF-8"));
        com.aspose.words.License word_License = new com.aspose.words.License();
        word_License.setLicense("D:\\Aspose.license.lic");

        long startTime = System.nanoTime();

        Document src_doc = new Document(src_path);

        long endTime = System.nanoTime();
        long duration = endTime - startTime;
        System.out.println("打开源文件的时间t1:" + duration / 1000000 + " 毫秒");
        startTime = System.nanoTime();

        Document dst_doc = new Document();//新建文本

        endTime = System.nanoTime();
        duration = endTime - startTime;
        System.out.println("创建文本时间t2:" + duration / 1000000 + " 毫秒");

        startTime = System.nanoTime();

        dst_doc.appendDocument(src_doc, ImportFormatMode.KEEP_SOURCE_FORMATTING);
        dst_doc.getSections().removeAt(0);
        dst_doc.save(dst_path);



        endTime = System.nanoTime();
        duration = endTime - startTime;
        System.out.println("保存文件时间t3:" + duration / 1000000 + " 毫秒");

        System.out.println("OK");
    }
}

源文档在上面发的压缩包中(文件.zip)

@aspose1111 目标文档“35_new.doc”已包含损坏的中文字符。

是什么原因导致的?能解决吗?

@aspose1111 正如我所看到的,“35_new.doc”已由Aspose.Words生成,但不幸的是,如果没有源文档和用于生成该文档的代码,则无法确定问题的原因。

源文档在(文件.zip)压缩包中
文件.zip (630.9 KB)

代码如下

import com.aspose.words.*;
public class word_handle {
    public static void main(String[] args) throws Exception {
        System.out.println("处理消息逻辑:");
        String src_path = "D:\\无害共享传输\\C#环境\\35.doc";
        String dst_path = "D:\\无害共享传输\\C#环境\\35_new.doc";
        // 文件重构

        System.setOut(new PrintStream(System.out, true, "UTF-8"));
        com.aspose.words.License word_License = new com.aspose.words.License();
        word_License.setLicense("D:\\无害共享传输\\JAVA\\Aspose.license.lic");

        long startTime = System.nanoTime();

        Document src_doc = new Document(src_path);

        long endTime = System.nanoTime();
        long duration = endTime - startTime;
        System.out.println("打开源文件的时间t1:" + duration / 1000000 + " 毫秒");
        startTime = System.nanoTime();

        Document dst_doc = new Document();//新建文本

        endTime = System.nanoTime();
        duration = endTime - startTime;
        System.out.println("创建文本时间t2:" + duration / 1000000 + " 毫秒");

        startTime = System.nanoTime();

        dst_doc.appendDocument(src_doc, ImportFormatMode.KEEP_SOURCE_FORMATTING);
        dst_doc.getSections().removeAt(0);
        dst_doc.save(dst_path);



        endTime = System.nanoTime();
        duration = endTime - startTime;
        System.out.println("保存文件时间t3:" + duration / 1000000 + " 毫秒");

        System.out.println("OK");
    }
}

@aspose1111 不幸的是,我无法重现该问题。 我使用以下简单代码进行测试:

Document src = new Document("C:\\Temp\\35.doc");
Document dst = new Document();
dst.appendDocument(src, ImportFormatMode.KEEP_SOURCE_FORMATTING);
dst.save("C:\\Temp\\out.doc");

这是生成的输出:
out.zip (1.1 MB)

请问你用的aspose库版本是多少?

@aspose1111 我使用最新的23.9版本的Aspose.Words进行测试。

我用的是20.3版本的jar包,会不会是版本太低了?

@aspose1111 Aspose.Words 20.3版本发布已有3年多了。 从那时起,有很多修复。 您可以尝试更新到最新版本,看看问题是否仍然存在。

好的,非常感谢!!!!!!

1 Like