Xamarin Android应用写入PDF文件时如何设置合法URI?
问题原因
Invalid URI: The format of the URI could not be determined.报错和你输出PDF的存储路径无关,问题出在HtmlConverter(通常为iText的HTML转PDF组件)解析HTML内容时,检测到HTML内存在相对路径引用的外部资源(如图片、样式表、字体等),但没有提供基准URI用于拼接完整的资源访问路径,因此抛出URI格式校验错误。你考虑的添加file://协议前缀的思路方向正确,但该前缀不需要加在PDF输出路径上,而是要为转换过程指定资源基准URI。
修复方案
你需要在转换时传入ConverterProperties配置对象,明确指定基准URI:
try { string strCPP; using (StreamReader reader = new StreamReader(Application.Context.Assets.Open("CPP.html"), true)) { strCPP = reader.ReadToEnd(); } // 获取PDF输出路径,建议用AbsolutePath避免路径格式异常 string pathPDF = Path.Combine(Android.App.Application.Context.GetExternalFilesDir(null).AbsolutePath, "CPP.pdf"); // 核心配置:添加转换属性 ConverterProperties properties = new ConverterProperties(); // 如果HTML资源存放在应用Assets目录下,直接用Android系统默认的Assets基准路径 properties.SetBaseUri("file:///android_asset/"); // 如果资源存放在其他本地目录,按如下格式配置即可:properties.SetBaseUri($"file://{你的资源目录完整路径}/"); using (FileStream fs = new FileStream(pathPDF, FileMode.Create)) { HtmlConverter.ConvertToPdf(strCPP, fs, properties); } } catch(Exception ex) { // 建议此处添加日志输出,方便排查其他异常 }
注意事项
- 如果你的HTML内容完全不包含任何外部资源引用,仍然出现该报错,请检查HTML代码中是否存在
src、href属性为空,或者填写了不符合URI规范的字符串的情况 - 不要用
ToString()方法获取Android目录路径,改用AbsolutePath属性,避免部分系统返回的路径携带多余标识导致路径拼接错误
内容的提问来源于stack exchange,提问作者luigivampa
相关产品推荐
相关产品推荐

