我一直在研究使用 MOSS 2007 将 docx 文件转换为 pdf 文件的文档转换功能。在 ItemAdded 事件中进行了 SPFile.Convert() 调用,并且 ItemFileConverted 事件也被很好地触发了。事件似乎工作正常,但转换过程并不总是设置转换后的 SPFile 实例的 IsConvertedFile 和 SourceLeafName 属性。这就是我试图用来确定是否应该调用 SPFile.Convert 的方法。
在深入研究 SPFile IsConvertedFile、GeneratingConverterId 和 SourceLeafName 属性的代码时,似乎这些是基于 SPFile.Properties “vti_dttransformerid”和“vti_dtparentleafname”的。问题是,每当我的 ISPConversionProcessor.PostProcess() 实现中有代码时,这两个属性的设置并不一致,我希望在其中对文件进行一些后处理。如果 PostProcess 方法中没有代码(只有 runDefaultPostProcessing = true; 语句),则属性设置更加一致。
我在 Wiki 页面中有一些关于正在发生的事情的其他详细信息,但是使用 .NET Reflector 来确定这些字段的更新位置是在 OWSTIMER.EXE 的一堵墙(我可以找到属性的所有读取,但是甚至 HtmlLauncher 和 LoadBalancer 服务也没有提到这些属性)。
有没有人完成了完整的文档转换实现并成功使用了 SPFile.IsConvertedFile 和 SPFile.SourceLeafName 属性?