Wrong Printing Times

22 views
Skip to first unread message

陈晓春

unread,
Aug 22, 2019, 7:22:16 AM8/22/19
to dcm4che
When I send a print request to the printer, dcm4che returns the following error
This is the working code.
public R print(PrintOptions options, String callingAE) throws Exception {

       
Attributes filmSessionAttrs = new Attributes();
       
Attributes filmBoxAttrs = new Attributes();
       
Attributes imageBoxAttrs = new Attributes();
       
Attributes dicomImage = new Attributes();

       
final String printManagementSOPClass = UID.BasicGrayscalePrintManagementMetaSOPClass;
       
final String imageBoxSOPClass = UID.BasicGrayscaleImageBoxSOPClass;

       
List<String> imgStr = options.getImgList();


       
List<BufferedImage> bfImgList = getBufferImage(imgStr, options);
       
BufferedImage destImage = getDestImage(bfImgList, options);

        storeRasterInDicom
(destImage, dicomImage, options.isColorPrint());

       
Device device = new Device(callingAE);
       
ApplicationEntity ae = new ApplicationEntity(callingAE);
       
Connection conn = new Connection();

       
ApplicationEntity remoteAE = new ApplicationEntity(options.getPrintAE());
       
Connection remoteConn = new Connection();

        ae
.addConnection(conn);
        ae
.setAssociationInitiator(true);
        ae
.setAETitle(callingAE);

        remoteConn
.setPort(options.getPrintPort());
        remoteConn
.setHostname(options.getPrintHost());
        remoteConn
.setSocketCloseDelay(90);

        remoteAE
.setAssociationAcceptor(true);
        remoteAE
.addConnection(remoteConn);

        device
.addConnection(conn);
        device
.addApplicationEntity(ae);
        ae
.addConnection(conn);
        device
.setExecutor(Executors.newSingleThreadExecutor());
        device
.setScheduledExecutor(Executors.newSingleThreadScheduledExecutor());

        filmSessionAttrs
.setInt(Tag.NumberOfCopies, VR.IS, options.getNumOfCopies());
        filmSessionAttrs
.setString(Tag.PrintPriority, VR.CS, options.getPriority());
        filmSessionAttrs
.setString(Tag.MediumType, VR.CS, options.getMediumType());
        filmSessionAttrs
.setString(Tag.FilmDestination, VR.CS, options.getFilmDestination());
        filmBoxAttrs
.setString(Tag.FilmSizeID, VR.CS, options.getFilmSizeId());
        filmBoxAttrs
.setString(Tag.FilmOrientation, VR.CS, options.getFilmOrientation());
        filmBoxAttrs
.setString(Tag.MagnificationType, VR.CS, options.getMagnificationType());
        filmBoxAttrs
.setString(Tag.SmoothingType, VR.CS, options.getSmoothingType());
        filmBoxAttrs
.setString(Tag.Trim, VR.CS, options.getTrim());
        filmBoxAttrs
.setString(Tag.BorderDensity, VR.CS, options.getBorderDensity());
        filmBoxAttrs
.setInt(Tag.MinDensity, VR.US, options.getMinDensity());
        filmBoxAttrs
.setInt(Tag.MaxDensity, VR.US, options.getMaxDensity());
        filmBoxAttrs
.setString(Tag.ImageDisplayFormat, VR.ST, options.getImageDisplayFormat());
        imageBoxAttrs
.setInt(Tag.ImageBoxPosition, VR.US, options.getImageBoxPosition());
       
Sequence seq = imageBoxAttrs.ensureSequence(Tag.BasicGrayscaleImageSequence, 1);
        seq
.add(dicomImage);
       
final String filmSessionUID = UIDUtils.createUID();
       
final String filmBoxUID = UIDUtils.createUID();
       
Attributes filmSessionSequenceObject = new Attributes();
        filmSessionSequenceObject
.setString(Tag.ReferencedSOPClassUID, VR.UI, UID.BasicFilmSessionSOPClass);
        filmSessionSequenceObject
.setString(Tag.ReferencedSOPInstanceUID, VR.UI, filmSessionUID);
        seq
= filmBoxAttrs.ensureSequence(Tag.ReferencedFilmSessionSequence, 1);
        seq
.add(filmSessionSequenceObject);

       
AAssociateRQ rq = new AAssociateRQ();
        rq
.addPresentationContext(new PresentationContext(1, printManagementSOPClass, UID.ImplicitVRLittleEndian));
        rq
.setCallingAET(ae.getAETitle());
        rq
.setCalledAET(remoteAE.getAETitle());
       
Association as = ae.connect(remoteConn, rq);
       
try {
            dimseRSPHandler
(as.ncreate(printManagementSOPClass, UID.BasicFilmSessionSOPClass, filmSessionUID,
                    filmSessionAttrs
, UID.ImplicitVRLittleEndian));
           
DimseRSP ncreateFilmBoxRSP = as.ncreate(printManagementSOPClass, UID.BasicFilmBoxSOPClass, filmBoxUID,
                    filmBoxAttrs
, UID.ImplicitVRLittleEndian);
            dimseRSPHandler
(ncreateFilmBoxRSP);
            ncreateFilmBoxRSP
.next();
           
Attributes imageBoxSequence = ncreateFilmBoxRSP.getDataset().getNestedDataset(Tag.ReferencedImageBoxSequence);
            dimseRSPHandler
(as.nset(printManagementSOPClass, imageBoxSOPClass, imageBoxSequence.getString(Tag.ReferencedSOPInstanceUID),
                    imageBoxAttrs
, UID.ImplicitVRLittleEndian));
            dimseRSPHandler
(as.naction(printManagementSOPClass, UID.BasicFilmBoxSOPClass, filmBoxUID, 1,
                   
null, UID.ImplicitVRLittleEndian));
           
as.ndelete(printManagementSOPClass, UID.BasicFilmBoxSOPClass, filmBoxUID);
           
as.ndelete(printManagementSOPClass, UID.BasicFilmSessionSOPClass, filmSessionUID);
       
} catch (Exception e) {
            e
.printStackTrace();
           
return R.error(e.getMessage());
       
} finally {
           
if (as != null && as.isReadyForDataTransfer()) {
               
as.waitForOutstandingRSP();
               
as.release();
           
}
       
}
       
return R.ok();
   
}

I hope someone can help me.
Reply all
Reply to author
Forward
0 new messages