iText 7.7.1.16初始化PdfDocument时报Cannot open pdf document错误
问题根因
- 你遇到的报错本质是iText 7 v7.7.1.16强依赖的Common.Logging程序集加载失败,和PDF文件本身的权限、完整性无关。
- iText 7该版本编译时强绑定了
Common.Logging 3.4.1.0版本,即使你项目中已经添加了Common.Logging引用,只要出现以下任意一种情况都会触发加载失败:- 引用的Common.Logging版本和3.4.1.0不匹配,且没有配置程序集绑定重定向
- 引用的Common.Logging的签名PublicKeyToken和要求的
af08829b84f0328e不一致 - 项目目标平台和Common.Logging、iText 7的编译平台不匹配(比如项目设为32位但引用了64位的程序集)
解决方案
方案1:匹配Common.Logging版本+配置绑定重定向
如果你的项目没有特殊的Common.Logging版本要求,直接通过NuGet安装3.4.1版本的Common.Logging即可直接解决问题。
如果必须使用其他版本的Common.Logging,在项目配置文件(桌面项目为App.config,Web项目为Web.config)的<runtime>节点下添加程序集绑定重定向规则:
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <dependentAssembly> <assemblyIdentity name="Common.Logging" publicKeyToken="af08829b84f0328e" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-9.9.9.9" newVersion="你项目实际引用的Common.Logging版本号" /> </dependentAssembly> </assemblyBinding>
方案2:检查程序集平台一致性
打开项目属性→「生成」选项卡,确认「平台目标」设置和你引用的iText 7、Common.Logging的编译平台一致:
- 优先设置为
Any CPU,取消不必要的「首选32位」勾选 - 如果必须指定x86/x64平台,确保所有依赖的程序集都对应对应平台版本
方案3:验证程序集签名
打开Visual Studio开发者命令提示符,执行命令sn -T 你本地引用的Common.Logging.dll文件路径,确认输出的公钥令牌和报错中的af08829b84f0328e一致,若不一致替换为对应签名的Common.Logging版本即可。
内容的提问来源于stack exchange,提问作者Lab Lsr
相关产品推荐
相关产品推荐

