dcmtk吧 关注:5贴子:28
  • 1回复贴,共1

#DCMTK#PDF封装成DICOM文件

只看楼主收藏回复

#include "dcmtk/config/osconfig.h"
#include "dcmtk/dcmdata/dctk.h"
#include "dcmtk/dcmdata/dcencdoc.h"
#include "dcmtk/ofstd/ofconapp.h"
#ifdef WITH_ZLIB
#include <zlib.h> /* for zlibVersion() */
#endif
#define OFFIS_CONSOLE_APPLICATION "pdf2dcm"
static OFLogger pdf2dcmLogger = OFLog::getLogger("dcmtk.apps." OFFIS_CONSOLE_APPLICATION);
static char rcsid[] = "$dcmtk: " OFFIS_CONSOLE_APPLICATION " v"
OFFIS_DCMTK_VERSION " " OFFIS_DCMTK_RELEASEDATE " $";
int main(int argc, char *argv[])
{
OFConsoleApplication app(OFFIS_CONSOLE_APPLICATION, "Encapsulate PDF file into DICOM format", rcsid);
OFCommandLine cmd;
int errorCode = EXITCODE_NO_ERROR;
OFCondition result = EC_Normal;
DcmFileFormat fileformat;
DcmEncapsulatedDocument encapsulator;
OFLOG_TRACE(pdf2dcmLogger, "Including necessary options");
encapsulator.addPDFCommandlineOptions(cmd);
OFLOG_TRACE(pdf2dcmLogger, "Evaluating command line");
prepareCmdLineArgs(argc, argv, OFFIS_CONSOLE_APPLICATION);
if (app.parseCommandLine(cmd, argc, argv)) {
OFLOG_TRACE(pdf2dcmLogger, "Checking exclusive options first");
if (cmd.hasExclusiveOption())
{
if (cmd.findOption("--version"))
{
app.printHeader(OFTrue /*print host identifier*/);
COUT << OFendl << "External libraries used: ";
#ifdef WITH_ZLIB
COUT << OFendl << "- ZLIB, Version " << zlibVersion() << OFendl;
#else
COUT << " none" << OFendl;
#endif
return EXITCODE_NO_ERROR;
}
}
encapsulator.parseArguments(app, cmd);
}
//print resource identifier
OFLOG_DEBUG(pdf2dcmLogger, rcsid << OFendl);
OFLOG_DEBUG(pdf2dcmLogger, "making sure data dictionary is loaded");
if (!dcmDataDict.isDictionaryLoaded())
{
OFLOG_WARN(pdf2dcmLogger, "no data dictionary loaded, check environment variable: "
<< DCM_DICT_ENVIRONMENT_VARIABLE);
}
OFLOG_DEBUG(pdf2dcmLogger, "Creating identifiers (and reading series data)");
result = encapsulator.createIdentifiers(pdf2dcmLogger);
if (result.bad())
{
OFLOG_FATAL(pdf2dcmLogger, "There was an error while reading the series data");
return EXITCODE_INVALID_INPUT_FILE;
}
OFLOG_INFO(pdf2dcmLogger, "creating encapsulated PDF object");
errorCode = encapsulator.insertEncapsulatedDocument(fileformat.getDataset(), pdf2dcmLogger);
if (errorCode != EXITCODE_NO_ERROR)
{
OFLOG_ERROR(pdf2dcmLogger, "unable to create PDF encapsulation to DICOM format");
return errorCode;
}
OFLOG_INFO(pdf2dcmLogger, "Generating an instance number that is guaranteed to be unique within a series.");
result = encapsulator.createHeader(fileformat.getDataset(), pdf2dcmLogger);
if (result.bad())
{
OFLOG_ERROR(pdf2dcmLogger, "unable to create DICOM header: " << result.text());
return EXITCODE_CANNOT_WRITE_OUTPUT_FILE;
}
OFLOG_INFO(pdf2dcmLogger, "writing encapsulated PDF object as file " << encapsulator.getOutputFileName());
OFLOG_INFO(pdf2dcmLogger, "Check if new output transfer syntax is possible");
DcmXfer opt_oxferSyn(encapsulator.getTransferSyntax());
fileformat.getDataset()->chooseRepresentation(encapsulator.getTransferSyntax(), NULL);
if (fileformat.getDataset()->canWriteXfer(encapsulator.getTransferSyntax()))
{
OFLOG_INFO(pdf2dcmLogger, "Output transfer syntax " << opt_oxferSyn.getXferName() << " can be written");
}
else {
OFLOG_ERROR(pdf2dcmLogger, "No conversion to transfer syntax " << opt_oxferSyn.getXferName() << " possible!");
return EXITCODE_COMMANDLINE_SYNTAX_ERROR;
}
OFLOG_INFO(pdf2dcmLogger, "Checking for DICOM key overriding");
result = encapsulator.applyOverrideKeys(fileformat.getDataset());
if (result.bad())
{
OFLOG_ERROR(pdf2dcmLogger, "There was a problem while overriding a key:" << OFendl
<< result.text());
return EXITCODE_CANNOT_WRITE_OUTPUT_FILE;
}
OFLOG_INFO(pdf2dcmLogger, "write converted DICOM file with metaheader");
result = encapsulator.saveFile(fileformat);
if (result.bad())
{
OFLOG_ERROR(pdf2dcmLogger, result.text() << ": writing file: " << encapsulator.getOutputFileName());
return EXITCODE_CANNOT_WRITE_OUTPUT_FILE;
}
OFLOG_INFO(pdf2dcmLogger, "PDF encapsulation successful");
return EXITCODE_NO_ERROR;
}


IP属地:北京1楼2021-07-15 10:29回复
    以上gi 对,这层才是
    #include "dcmtk/config/osconfig.h"
    #include "dcmtk/dcmdata/dctk.h"
    #include "dcmtk/dcmdata/dcencdoc.h"
    #include "dcmtk/ofstd/ofconapp.h"
    #ifdef WITH_ZLIB
    #include <zlib.h> /* for zlibVersion() */
    #endif
    #define OFFIS_CONSOLE_APPLICATION "pdf2dcm"
    static OFLogger pdf2dcmLogger = OFLog::getLogger("dcmtk.apps." OFFIS_CONSOLE_APPLICATION);
    static char rcsid[] = "$dcmtk: " OFFIS_CONSOLE_APPLICATION " v"
    OFFIS_DCMTK_VERSION " " OFFIS_DCMTK_RELEASEDATE " $";
    int main(int argc, char *argv[])
    {
    OFConsoleApplication app(OFFIS_CONSOLE_APPLICATION, "Encapsulate PDF file into DICOM format", rcsid);
    OFCommandLine cmd;
    int errorCode = EXITCODE_NO_ERROR;
    OFCondition result = EC_Normal;
    DcmFileFormat fileformat;
    DcmEncapsulatedDocument encapsulator;
    OFLOG_TRACE(pdf2dcmLogger, "Including necessary options");
    encapsulator.addPDFCommandlineOptions(cmd);
    OFLOG_TRACE(pdf2dcmLogger, "Evaluating command line");
    prepareCmdLineArgs(argc, argv, OFFIS_CONSOLE_APPLICATION);
    if (app.parseCommandLine(cmd, argc, argv)) {
    OFLOG_TRACE(pdf2dcmLogger, "Checking exclusive options first");
    if (cmd.hasExclusiveOption())
    {
    if (cmd.findOption("--version"))
    {
    app.printHeader(OFTrue /*print host identifier*/);
    COUT << OFendl << "External libraries used: ";
    #ifdef WITH_ZLIB
    COUT << OFendl << "- ZLIB, Version " << zlibVersion() << OFendl;
    #else
    COUT << " none" << OFendl;
    #endif
    return EXITCODE_NO_ERROR;
    }
    }
    encapsulator.parseArguments(app, cmd);
    }
    //print resource identifier
    OFLOG_DEBUG(pdf2dcmLogger, rcsid << OFendl);
    OFLOG_DEBUG(pdf2dcmLogger, "making sure data dictionary is loaded");
    if (!dcmDataDict.isDictionaryLoaded())
    {
    OFLOG_WARN(pdf2dcmLogger, "no data dictionary loaded, check environment variable: "
    << DCM_DICT_ENVIRONMENT_VARIABLE);
    }
    OFLOG_DEBUG(pdf2dcmLogger, "Creating identifiers (and reading series data)");
    result = encapsulator.createIdentifiers(pdf2dcmLogger);
    if (result.bad())
    {
    OFLOG_FATAL(pdf2dcmLogger, "There was an error while reading the series data");
    return EXITCODE_INVALID_INPUT_FILE;
    }
    OFLOG_INFO(pdf2dcmLogger, "creating encapsulated PDF object");
    errorCode = encapsulator.insertEncapsulatedDocument(fileformat.getDataset(), pdf2dcmLogger);
    if (errorCode != EXITCODE_NO_ERROR)
    {
    OFLOG_ERROR(pdf2dcmLogger, "unable to create PDF encapsulation to DICOM format");
    return errorCode;
    }
    OFLOG_INFO(pdf2dcmLogger, "Generating an instance number that is guaranteed to be unique within a series.");
    result = encapsulator.createHeader(fileformat.getDataset(), pdf2dcmLogger);
    if (result.bad())
    {
    OFLOG_ERROR(pdf2dcmLogger, "unable to create DICOM header: " << result.text());
    return EXITCODE_CANNOT_WRITE_OUTPUT_FILE;
    }
    OFLOG_INFO(pdf2dcmLogger, "writing encapsulated PDF object as file " << encapsulator.getOutputFileName());
    OFLOG_INFO(pdf2dcmLogger, "Check if new output transfer syntax is possible");
    DcmXfer opt_oxferSyn(encapsulator.getTransferSyntax());
    fileformat.getDataset()->chooseRepresentation(encapsulator.getTransferSyntax(), NULL);
    if (fileformat.getDataset()->canWriteXfer(encapsulator.getTransferSyntax()))
    {
    OFLOG_INFO(pdf2dcmLogger, "Output transfer syntax " << opt_oxferSyn.getXferName() << " can be written");
    }
    else {
    OFLOG_ERROR(pdf2dcmLogger, "No conversion to transfer syntax " << opt_oxferSyn.getXferName() << " possible!");
    return EXITCODE_COMMANDLINE_SYNTAX_ERROR;
    }
    OFLOG_INFO(pdf2dcmLogger, "Checking for DICOM key overriding");
    result = encapsulator.applyOverrideKeys(fileformat.getDataset());
    if (result.bad())
    {
    OFLOG_ERROR(pdf2dcmLogger, "There was a problem while overriding a key:" << OFendl
    << result.text());
    return EXITCODE_CANNOT_WRITE_OUTPUT_FILE;
    }
    OFLOG_INFO(pdf2dcmLogger, "write converted DICOM file with metaheader");
    result = encapsulator.saveFile(fileformat);
    if (result.bad())
    {
    OFLOG_ERROR(pdf2dcmLogger, result.text() << ": writing file: " << encapsulator.getOutputFileName());
    return EXITCODE_CANNOT_WRITE_OUTPUT_FILE;
    }
    OFLOG_INFO(pdf2dcmLogger, "PDF encapsulation successful");
    return EXITCODE_NO_ERROR;
    }


    IP属地:北京2楼2021-08-16 17:34
    回复