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

.NET MAUI Android如何从外部文件服务器获取PDF文件?

在.NET MAUI Android平板上通过iText访问SMB共享PDF的解决方案

核心问题原因

Android系统不支持直接识别Windows SMB共享的UNC路径(比如\\Path\to\File\file.pdf),所以直接将这类路径传给PdfReader会报文件未找到错误。必须通过网络协议获取文件流,再传入iText处理。

必要依赖库

需要添加SMB客户端库来访问Windows共享文件,推荐使用NuGet包 SharpCifs.Std,这是.NET平台下成熟的SMB协议实现库。

具体实现步骤

1. 安装NuGet包

在项目中安装SharpCifs.Std:

Install-Package SharpCifs.Std

或直接在NuGet包管理器中搜索安装。

2. 编写SMB流读取与PDF处理代码

通过SMB协议获取文件流,再传入PdfReader进行编辑,编辑后的文件可保存到本地或回传到共享服务器:

using SharpCifs.Smb;
using iText.Kernel.Pdf;
using System.IO;

// 配置SMB共享信息(替换为你的服务器实际参数)
string smbServerUrl = "smb://你的用户名:你的密码@服务器IP或主机名/共享文件夹名/file.pdf";
// 本地临时保存编辑后的文件路径(Android应用私有目录)
string localEditPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "edited_temp.pdf");

try
{
    // 连接SMB共享并获取PDF文件流
    using SmbFile smbPdfFile = new SmbFile(smbServerUrl);
    using Stream pdfInputStream = smbPdfFile.GetInputStream();

    // 用流初始化PdfReader,进行PDF编辑
    using PdfDocument pdfDoc = new PdfDocument(new PdfReader(pdfInputStream), new PdfWriter(localEditPath));
    // 在这里添加你的PDF编辑逻辑,例如:
    // pdfDoc.AddNewPage();
    // 其他编辑操作...
    pdfDoc.Close();

    // 可选:将编辑后的文件回传到SMB服务器
    string destSmbUrl = "smb://你的用户名:你的密码@服务器IP或主机名/共享文件夹名/edited_file.pdf";
    using SmbFile destSmbFile = new SmbFile(destSmbUrl);
    using Stream destOutputStream = destSmbFile.GetOutputStream();
    using FileStream localStream = new FileStream(localEditPath, FileMode.Open);
    localStream.CopyTo(destOutputStream);
}
catch (Exception ex)
{
    // 处理异常,比如权限问题、连接失败等
    Console.WriteLine($"操作失败:{ex.Message}");
}

3. 配置Android权限

在Platforms/Android/AndroidManifest.xml中添加网络访问权限:

<uses-permission android:name="android.permission.INTERNET" />

如果服务器使用非标准端口或需要额外权限,可根据实际情况补充配置。

替代方案

如果不想依赖SMB库,还有两种可选思路:

  • 先下载到本地:若共享文件可通过HTTP访问,用HttpClient将PDF下载到Android应用的私有目录,再用iText处理,编辑后再上传回服务器。
  • 系统文件选择器:使用MAUI的FilePicker让用户手动选择已挂载的SMB共享文件,这种方式依赖Android系统对SMB的原生支持,部分设备可能需要用户先手动挂载共享文件夹。

关键注意事项

  • 如果SMB共享不需要密码,可简化SMB URL为smb://服务器IP或主机名/共享文件夹名/file.pdf。
  • Android 10+需注意网络安全配置,若服务器使用未加密的SMB协议,可能需要在res/xml/network_security_config.xml中允许访问对应IP。

内容的提问来源于stack exchange,提问作者ItsProbablySomethingStupid

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 19:15:50