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

fo-dicom 4.0.7环境下SCP打印生成的DICOM文件无法打开如何解决

fo-dicom打印环节DICOM文件无法打开修复方案

核心问题原因

  • 直接通过BasicFilmBox构造的DicomFile不符合DICOM存储标准:BasicFilmBox是DICOM打印服务的排版实例,仅包含打印参数,缺少影像存储必备的SOP类声明、传输语法定义、像素元数据、患者/检查层级的必选标签,DICOM阅读器无法正常解析。
  • XPS打印输出的文件并非DICOM格式:调用Microsoft XPS Document Writer生成的是XPS文档,仅修改后缀为.dcm无法转换为DICOM格式,这部分逻辑完全不符合需求。
  • 部分保存文件缺少标准后缀:第一个保存逻辑没有给文件名添加.dcm后缀,部分系统和阅读器无法识别该文件为DICOM格式。

修复代码示例

string receivingFolder = Path.Combine(Environment.CurrentDirectory, "PrintJobs");
string dir = Path.Combine(receivingFolder, DateTime.Now.ToString("yyyyddMM HHmmss"));
Directory.CreateDirectory(dir);

DicomFile file;
foreach (var box in filmSession.BasicFilmBoxes)
{
    file = new DicomFile(box);
    // 补充DICOM存储必备元数据,根据实际影像类型替换SOP类UID
    file.Dataset.AddOrUpdate(DicomTag.SOPClassUID, DicomUID.CTImageStorage); 
    file.FileMetaInfo.TransferSyntax = DicomTransferSyntax.ExplicitVRLittleEndian;
    // 按需补充从原始影像继承的必选标签,示例如下
    file.Dataset.AddOrUpdate(DicomTag.PatientName, "患者姓名");
    file.Dataset.AddOrUpdate(DicomTag.PatientID, "患者ID");
    file.Dataset.AddOrUpdate(DicomTag.StudyInstanceUID, DicomUID.Generate());
    file.Dataset.AddOrUpdate(DicomTag.SeriesInstanceUID, DicomUID.Generate());
    
    string filename = Path.Combine(dir, $"{box.SOPInstanceUID.UID}.dcm");
    file.Save(filename);
    
    // 可添加本地验证逻辑,确认文件可正常解析
    try
    {
        var verifyFile = DicomFile.Open(filename);
    }
    catch(Exception ex)
    {
        // 处理解析失败逻辑
    }
}

注意事项

  • 如果你需要保存的是打印渲染后的影像,需要先将BasicFilmBox对应的排版内容渲染为像素数据,再写入到DicomFile的PixelData标签中,否则文件仅包含排版参数无实际影像内容。
  • 实际使用时需要将示例中的固定患者/检查标签替换为从原始影像中读取的对应数据,保证DICOM信息一致性。

内容的提问来源于stack exchange,提问作者Jardel C. Oliveira

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 09:48:04