续上篇 dcm影像中的胶片打印模块的介绍使用-----echo服务_小雷踩坑记的博客-CSDN博客
二. 胶片打印模块
(1)跟上一篇一样,创建一个胶片打印机ApplicationEntity(scp) 和本地客户端 scu
这里就不细说了
(2)设置AAssociateRQ
AAssociateRQ rq = new AAssociateRQ(); final String printManagementSOPClass = printOptions.isColorPrint() ? TCloudDicomUID.BasicColorPrintManagementMetaSOPClass : TCloudDicomUID.BasicGrayscalePrintManagementMetaSOPClass; rq.addPresentationContext(new PresentationContext(1, printManagementSOPClass, TCloudDicomUID.ImplicitVRLittleEndian));
这个其实是在 PresentationContext 里面设置打印是哪种打印服务
/** Basic Color Print Management Meta SOP Class, */ public static final String BasicColorPrintManagementMetaSOPClass = "1.2.840.10008.5.1.1.18";
/** Basic Grayscale Print Management Meta SOP Class, */ public static final String BasicGrayscalePrintManagementMetaSOPClass = "1.2.840.10008.5.1.1.9";
MetaSOPClass,是一系列SOP Class的集合,具体参见 Meta SOP Class Definitions,Meta SOP Class中最常见的就是两种具体打印服务,即Basic Grayscale Print Management Meta SOP Class和Basic Color Print Management Meta SOP Class
在AAssociateRQ主要是通过addPresentationContext方法添加上下文信息.
(3) AAssociateRQ链接scp和scu
Association as = ae.connect(remoteAE, rq);
源码是scoket链接,上一篇已经提过了
(4) 链接好了之后,需要告诉打印机这个胶片的一些基础的信息,比如胶片的尺寸什么
首先这些基础信息需要塞到哪里,
信息集合应该被放在哪里,才能被传过去呢?上面确定了是什么打印服务,就往里面添加具体信息
(这个是其他博客的图,我贴过来了,原文在 DICOM协议中的UID详解_51CTO博客_dicom uid)
这些信息比如
Tag.FilmOrientation
Tag.MagnificationType
Tag.BorderDensity...
这些字段的信息还是通过Attributes来设置对应的tag值
filmBoxAttrs.setString(Tag.FilmOrientation, VR.CS, printOptions.getFilmOrientation());
注意一下,需要设置的有胶片基础属性(对应的分数等),胶片边框属性,胶片的图像属性,整体的结构如下,都是通过 Association 的 FutureDimseRSP 来代表一个部分,就是上文dicom中所说的一个BasicFilmSessionSOPClass.
as.ncreate(printManagementSOPClass, TCloudDicomUID.BasicFilmSessionSOPClass, filmSessionUID, filmSessionAttrs, TCloudDicomUID.ImplicitVRLittleEndian)
BasicFilmSessionSOPClass 属性包括: Tag.NumberOfCopies Tag.PrintPriority Tag.MediumType Tag.FilmDestination
BasicFilmBoxSOPClass 属性包括: Tag.FilmSizeID Tag.FilmOrientation Tag.MagnificationType
Tag.Trim Tag.BorderDensity Tag.MinDensity等
BasicColorImageBoxSOPClass 属性包括: Tag.ImageBoxPosition dicom 行列,窗宽窗位,图像,位数,像素什么的
上面的3个属性集合都 通过 Association FutureDimseRSP来装信息.
最后通过 Association 的 naction方法来发送信息.
(5)成功之后记得把刚才创建的
FutureDimseRSP 都清空了,这里可以用Association 的
ndelete方法
打印成功之后,会在jdicom的缓存路径下出现临时文件,
这些就是要打印的文件.可以打开看看,配置的参数对不对