我遇到一个问题,其中.doc和.pdf文件正常,但.docx文件出现损坏。
为了解决这个问题,我试图调试为什么.docx已损坏。
我了解到docx格式在额外字符方面要比.pdf或.doc严格得多。因此,我搜索了docx文件中的各种xml文件,查找无效的XML。但我找不到任何东西。这一切都很好。
有人可以建议我立即进行调查吗?
更新
文件夹中文件的完整列表如下:
/_rels
.rels
/customXml
/_rels
.rels
item1.xml
itemProps1.xml
/docProps
app.xml
core.xml
/word
/_rels
document.xml.rels
/media
image1.jpeg
/theme
theme1.xml
document.xml
fontTable.xml
numbering.xml
settings.xml
styles.xml
stylesWithEffects.xml
webSettings.xml
[Content_Types].xml
更新2:
我还应该提到腐败的原因几乎肯定是代表我的一个糟糕的二进制文件POST。
why are docx files corrupted by binary post, but .doc and .pdf are fine?
更新3:
我已经尝试了各种docx修复工具的演示。他们似乎都修复了文件,但没有提供错误原因的线索。
我的下一步是检查已修复版本的损坏文件的内容。
如果有人知道docx修复工具提供了一个体面的错误消息,我会很感激听到它。事实上,我可能会将其作为一个单独的问题发布。
更新4(2017)
我从未解决过这个问题。我已经尝试了下面答案中建议的所有工具,但它们都不适用于我。
自从Sublime Text中打开.docx后,我进一步发展并发现0000
块丢失了。有关此问题的更多详细信息:What could be causing this corruption in .docx files during httpwebrequest?
答案 0 :(得分:4)
我使用“Open XML SDK 2.5 Productivity Tool”(http://www.microsoft.com/en-us/download/details.aspx?id=30425)来查找超链接引用损坏的问题。
您必须先下载/安装SDK,然后再使用该工具。该工具将打开并分析文档以查找问题。
答案 1 :(得分:3)
通常,当特定XML文件出错时,Word会告诉您错误发生在哪个文件行。所以我认为问题来自文件的压缩,或文件夹结构。
以下是Word文件的文件夹结构:
.docx
格式是一个压缩文件,其中包含以下文件夹:
+--docProps
| + app.xml
| \ core.xml
+ res.log
+--word //this folder contains most of the files that control the content of the document
| + document.xml //Is the actual content of the document
| + endnotes.xml
| + fontTable.xml
| + footer1.xml //Containst the elements in the footer of the document
| + footnotes.xml
| +--media //This folder contains all images embedded in the word
| | \ image1.jpeg
| + settings.xml
| + styles.xml
| + stylesWithEffects.xml
| +--theme
| | \ theme1.xml
| + webSettings.xml
| \--_rels
| \ document.xml.rels //this document tells word where the images are situated
+ [Content_Types].xml
\--_rels
\ .rels
似乎你只有word文件夹里面的内容,不是吗?如果这不起作用,您可以发送损坏的Docx或在您的zip中发布文件夹的结构吗?
答案 2 :(得分:2)
很晚很多年了,但我发现这对我有用。 (来自https://msdn.microsoft.com/en-us/library/office/bb497334.aspx)
(wordDoc是WordprocessingDocument
)
using DocumentFormat.OpenXml.Validation;
try
{
var validator = new OpenXmlValidator();
var count = 0;
foreach (var error in validator.Validate(wordDoc))
{
count++;
Console.WriteLine("Error " + count);
Console.WriteLine("Description: " + error.Description);
Console.WriteLine("ErrorType: " + error.ErrorType);
Console.WriteLine("Node: " + error.Node);
Console.WriteLine("Path: " + error.Path.XPath);
Console.WriteLine("Part: " + error.Part.Uri);
Console.WriteLine("-------------------------------------------");
}
Console.WriteLine("count={0}", count);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
答案 3 :(得分:-3)
web docx验证器为我工作:http://ucd.eeonline.org/validator/index.php