You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 11:54:05