jdicom的工具中有一個(gè)PrintServerGUI.exe的程序,可以用來模擬膠片打印機(jī)

測(cè)試時(shí)主要使用的:
Port:當(dāng)前server起在哪個(gè)端口上
CalledTitle:scp端的AE Title(就是這個(gè)print server)
CallingTitle:scu端的AE Title
BasicGrayscalePrintManagement和BasicColorPrintManagement是打印服務(wù)的SOP,在建立通信的時(shí)候要配置的,這兒配置了true那通信的時(shí)候就要配上對(duì)應(yīng)的PresentationContext [SOP詳細(xì): https://www.dicomlibrary.com/dicom/sop/]
StoreHC的Path我改成了絕對(duì)路徑才出現(xiàn)了傳輸?shù)奈募?br>
Verbose:日志等級(jí),2可以解碼DIMSE消息,可以找通訊的細(xì)節(jié)
界面操作
Stop 然后 Start 就行,log查看日志,可以全選刪除日志
日志信息
我這邊大體需求是在electron中發(fā)送打印請(qǐng)求給膠片打印機(jī),所以使用這個(gè)服務(wù)來模擬scp server,electron這邊我用的庫是dcmjs-dimse,具體使用文檔在github查看wiki(https://github.com/PantelisGeorgiadis/dcmjs-dimse/wiki/Examples)。下面結(jié)合日志來具體看一下
abstract syntax scu scp
1.2.840.10008.5.1.1.9 -1 -1
nr abstract syntax pcid description
0 1.2.840.10008.5.1.1.9 1 Basic Grayscale Print Management Meta SOP Class
ts-0 1.2.840.10008.1.2.1 Explicit VR Little Endian Transfer Syntax
ts-1 1.2.840.10008.1.2.2 Explicit VR Big Endian Transfer Syntax
ts-2 1.2.840.10008.1.2 Implicit VR Little Endian Transfer Syntax
首先建立Dicom通訊的連接,就是Association,因?yàn)槲业呐渲弥羞x擇了BasicGrayscalePrintManagement,所以需要在Association添加對(duì)應(yīng)的PresentationContext
const presentationContext = new PresentationContext(1, SopClass.BasicGrayscalePrintManagementMeta, '1.2.840.10008.1.2.1');
presentationContext.addTransferSyntaxUid('1.2.840.10008.1.2.2');
presentationContext.addTransferSyntaxUid('1.2.840.10008.1.2');
client.addAdditionalPresentationContext(presentationContext);
這樣設(shè)置后,在client send的時(shí)候,就能在日志中看到上面的信息,對(duì)應(yīng)了PresentationContext構(gòu)造的第一個(gè)參數(shù)是pcid,第二個(gè)參數(shù)是abstract syntax,第三個(gè)參數(shù)TransferSyntaxUids,可以添加多個(gè),就是日志中的ts-0 ts-1這些。
實(shí)現(xiàn)膠片的打印通訊可以直接參考Example中的 N-Create, N-Action, N-Set, N-Delete SCU (e.g. Print) ,非常完整的例子。但在不同打印機(jī)下還是有零星的問題,比如一些打印機(jī)get printer信息時(shí),status不一定是Status.Success,描述也不一定是規(guī)整的‘NORMAL’;還有的打印機(jī)調(diào)試時(shí)發(fā)現(xiàn)Create步驟傳過去的data解析不出來,然后把dcmjs升級(jí)到最新版本后倒是正常了
最后
網(wǎng)上這塊兒的分享挺少的,這篇完全談不上教程,只是碰到東西拿出來分享一下,我覺得自己對(duì)這塊應(yīng)該有挺多誤區(qū)的,現(xiàn)在只是實(shí)現(xiàn)了當(dāng)前需求涉及的一些可行性測(cè)試,如果有錯(cuò)誤的地方請(qǐng)告訴我,感謝。