try
{
License license = new License();
license.setLicense("C:\\Users\\zzz\\Documents\\Aspose.license.lic");
Document dstdoc = new Document();
dstdoc.save("C:\\Users\\lvqingsong\\Desktop\\touchNew.doc");
List<String> fileNames = new ArrayList<>();
fileNames.add("C:\\Users\\lvqingsong\\Desktop\\DM-SSW.doc");
Document output = new Document();
// Remove all content from the destination document before appending.
output.removeAllChildren();
for (String fileName : fileNames)
{
Document input = new Document(fileName);
// Append the source document to the end of the destination document.
output.appendDocument(input, ImportFormatMode.KEEP_SOURCE_FORMATTING);
}
output.save("C:\\Users\\lvqingsong\\Desktop\\DM-SSWOutput.doc");
System.out.println("OK");
}
catch (Exception e)
{
// 处理异常
e.printStackTrace();
}
代码如上,源文档合并到空白文档发生细小变化
src
dst
@asd7927920 您能否在此处附上您的输入、输出和预期输出文档以进行测试? 我们将检查该问题并为您提供更多信息。
使用最新版本的 Aspose.Words,您可以使用 Merger 类来合并文档。
String[] documents = new String[] {"in1.docx","in2.docx","in3.docx"};
Merger.merge("out.docx", documents, SaveFormat.DOCX, MergeFormatMode.KEEP_SOURCE_FORMATTING);
@asd7927920 出现此问题的原因是您从头开始创建目标文档,并且它具有与源文档不同的兼容性选项。 请尝试克隆源文档,而不是从头开始创建它:
Document src = new Document("C:\\Temp\\src.doc");
// Clone source document instead of creating it from scratch.
Document dst = (Document)src.deepClone(false);
dst.appendDocument(src, ImportFormatMode.KEEP_SOURCE_FORMATTING);
dst.save("C:\\Temp\\out.doc");
上述方法能做到完全还原,但是如何能将word中宏病毒过滤,我在直接使用重头创建目标文档的方法,然后追加是可以过滤word中的宏病毒
要实现保留文档的原有格式样式,对文档的内容进行复制粘贴,以确保过滤宏病毒。
@asd7927920 您可以使用以下代码从文档中删除宏:
Document doc = new Document("C:\\Temp\\src.doc");
doc.removeMacros();
doc.save("C:\\Temp\\out_without_macros.doc");
这个方法智能过滤文件本地宏病毒,无法过滤文件中远程宏病毒,使用 C# 比较两个文档 官网上在线合并两个文件,输出文件格式和预期是一致的,但是在本地使用相同代码合并后文件格式还是有所差异,是什么原因,本地使用aspose-words-20.2-java
@asd7927920 正如我所提到的,出现问题的原因是目标文档和源文档具有不同的兼容性选项。 这会导致输出文档的布局差异。 如果您的目标只是从文档中删除宏,请使用上面建议的方法。
目前的疑惑是为什么官网的在线合并出输出文档符合预期,而本地代码输出的文档不符合预期,在线示例代码和本地是相同的
@asd7927920 看起来应用程序页面上提供的代码已过时,它实际上克隆源文档并将其用作合并目标。
void PrintCompatibilityOptions(CompatibilityOptions options_src, CompatibilityOptions options_dst)
{
SortedSet<string> optionNames2 = new SortedSet<string>();
foreach (System.ComponentModel.PropertyDescriptor descriptor in System.ComponentModel.TypeDescriptor.GetProperties(options_dst))
{
if (descriptor.PropertyType == Type.GetType("System.Boolean"))
{
optionNames2.Add(descriptor.Name);
descriptor.SetValue(options_dst, false);
}
}
Console.WriteLine($"not modify --------------------------------------------");
foreach (string s in optionNames2)
{
Console.WriteLine($"\t\t{s}");
}
for (int i = 1; i >= 0; i--)
{
Console.WriteLine(Convert.ToBoolean(i) ? "\tEnabled options:" : "\tDisabled options:");
SortedSet<string> optionNames = new SortedSet<string>();
SortedSet<string> optionNames1 = new SortedSet<string>();
//SortedSet<int> optionvalues = new SortedSet<int>();
foreach (System.ComponentModel.PropertyDescriptor descriptor in System.ComponentModel.TypeDescriptor.GetProperties(options_src))
{
if (descriptor.PropertyType == Type.GetType("System.Boolean") && i == Convert.ToInt32(descriptor.GetValue(options_src)))
{
optionNames.Add(descriptor.Name);
if(i == 1)
{
descriptor.SetValue(options_dst, true);
}
else
{
descriptor.SetValue(options_dst, false);
}
}
}
Console.WriteLine("\n input Default optimization settings:");
foreach (string s in optionNames)
{
Console.WriteLine($"\t\t{s}");
}
foreach (System.ComponentModel.PropertyDescriptor descriptor in System.ComponentModel.TypeDescriptor.GetProperties(options_dst))
{
if (descriptor.PropertyType == Type.GetType("System.Boolean") && i == Convert.ToInt32(descriptor.GetValue(options_dst)))
{
optionNames1.Add(descriptor.Name);
}
}
Console.WriteLine("\n output Default optimization settings:");
foreach (string s in optionNames1)
{
Console.WriteLine($"\t\t{s}");
}
}
}
上述是通过复制兼容性选项。为啥word表格还会不一致
file.zip (76.3 KB)
@asd7927920 区别在于 Document.JustificationMode
,在源文档中它设置为 JustificationMode.Compress
,而在目标文档中它设置为 JustificationMode.Expand
。 这会导致文本换行的差异。
使用上述方法后发现小标题还是存在不一致情况,这个如何处理企业微信截图_16929264255646.png (369.5 KB)
企业微信截图_16929264545040.png (363.3 KB)
@asd7927920 您能否附上一份简化的文档,以便我们重现该问题? 我在您之前附上的文件中没有看到此类列表。
file.zip (55.8 KB)
上述是源文件与目标文件3.3.1章节转换异常
@asd7927920 出现此问题的原因是文档具有不同的默认制表位值。 您可以使用如下代码进行检查:
Document src = new Document(@"C:\Temp\src_0730.doc");
Document dst = new Document(@"C:\Temp\dst_0730.doc");
Console.WriteLine(src.DefaultTabStop);
Console.WriteLine(dst.DefaultTabStop);
如果指定相同的默认制表位值,列表看起来是正确的:
Document src = new Document(@"C:\Temp\src_0730.doc");
Document dst = new Document(@"C:\Temp\dst_0730.doc");
dst.DefaultTabStop = src.DefaultTabStop;
dst.Save(@"C:\Temp\out.doc");
java版本有什么方法能够复制源文档中所有内容并粘贴到新文档吗,使用ImportFormatMode.KEEP_SOURCE_FORMATTING并不能完全一致