3
* $Id: pdf2dsource.cpp 4723 2012-02-20 08:39:13Z tovar $
6
* Code addapted from DCMTK
9
* Copyright (C) 2001-2007, OFFIS
11
* This software and supporting documentation were developed by
13
* Kuratorium OFFIS e.V.
14
* Healthcare Information and Communication Systems
16
* D-26121 Oldenburg, Germany
18
* THIS SOFTWARE IS MADE AVAILABLE, AS IS, AND OFFIS MAKES NO WARRANTY
19
* REGARDING THE SOFTWARE, ITS PERFORMANCE, ITS MERCHANTABILITY OR
20
* FITNESS FOR ANY PARTICULAR USE, FREEDOM FROM ANY COMPUTER DISEASES OR
21
* ITS CONFORMITY TO ANY SPECIFICATION. THE ENTIRE RISK AS TO QUALITY AND
22
* PERFORMANCE OF THE SOFTWARE IS WITH THE USER.
26
* Author: Michael Onken
28
* Purpose: Base Class for plugins extracting pixel data from standard
31
* Last Update: $Author: onken $
32
* Update Date: $Date: 2009-01-16 09:51:55 $
33
* CVS/RCS Revision: $Revision: 1.2 $
34
* Status: $State: Exp $
36
* CVS/RCS Log at end of file
40
#define MACRO_QUE_ESTORBA verify
44
#include <dcmtk/config/osconfig.h>
45
#include "document2dcm.h"
46
#include <dcmtk/dcmdata/dcpxitem.h>
48
#include "dcmtk/dcmdata/dctk.h"
49
//#include "dcmtk/dcmdata/dcdebug.h"
50
#include "dcmtk/dcmdata/cmdlnarg.h"
51
#include "dcmtk/ofstd/ofconapp.h"
52
#include "dcmtk/dcmdata/dcuid.h" /* for dcmtk version name */
53
#include "dcmtk/dcmdata/dcistrmf.h"
55
#include "pdf2dsource.h"
56
#include <main/controllers/controladorlog.h>
57
#include <main/entorno.h>
60
OFString PDF2DSource::inputFormat() const
64
/** Reads pixel data and corresponding attributes like rows etc. from image
65
* file and inserts them into dataset.
66
* @param dset - [out] The dataset to export the pixel data attributes to
67
* @param outputTS - [out] The proposed transfex syntax of the dataset
68
* @return EC_Normal, if successful, error otherwise
70
OFCondition PDF2DSource::readAndInsertSpecificTags( DcmDataset* dset,
71
E_TransferSyntax& outputTS)
75
//it's a secondary capture.. if conversion type is not set put SD -> scanned document
76
dset->putAndInsertString(DCM_ConversionType, "SD", false);
77
dset->putAndInsertString(DCM_MIMETypeOfEncapsulatedDocument, "application/pdf", true);
79
cond = dset->putAndInsertOFStringArray(DCM_SOPClassUID, UID_EncapsulatedPDFStorage);
81
return makeOFCondition(OFM_dcmdata, 18, OF_error, "Unable to insert SOP class into dataset");
83
if (!dset->tagExists(DCM_Modality)) {
84
cond = dset->putAndInsertOFStringArray(DCM_Modality, "SC");
86
return makeOFCondition(OFM_dcmdata, 18, OF_error, "Unable to insert Modality (SC) into dataset");
89
if (!dset->tagExists(DCM_BurnedInAnnotation)) {
90
cond = dset->putAndInsertOFStringArray(DCM_BurnedInAnnotation, "YES");
92
return makeOFCondition(OFM_dcmdata, 18, OF_error, "Unable to insert DCM_BurnedInAnnotation into dataset");
97
//read file into unsigned char
102
file.open(m_file.c_str(),std::ios_base::binary);
103
if(!file.is_open()) {
104
LOG_ERROR("PDF2DSource","Error opening file");
107
//get the length of the file
108
file.seekg(0,std::ios::end);
109
fileSize = file.tellg();
110
if (fileSize %2 != 0) {
111
LOG_INFO("VideoDicomizer", "Video size is odd, padding with 0");
114
std::string m_TempFile = GNC::Entorno::Instance()->CreateGinkgoTempFile();
115
if (!wxCopyFile(FROMPATH(m_file), FROMPATH(m_TempFile))) {
116
LOG_ERROR("PDF2DSource", "Error creating temp file");
119
ofile.open(m_TempFile.c_str(), std::ios_base::app);
122
m_file = m_TempFile.c_str();
126
DcmInputFileStreamFactory* pFactory = new DcmInputFileStreamFactory(m_file.c_str(), 0);
127
DcmOtherByteOtherWord* fileTag = new DcmOtherByteOtherWord(DCM_EncapsulatedDocument);
128
fileTag->setVR(EVR_OB);
129
fileTag->createValueFromTempFile(pFactory, fileSize, EBO_unknown);
131
dset->insert(fileTag, true);
135
outputTS = EXS_LittleEndianExplicit;
139
/** Do some completeness / validity checks. Should be called when
140
* dataset is completed and is about to be saved.
141
* @param dataset - [in] The dataset to check
142
* @return Error string if error occurs, empty string otherwise
144
OFString PDF2DSource::isValid(DcmDataset& dset) const
147
printMessage(m_logStream, "I2DImgSource: Checking validity of DICOM output dataset");
150
err += checkAndInventType2Attrib(DCM_MIMETypeOfEncapsulatedDocument, &dset);
152
err += checkAndInventType2Attrib(DCM_SOPInstanceUID, &dset);
153
err += checkAndInventType2Attrib(DCM_ConversionType, &dset);
158
PDF2DSource::~PDF2DSource()
162
wxRemoveFile(FROMPATH(m_file));
b'\\ No newline at end of file'