Skip to content

hancom-io/dvc

Repository files navigation

HWPX 활용 예제 : 문서 적합성 검증 (HWPX Document Validation Checker : DVC)

개요

  • HWPX 문서의 내용이 정해진 형태로 작성이 되었는지를 검증하는 프로젝트 입니다.
  • 특정 집단에서 사용이 허가되는 문서 서식이 있다면 해당 서식을 정의하고, 만들어 져 있는 문서가 해당 서식에 적합한지를 판단합니다.
  • 본 프로젝트는 OWPML 모델을 이용하여 문서를 검증합니다.
  • DVC 모듈은 다음의 기능을 지원합니다.
  • 글자모양, 문단모양, 표, 특수문자, 테두리, 글머리표, 문단번호, 스타일, 하이퍼링크, 메크로
  • 추후 Hwpx 문서에서 지원하는 다양한 기능들도 추가로 업데이트 될 예정입니다.

개발 구성

예제는 아래 환경에서 개발 되었습니다.

  • Microsoft Windows 10 Windows
  • Microsoft Visual studio 2017 (v15.9.41) Visual Studio
  • C++

OSS (Open Source Software)

프로젝트를 빌드하기 위해서는 아래 OSS(Open Source Software)가 필요합니다.

  • Hancom OWPML Model // Apache 2.0 License
  • jsoncpp // MIT License
    • jsoncpp 설치 순서
      • jsoncpp download
      • make windows VS2017 project (opensource\jsoncpp\cmake CMakeLists.txt -B json_git -G "Visual Studio 15 2017 Win64" 입력)
      • open jsoncpp.sln VS2017 project (opensource\jsoncpp\json_git\jsoncpp.sln)
      • build jsoncpp_lib project
      • confirm jsoncpp.dll & lib
  • update_oss.bat 를 실행하면 기본적인 OSS 는 다운로드 됩니다.

jsoncpp를 처음 받게 되면 기본적으로 윈도우 빌드가 되어 있기 않기 때문에 관련 작업을 해 줘야 합니다. 윈도우용 프로젝트를 만들기 위해서는 cmake가 설치되어 있어야 하며 cmake는 https://cmake.org/download/ 에서 다운로드 하실수 있습니다. 윈도우(Windows)운영체제를 이용하고 있으므로 윈도우 버전을 설치할 필요가 있습니다. Windows x64 Installer : cmake-3.24.2-windows-x86_64.msi

오픈소스 프로젝트는 아래 경로에 위치하여야 합니다.

  • ./opensource/hwpx-owpml-model
  • ./opensource/jsoncpp

Build

  1. ./DVCModel.sln 솔루션 파일을 Visual studio 에서 불러옵니다.
  2. 빌드
  3. 빌드에 성공하면 다음과 같이 파일이 생성됩니다.
  • DVCModel.dll
  • DVCModel.lib

DLL 사용법

  1. ./source/export/export.h 파일을 참조하시기 바랍니다.
  2. DVC::createDVC() 로 DVCModel 객체를 생성하세요.
  3. IDVC::setCommand() 로 Diff 실행에 필요한 옵션을 설정하시기 바랍니다.
  4. IDVC::doValidationCheck() 로 문서의 Validation 을 실행하시기 바랍니다.
  5. IDVC::output() 로 Validation 결과를 출력합니다.
  6. DVC::deleteHwpxDiff() 로 1번 에서 생성된 DVCModel 객체를 종료하여 주시기 바랍니다.

사용 예

#include "../../../export/export.h"


int wmain(int argc, wchar_t *argv[])
{
    bool printOutput = true;
    DVC::IDVC* dvc = DVC::createDVC();
    if (dvc)
    {        
        LPCWSTR msg = dvc->setCommand(argc, argv);
        if (msg != NULL)
            std::wcout << msg << std::endl;
        else
        {
            if (dvc->doValidationCheck() == true)
                dvc->output();
        }
    }
    DVC::deleteDVC(dvc);
}

DVC Schema

  1. jsonFullSpec.json 파일에 정의되어 있습니다.
  2. 각 항목별 Check 하고 싶은 내용을 지정하고, 허용되는 내용을 기입하면 됩니다.
  3. 모든 스팩을 다 사용해도 되지만 현 시점에서는 글자모양, 문단모양, 표, 특수문자, 테두리, 글머리표, 문단번호, 스타일, 하이퍼링크, 메크로 만 구현이 되어 있으며, 나머지는 추후 추가 업데이트 할 예정입니다.
  4. jsonFullSpec.json에서 필요한 옵션만 가지고 와서 spec을 정의하면 됩니다.

DVC Output Option (argument)

짧은 옵션 긴 옵션 설명
== 출력 형식 정의 ==
-j --format=json 출력 형식을 Json 형태로 표현한다. (Default value)
-x --format=xml 출력 형식을 xml 형태로 표현한다.
== 결과 출력 ==
-c --console Console 화면에 출력 (Default value)
--file=[FilePath] 지정된 파일이름으로 출력 결과를 저장한다.
== 체크 수준 ==
-s --simple 단일 체크. Validation 체크를 진행하다가 오류가 발생 시 그 즉시 체크를 멈추고 오류 알린다.
-a --all 모든 Json 항목 체크 (Default value). Validation option에 정의되어 있는 모든 항목을 체크하고, 오류로 검출 된 모든 항목을 리포팅 한다.
== 출력 옵션 ==
-d --default 기본 항목에 대한 출력 (Default Value)
-o --alloption 모든 항목에 대한 출력
-t --table 테이블 관련 출력 내용 - 테이블에 오류가 하나라도 나오면 그 부분만 체크하고 넘어감(테이블이 많은 문서의 경우, 퍼포먼스 관련하여 이점이 있음)
-i --tabledetail 테이블 관련 출력 내용 - 테이블의 셀 단위로 체크하여 오류 보고
-p --shape 도형 관련 출력 내용
-y --style 스타일 관련 출력 내용
-k --hyperlink 하이퍼링크 관련 출력 내용
== 공통 명령어 ==
-h, -H --help 도움말
-v --version 버전 정보

Demo

  1. Examples\windows\ExampleWindows\ExampleWindows 프로젝트 실행 후 빌드 진행
  2. 빌드 옵션에서 아래와 같이 옵션을 지정한다. -j --file=D:\Project\HWPXProjects\TestSample\DVCDebug\Result.json -s -t D:\Project\HWPXProjects\TestSample\DVCDebug\test.json "D:\Project\HWPXProjects\TestSample\DVCDebug\005_busan.hwpx
    Demo app 을 통해 HWPX 문서의 Validation Chek가 이루어지면 아래와 같은 결과를 확인하실 수 있습니다. (Result.json)
[
  {
    "charIDRef" : 6,
    "errorCode" : 1005,
    "isInTable" : false,
    "isInTableInTable" : false,
    "lineNo" : 4,
    "pageNo" : 2,
    "paraPrIDRef" : 0,
    "tableCol" : 0,
    "tableID" : 0,
    "tableRow" : 0,
    "text" : ""
  },
  {
    "charIDRef" : 6,
    "errorCode" : 1005,
    "isInTable" : false,
    "isInTableInTable" : false,
    "lineNo" : 6,
    "pageNo" : 2,
    "paraPrIDRef" : 2,
    "tableCol" : 0,
    "tableID" : 0,
    "tableRow" : 0,
    "text" : "레벨1"
  },
  • 보기 편하도록 띄어쓰기한 결과를 가져왔습니다.
    • errorCode 에 대한 정의는 "JsonModel.h" 파일에 정의되어 있습니다.
  1. 추가 옵션은 --help 로 확인 하실 수 있습니다.

  2. Demo 솔루션은
    ./examples/windows/ExampleWindows.sln
    에 구성되어 있습니다.

License

자세한 내용은 LICENSE 파일을 참고하세요

Contact

문의사항은 Discussions로 자유롭게 문의 부탁합니다.

About

HWPX Document Validation Checker

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published