Code Monkey home page Code Monkey logo

hwplib's Introduction

hwplib

한글과 컴퓨터(한컴)에서 만든 워드프로세서 "한글"의 파일에 대한 라이브러리입니다.

개인적인 취미 생활 또는 사회기여 활동 목적으로 시작한 hwplib, hwpxlib 프로젝트가 이 라이브러리를 기반으로 하는 상용 제품이 개발하여 판매하고 있습니다. 이 라이브러리의 저작권은 저 개인에게 있으므로, 라이브러리 사용, 버그 수정요청, 약간의 질문 등은 Apache-2.0 license에 의해 앞으로도 자유롭게 할 수 있습니다. 그 외에 많은 시간을 초래할 수 있는 기술지원 요청이나 유지보수 계약등은 제 메일로 상의해 주셨으면 합니다.

  • 사용한 라이브러리나 문서

    • Apache-POI 라이브러리 - 한글 파일의 하부 구조인 Microsoft Compound File의 부분의 파싱
    • 한글과컴퓨터에서 공개한 '한글 문서 파일 구조 5.0' 문서 ( http://www.hancom.com/etc/hwpDownload.do?gnb0=269&gnb1=271&gnb0=101&gnb1=140 )
      ( “본 제품은 한글과컴퓨터의 HWP 문서 파일(.hwp) 공개 문서를 참고하여 개발하였습니다." )
  • 이 라이브러리에서 할 수 있는 일.(kr.dogfoot.hwplib.sample 패키지에 샘플 참고.)

    • 한글 파일을 읽어서 객체로 생성 : Reading_HWP_FromFile, Reading_HWP_FromURL
    • 만들어진 객체를 파일로 저장 : Rewriting_HWPFile, SimpleEditing_HWPFile
    • 한글 파일에서 텍스트 추출 : Extracting_Text, Extracting_Text_From_Big_File
    • 필드 텍스트 추출/설정 : Getting_ClickHere_FieldText, Setting_ClickHere_FieldText, Finding_AllField, Setting_FieldText
    • 조건에 맞는 컨트롤 찾기 : Finding_Control
    • 다른 파일의 내용(문단)을 추가하기. 파일 합치기 : Adding_Paragraph_Between_HWPFile
    • 표 컨트롤 조작 : 삽입(Inserting_Table), 셀 합치기(Merging_Cell), 행 삭제(Removing_Table_Row)
    • 기타 컨트롤 조작 : 이미지 삽입(Inserting_Image), 하이퍼링크 삽입(Inserting_HyperLink)
    • 기타 설정 : 페이지 크기 변경 (Changing_PaperSize), 폰트 크기, 밑줄 등의 글자모양 설정(Inserting_CharShape 참고)
  • 이 라이브러리는 다음의 기능을 아직(??) 지원하지 않습니다.

    • 암호화된 HWP 파일에 대한 읽고 쓰기
    • 이미지 파일, PDF 파일, HTML 파일로 변환
    • 특정 페이지 내용 가져오기 나 전체 페이지 수를 구하기
  • 메이븐 레파지토리 설정

    <dependency>
        <groupId>kr.dogfoot</groupId>
        <artifactId>hwplib</artifactId>
    </dependency>
    
  • hwpx 파일에 대한 라이브러리는 https://github.com/neolord0/hwpxlib 을 참조해 주세요.

  • hwp파일을 hwpx파일로 변환하는 라이브러리는 https://github.com/neolord0/hwp2hwpx 을 참조해 주세요.

2024.04.09

  • 이슈 251 : 컨테이너 안에 Picture 개체 읽기 오류 수정
  • 메이븐 저장소에 1.1.5 버전 등록

2024.03.05

  • 이슈 246 : 2024버전에서 저장된 파일에서 CtrlHeaderGSO의 알 수 없는 2 bytes 처리.

2023.12.22

  • FieldData.parent 추가.. 필드이름이 설정된 Cell or GsoControl
  • ShapeComponentLineForObjectLinkLine.unknown 삭제...
  • TextExtractor 에서 문단에 text()가 null일때.. 개행문자가 출력되지 않은 문제 해결...
  • ParaShape.unknown을 ParaShape.paraLevel로 변경..
  • 섹션 마지막에 컨트롤이 있을 때 읽기 오류 수정
  • 구버전 글머리표 오류 수정
  • 알 수 없는 개체 처리

2023.11.17

  • 이슈 234 : CellFinder.findAll() 셀 안에 개체(표 등)을 검색하지 않은 오류 수정

2023.9.13

  • 메모모양(MemoShape) 레코드 읽고 쓰기

2023.9.12

  • ParaShapeProperty2에 suppressLineNumbers(줄번호 제거) 속성 추가
  • Bullet 에 그림 글머리표 정보, 체크 문자열 정보 추가
  • 강조점(EmphasisSort) 값 변경
  • ImageFillType.None ==> ImageFillTYpe.Zoom
  • BorderFill에서 BackSlashDiagonalShape, SlashDiagonalShape의 방향 바꿈
  • BorderFillProperty에 centerLineSort(중심선 종류) 속성 추가

2023.5.8

  • 이슈 217 : 이슈216에서 레코드의 크기가 0인 레코드를 읽을 때 문단의 ParaCharShape 객체가 생성되지 않는 문제 해결

2023.4.27

  • 이슈 216 : 레코드의 크기가 0인 레코드를 읽은 후 무한루프에 빠지는 문제 해결

2023.3.29

  • JAVA 1.7에서 사용할 수 있게 코드 수정, 자체 포함된 POI 버전을 4.1.2에서 3.9로 변경함.

2023.3.7

  • 이슈 212 : Ctrl Data가 없는 필드 컨트롤이 Stream 끝에 있을 때 읽기 오류..

2023.3.3

  • 이슈 209 : 크기가 다른 다단이 적용된 문서을 저장할 때 발생하는 오류 수정.

2023.1.20

  • 이슈 204 : 문서요약 정보 읽고 쓰기 기능 추가

2023.1.13

  • 이슈 203 : 문단 복사, 병합시 공통 객체의 복사 속도 개선

2023.1.3

  • 이슈 201 : GSOControl 객체 내부의 caption, ctrldata 레코드의 순서가 유동적일 수 있는 문제 해결..

2022.9.9

  • 이슈 193 : ParagraphMerger, ParagraphCopier 클래스에서 ClassCastException 발생하는 오류 수정
  • 이슈 194 : 문단 텍스트 추출시.. 개요 번호 출력 기능 수정.

2022.9.5

  • 이슈 191 : HtmlToTableExample.java 에서 setBorderFillID()에 올바르지 못한 값을 넣은 부분 수정.

2022.7.7

  • 이슈 188 : 배포용 문서 HWP 파일을 읽을 때 오류를 (지원하지 않는다는) 예외로 처리
  • 이슈 187 : 텍스트 추출시(TextExtractor.extract() 사용) 문단 번호/개요 번호가 설정된 문단에서 오류 수정

2022.6.24

  • 이슈 182 : 메모를 문단마다 반복되는 형태에서 마지막 섹션에 한번만 나오는 형태로 변경..

2022.6.3

  • 메이븐 저장소에 1.1.1 버전 등록

2022.5.17

  • 이슈 177 : TOC 필드 추가

2022.3.17

  • 이슈 171 : FieldFinder.getAllClickHereText()에 글이 없는 사각형 개체을 포함하는 hwpFile을 입력하여 실행시 오류 수정 (typemild님 요청)

2022.2.25

  • 이슈 167 : HtmlToTableExample 새버전에 맞게 수정 (Mineru98님 요청)
  • ControlField.setName() 추가.

2021.12.17

  • 이슈 163 : 캡션 생성시 오류 수정 (Bobby-m-m님 요철)

2021.12.14

  • 이슈 162 : 글맵시 컨트롤(ControlTextArt) 추가 (sungjini78님 요철)

2021.11.8

  • 메이븐 저장소에 1.1.0 버전 등록

2021.11.8

  • 이슈 158 : ShapeComponentOLE 객체 읽고 쓰기 할때.. 알 수 없는 바이트 처리(sungjini78님 요철)

2021.11.1

  • POI 병합 - 다른 버전이 사용되는 경우, jar 버전의 충돌을 방지하기 위해..

2021.10.25

  • Pull Request 반영 - 오타 수정 (BinDataCompress 클래스의 ByStroageDefault => ByStorageDefault, BinDataState 클래스의 NotAcceess => NotAccess)

2021.8.27

  • 양식 객체 속성값 분석을 위한 Property 객체 추가...
  • 양식 객체 Finder 추가...
  • 필드값 설정시..해당 문단의 LineSeg 삭제.

2021.7.13

  • 양식 개체(라디오 버튼, 체크 박스 등) 읽고 쓰기 추가..
  • FieldFinder 추가.

2021.7.2

  • 이슈 12,18 : 텍스트 추출시 문단 번호/글머리표를 포함하게 수정. (kr.dogfoot.hwplib.sample.Extracting_Text_With_ParaHead 참고)

2021.6.25

  • 섹션(구역) 정의 컨트롤을 복사하는 클래스(SectionDefineCopier) 추가.

2021.5.31

  • 단정의 컨트롤(ControlColumnDefine) read/write 수정
  • 이슈 143 : 문단 추가 기능(kr.dogfoot.hwplib.tool.paragraphadder)에 단정의 컨트롤 복사 기능 추가.

2021.5.17

  • 메이븐 저장소에 1.0.4 버전 등록

2021.5.17

  • 이슈 139 : 문단 추가 기능(kr.dogfoot.hwplib.tool.paragraphadder)에 겹침문자 컨트롤 복사 기능 추가.
  • 컨트롤의 [본문과의 배치]속성값 수정
  • 이슈 140 : CharShape.getBorderFillId()가 0 일때, 문단추가 기능 오류 수정..

2021.3.12

  • docInfo 아래에 객체 쓰기 순서 변경
  • 글자 모양의 밑줄 타입 변경
  • 이미지ID(BIN?????.bmp)를 10진수로 인식하던 것을 16진수로 인식하게 함

2021.3.3

  • 겹침문자 등에서 한글 고유에 특수문자를 읽고 쓸 때, 코드 변환 오류 수정
  • 객체 복사시 오류 수정
  • 머리글/꼬리글 예제 추가 sample/Inserting_HeaderFooter.java

2021.2.24

  • 4095 바이트 보다 큰 레코드 읽고 쓰기 오류 수정
  • 빈 파일 만들기(kr.dogfoot.hwplib.tool.blankfilemaker.BlankFileMaker)에서 빠진 BorderFill 객체 생성.

2021.2.18

  • 문단 내에 핊드 테스트 가져오기/섫정하기 함수 수정..
  • 이슈 127 : 이미지 읽을 떄 id 찾는 방법 오류 수정..

2021.2.17

  • ControlField.clone() 오류 수정
  • 문단 복사할 때 ControlField 복사하게 수정

2021.2.5

  • 이슈 122 : ParaText.insertString() 추가
  • 이슈 123 : kr.dogfoot.hwplib.tool.paragraphadder.docinfo.FaceNameAdder의 equal() 함수 내의 Null 체크
  • 이슈 124 : bullet 복사 부분 수정
  • 이슈 125 : numbering 복사 부분 수정
  • 이슈 126 : 묶음(Container) 안에 컨트롤 복사시 오류 수정

2021.2.5

  • 텍스트 축출 옵션 추가.

2021.2.3

  • 텍스트 축출시 탭, 개행, 하이픈이 빠지는 오류 수정.
  • TextExtractMethod.xxxWithControlChar 모드 추가.

2021.1.19

  • ParagraphAdder.merge() 함수 추가.

2021.1.12

  • 메이븐 저장소에 1.0.3 버전 등록

2020.12.30

  • 문단 붙이기을 위한 HWPFile 객체 복사 기능 추가
  • sample/Adding_Paragraph_Between_Cloned_HWPFile 참고..

2020.11.17

  • 문단 붙이기(ParagraphAdder) 가능 중 그림 컨트롤 복사 오류 수정

2020.10.23

  • 메이븐 저장소에 1.0.2 버전 등록

2020.8.31

  • 빈 파일 만드는 코드 추가 - ingyeoking13 님 요청
  • sample/Making_BlankFile.java 참조

2020.6.16

  • 필드(누름틀) 찾기 중에 그리기 객체에 textBox가 null인 오류 수정 - j2y0206 님 요청

2020.5.27

  • 다른 문서 간에 문단 복사-붙여넣기 기능에 표 컨트롤 복사 기능 추가 - kimeuietae 님 요청
  • 다른 문서 간에 문단 복사-붙여넣기 기능에 첫번째 문단을 복사할 때 오류 수정 - kimeuietae 님 요청
  • sample/Copying_Paragraph_Between_HWPFile.java 참조...

2020.2.25

  • 큰 파일애서 텍스트 추출을 할 때 메모리 부족현상 수정 - LeeYunSeop 님 요청
  • sample/Extracting_Text_From_Big_File.java 참조...

2020.01.31

  • 읽기 오류 수정 - osc91 님 요청.

2020.01.29

  • 수식 부분 오류 수정 - osc91 님 요청.

2020.01.07

  • 5.0.2.5 버전 이상에서 추가된 문단 번호 수준(8-10) 처리.. - Chunsjun 님 요청.

2020.01.02

  • 메이븐 Central Repository 등록

2019.12.20

  • html 표를 한글로 만드는 샘플 추가(samle/htmltohwp 폴더) - [email protected](이준성) 님 제공

2019.10.22

  • 홀/짝 조정(페이지 번호 조정) 컨트롤 추가 - kangyongseog 님 요청

2019.10.2

  • 문단 텍스트 변경하는 샘플 추가 - humblemh 님 요청

2019.09.23

  • 구버전 파일(5.0.0.0)에 수식 읽기 오류 수정... - [email protected] 님 요청

2019.09.20

  • 손상된 파일 압축해제 시 무한루프 빠지는 오류 수정(Exception 처리) - LeBronPark 님 요청

2019.09.16

  • 구버전의 컨테이너(묶음) 컨트롤 읽기 오류 - [email protected] 님 요청

2019.08.13

  • 스트림으로 출력하는 기능 추가(HWPWriter.toStream()) - KimJason8557 님 요청

2019.06.24

  • 5.1.0.1 파일 읽기 오류 .... - jwon0615 님 요청
  • ShapeComponentPicture 레코드에 알수 없는 1바이트 추가됨..

2019.06.13

  • 단 설정에서 "단 너비 동일하게"와 1개 이상의 단을 설정한 후 저장하면, 1개의 단으로 저장되는 오류 수정 - kwon1148 님 요청

2019.06.04

  • 표 셀에 "안 여백 지정" 속성값 get/set - kamsi76 님 요청
  • ForControlWithAllField.getFieldText() 오류 수정 - kamsi76 님 요청

2019.04.12

  • 표에서 특정 행을 삭제하는 샘플 추가 - kamsi76 님 요청
  • sample/TestRemoveRow.java 참고

2019.04.04

  • 필드명이 일치하는 셀 찾기 기능 추가. - kwonhyun 님 요청
  • sample/TestFindCell.java 참고

2019.01.28

  • FieldFiner에 이름이 같은 필드 모두 찾는 함수 추가... - jclab 님 요청
  • sample/TestFindAllField.java 참고

2018.11.20

  • IDMapping의 문단 모양 개수와 저장된 실제 문단 모양 개수가 다를 때 보정.. - [email protected] 님 요청

2018.10.17

  • 필드 설정 기능 강화 :멀티라인 텍스트, 이름이 동일한 필드를 위한 값 리스트, 누름틀 필드 이외에 필드 설정... - [email protected] 님 요청
  • sample/TestSetField.java 참고

2018.09.14

  • 표 셀 병합하기 - codeless73 님 요청
  • sample/TestMergingCell.java 참고

2018.08.31

  • 필드 텍스트 설정 기능 추가 - [email protected] 님 요청
  • sample/TestSetClickHereFieldText.java 참고

2018.08.21

2018.08.17

  • 다른 한글 파일에서 있는 문단 추가하는 기능 추가 - accforaus 님 요청
  • 문단에 포함된 글자만 추가됨. 문단에 포함된 컨트롤들과 메모들을 추가하는 부분은 아직 구현 못함(추후 추가 예정임)
  • sample/TestParagraphAdder.java 참고

2018.07.18

  • 5.0.2.5의 각주 컨트롤 읽을 때 오류 나는 문제 수정 - accforaus 님 요청
  • BinData가 스토리지 디폴트 모드로 압축되었을 떄 오류 나는 문제 수정

2018.07.10

  • 문단의 글자모양(글꼴, 크기, Bold/Italic, 글자색 등) 설정하는 샘플 추가 - zuoliang0 님 요청
  • sample/TestMakingCharShape.java 참고

2018.05.04

  • 이미지 컨트롤 동적 생성 샘플 추가 - [email protected] 님 요청
  • sample/TestInsertImage.java 참고

2018.03.20

  • 표 동적 생성 샘플 추가 - krPlatypus 님 요청
  • sample/TestMakingTable.java 참고

2017.11.23

  • 압축 푸는 방식 개선 등의 오류 수정 및 객체 연결선 컨트롤 추가 - osc91 님 요청

2017.11.14

  • 메모 있는 문서가 읽히지 않는 오류 수정 - osc91 님 요청

2017.8.31

  • 컨트롤 찾기 기능 추가 - osc91 님 요청
    • TestFindObject.java 참조
    	public static class MyControlFilter implements ControlFilter {
    		public boolean isMatched(Control control, Paragraph paragrpah, Section section) {
	   		// 필터링 조건 입력 
		}
    	}
	
	ArrayList<Control> result = ControlFinder.find(hwpFile, new MyControlFilter());

2017.8.21

  • URL로 부터 읽는 기능 추가 - osc91 님 요청
	String url = "http://ocwork.haansoft.com/sample/sample.hwp";
	HWPFile hwpFile = HWPReader.fromURL(url); 

2017.6.1

  • 저장 모듈 완료
    • TestEditingHWPFile.java, TestReWritingHWPFile.java 참고
	// 파일을 열어서
	String filename = "sample_hwp\\test-blank.hwp"; 
	HWPFile hwpFile = HWPReader.fromFile(filename); 
	
	if (hwpFile != null) {
	
	    // 첫번째 구역/문단에 문자열 추가하고
		Section s = hwpFile.getBodyText().getSectionList().get(0);
		Paragraph firstParagraph = s.getParagraph(0);
		firstParagraph.getText().addString("이것은 추가된 문자열입니다.");

		// 다른 이름으로 저장
		String writePath = filename.substring(0, 11) + "ed-" + filename.substring(11);
		HWPWriter.toFile(hwpFile, writePath);
	}

2017.4.26

  • 구버전에서 만든 파일 읽기 오류 수정 - quantum123님 요청
    • 5.0.0.6, 5.0.2.4.1, 5.0.0.3, 5.0.1.6, 5.0.3.0.1, 5.0.0.5, 5.0.1.7 버전

2017.4.14

  • 한 장 이상의 긴 문단을 읽지 못하는 문제 해결

2017.4.4

  • 누름틀 필드 텍스트 찾기 기능
    • 필드 텍스트가 여러 줄일때 처리
    • 필드 텍스트에 컨트롤이 포함되었을 경우 처리
    • FieldFinder.getClickHereText() 에서 필드 텍스트에 컨트롤이 포함되었을 경우 처리를 위해 TextExtractMethod temInField 매개변수를 추가하였습니다.
	String text1 = FieldFinder.getClickHereText(hwpFile, "필드1", TextExtractMethod.OnlyMainParagraph);

2017.3.29

  • 누름틀 필드 텍스트 찾기 기능 완료 - musasin84님 요청
    • test/TestGettingClickHereFieldText.java 파일 참고
	HWPFile hwpFile = HWPReader.fromFile(filename);
	String text1 = FieldFinder.getClickHereText(hwpFile, "필드이름");

2017.3.20

  • 누름틀 필드 컨트롤 읽기 오류 수정

2017.1.6

  • 텍스트 추출기 모듈을 추가하였습니다.
    • TextExtractor.extract()의 두번째 파라미터 값에 따라 세가지 추출 방법을 구현했습니다.
      • OnlyMainParagraph // 메인 문단에 포함된 텍스트만 추출함
      • InsertControlTextBetweenParagraphText // 컨트롤의 텍스트를 문단 텍스트 사이에 삽입하여 추출함
      • AppendControlTextAfterParagraphText // 컨트롤의 텍스트를 문단 텍스트 뒤에 추가하여 추출함
    • test/TestExtractingText.java 파일 참고
	HWPFile hwpFile = HWPReader.fromFile(filename); 
	String hwpText = TextExtractor.extract(hwpFile, TextExtractMethod.InsertControlTextBetweenParagraphText);
  • 읽기 모듈에서 버그 수정하였습니다.
  • 소스 인코딩을 euc-kr에서 utf-8로 변경하였습니다.

2016.12.23

  • 이 번 배포버전은 읽기 모듈 까지만 구현되었습니다. 쓰기 모듈은 추후 상황을 봐서 구현할 계획입니다.
    • 각각의 객체들과 객체에 포함된 메소스들에 대해선 "/doc" 디렉토리에 있는 javadoc 문서를 참고하시기 바랍니다.
	// 파일을 읽는다. 
	HWPFile hwpFile = HWPReader.fromFile(filename);  			
	
	// 파일에서 첫번째 구역을 얻는다. 
	Section s = hwpFile.getBodyText().getSectionList().get(0); 		
	
	// 첫번째 구역에서 첫번째 문단을 얻는다. 
	Paragraph p = s.getParagraphList().get(0);				
	...		

hwplib's People

Contributors

alencion avatar asklsd0-ulim avatar dependabot[bot] avatar fj2008 avatar gulnergulner avatar hope9405 avatar neolord0 avatar potados99 avatar seopchan avatar swsz2 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

hwplib's Issues

kr.dogfoot.hwplib.reader.HWPReader.fromURL 추가 문의 입니다.

한가지 다시 물어보고자 하는 내용이 있어 질문합니다~

테이블 CELL의 여백을 주고자 하는데..
여백은 주어지나 [안 여백 지정] 이라는 내용을 체크해야 적용이 됩니다.
그런데 API를 찾아봐도 그걸 체크할 수 있는 방법이 없네요..ㅜㅜ

image

저부분을 어떻게 해야 체크 되는지 알수 있을까요??

두번째로....

ArrayList result = FieldFinder.getAllClickHereText(hwpFile, "사업장명", TextExtractMethod.OnlyMainParagraph);
for (String string : result) {
System.out.println(string);
}

전체 누름틀 정보를 가져오는 항목입니다.
문제는 꼬릿말이 없으면 정상적으로 가져오는데
꼬릿말을 넣으면 아래와 같은 오류가 발생합니다.

Exception in thread "main" java.lang.ClassCastException: kr.dogfoot.hwplib.object.bodytext.control.ControlFooter cannot be cast to kr.dogfoot.hwplib.object.bodytext.control.ControlFootnote
at kr.dogfoot.hwplib.tool.objectfinder.forField.gettext.ForControlWithAllField.getFieldText(ForControlWithAllField.java:54)
at kr.dogfoot.hwplib.tool.objectfinder.forField.ForParagraphList.getAllFieldTextForControl(ForParagraphList.java:194)
at kr.dogfoot.hwplib.tool.objectfinder.forField.ForParagraphList.getAllFieldText(ForParagraphList.java:128)
at kr.dogfoot.hwplib.tool.objectfinder.FieldFinder.getAllClickHereText(FieldFinder.java:52)

꼬릿말 부분을 찾으며 형변환을 정상적으로 하지 못하는 듯합니다.
어찌하면 좋을 까요..ㅜㅜ

항상 감사합니다~

문단 정렬과 표 대각선 문의 드립니다.

안녕하세요 한글 관련 프로젝트를하는중에 @neolord0 님의 라이브러리로 많은 도움이 되고 있습니다. 감사합니다. ^^

문의 드릴 사항 2가지 있습니다.

  1. 글자 우측 정렬
  • 우측정렬이 있는 문서를 읽고 읽어들인 객체를 그대로 파일로 쓰고 한글 문서로 불러보면 우측정렬이 없어지는 이슈가 있습니다.
  1. 표 대각선
bf.setDiagonalSort(BorderType.Solid);
bf.setDiagonalThickness(BorderThickness.MM0_5);;
bf.getDiagonalColor().setValue(0x0);

만들어주신 샘플을 참고하여 위의 소스를 넣어봤는데 대각선이 나오지 않아서 무엇을 더 추가하면 될지 여쭙고 싶습니다. 그리고 한글 문서를 보면 대각선 종류가 방향도 있던데 방향 설정하는 메서드를 찾지를 못해서 함께 문의 드리고 싶습니다.

많은 시간 투자해서 hwp 라이브러리 만들어주셔서 감사합니다.

이미지 파싱하는 부분에 대해 질문이 있습니다.

안녕하세요.

먼저 이런 훌륭한 라이브러리를 개발해 주신것에 대해 감사합니다.

제가 hwplib를 이용하여 viewer를 제작 중인데 이미지 부분이 순서대로 출력이 되지 않습니다.

현재는
idx = hwpFile.getDocInfo().getBinDataList().get(imgflag).getBinDataID()-1;
hwpFile.getBinData().getEmbeddedBinaryDataList().get(idx).getData()로 이미지를 뽑아내고 있는데 이미지가 순서대로 출력이 되지 않아 질문 드립니다.(imgflag는 for문 변수입니다.)

혹시 사용법이 잘못되었나요??

사용법이 잘 못 된것이라면 사용법을 알려주실 수 있으신가요?

제 이메일은 [email protected]이고 답글이나 이메일로 편하신걸로 답변 주시면 감사하겠습니다.

다시 한번 라이브러리 개발해 주셔서 감사합니다!

kr.dogfoot.hwplib.reader.HWPReader.fromURL 에러관련 문의 입니다.

바쁘신데 또 요청을 하게 되네요. ^^;;

파일을 못 여는 부분은 거의 처리가 된거 같은데요.
파일 오픈시 에러가나서 텍스트 변환이 안되는 파일들입니다.

java.lang.Exception: List header must be located.
http://www.g2b.go.kr:8081/ep/co/fileDownload.do?fileTask=NOTIFY&fileSeq=20171009694::00::1::1
http://www.g2b.go.kr:8081/ep/co/fileDownload.do?fileTask=NOTIFY&fileSeq=20171008185::00::1::1

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
http://www.g2b.go.kr:8081/ep/co/fileDownload.do?fileTask=NOTIFY&fileSeq=20171009614::00::1::1
http://www.g2b.go.kr:8081/ep/co/fileDownload.do?fileTask=NOTIFY&fileSeq=20171009696::00::1::1

java.lang.Exception: Shape Component must come after CtrlHeader for gso control.
http://www.g2b.go.kr:8081/ep/co/fileDownload.do?fileTask=NOTIFY&fileSeq=20170929853::01::1::1
http://www.g2b.go.kr:8081/ep/co/fileDownload.do?fileTask=NOTIFY&fileSeq=20170930124::00::1::1

java.lang.Exception: Decompressed bytes size is wrong.
http://www.g2b.go.kr:8081/ep/co/fileDownload.do?fileTask=NOTIFY&fileSeq=20170911931::00::1::1
http://www.g2b.go.kr:8081/ep/co/fileDownload.do?fileTask=NOTIFY&fileSeq=20171002562::00::1::1

java.lang.NullPointerException
http://www.g2b.go.kr:8081/ep/co/fileDownload.do?fileTask=NOTIFY&fileSeq=20171008074::00::1::1

java.io.FileNotFoundException: no such entry: "Section1", had: [Section0]
http://www.g2b.go.kr:8081/ep/co/fileDownload.do?fileTask=NOTIFY&fileSeq=20171008205::00::1::1

org.apache.poi.poifs.filesystem.NotOLE2FileException: Invalid header signature; read 0x75636F4420505748, expected 0xE11AB1A1E011CFD0 - Your file appears not to be a valid OLE2 document
http://www.g2b.go.kr:8081/ep/co/fileDownload.do?fileTask=NOTIFY&fileSeq=20140423439::00::1::1

혹시 위 파일들도 에러 처리하여 텍스트 변환이 가능한지 확인 부탁드립니다.

수고하세요.

kr.dogfoot.hwplib.reader.HWPReader.fromURL 추가 문의 입니다

http://www.g2b.go.kr:8081/ep/co/fileDownload.do?fileTask=NOTIFY&fileSeq=20170202650::00::1::3
http://www.g2b.go.kr:8081/ep/co/fileDownload.do?fileTask=NOTIFY&fileSeq=20170127713::00::1::1
http://www.g2b.go.kr:8081/ep/co/fileDownload.do?fileTask=NOTIFY&fileSeq=20170405233::00::1::1
http://www.g2b.go.kr:8081/ep/co/fileDownload.do?fileTask=NOTIFY&fileSeq=20170506114::00::1::1
http://www.g2b.go.kr:8081/ep/co/fileDownload.do?fileTask=NOTIFY&fileSeq=20170705666::00::1::1
http://www.g2b.go.kr:8081/ep/co/fileDownload.do?fileTask=NOTIFY&fileSeq=20170509742::00::1::1
http://www.g2b.go.kr:8081/ep/co/fileDownload.do?fileTask=NOTIFY&fileSeq=20170505081::00::1::1
http://www.g2b.go.kr:8081/ep/co/fileDownload.do?fileTask=NOTIFY&fileSeq=20160616587::00::1::1

또 올리네요 ^^;
위 주소 파일이 안열립니다.
확인 부탁드립니다.

위 파일들은 나라장터 전자입찰공고의 공고문인데요 제가 테스트해본거로는 이번거만 처리되면
거의 되는거 같네요..

그리고 지난 요청에서 말씀드린거는

에러가 나지 않아 try catch 잡을수가 없더라구요

그냥 'kr.dogfoot.hwplib.object.HWPFile hwpFile = kr.dogfoot.hwplib.reader.HWPReader.fromURL(hwpurl);'
위 부분에서 프로그램이 중지가 되어버려서요

위 주소로 테스트 해보시면 확인이 가능할거 같습니다.

수고하세요 ^^

안녕하세요 질문사항이 있어서 여쭈어봅니다

Pararaph의 텍스트를 수정하는 작업을 하는 중 입니다
일정 글자수가 넘어가서 개행이된 Paragraph 텍스트를 수정해서 한줄이 되면 한글에서 에러가 나더라구요 그래서 Paragraph를 저장해두고 새 Paragraph를 만들어 기존 Paragraph의 paraCharShape 만 다시 set해주는데 자세히는 확인한해봣지만 우선 정렬스타일을 못가져와서 문의드립니다
정렬정보가 Paragraph에 어느 객체에 있는건가요?

안녕하세요. 문의가 있어 올립니다.

좋은 라이브러리 만들어 주셔서 감사합니다.
혹시 문자열 치환이 가능할까요?
특정한 문자열을 찾아서 ㄷ른 문자열로 치환한다거나 아니면 이미지로 치환한다거나 하는게 가능할까요?
감사합니다.

HWPRead 한글 버전 관련

안녕하세요
초보개발자 입니다..
궁금한게 있어 여쭙고 싶은게 있습니다.
현재 문서버전 5.0.5.0.1 까지는 파일 읽기가 가능한데
5.1.0.1.6버전은 읽기도중 무한 루프에 빠집니다..
이런경우는 어떤 파일을 확인해야 하나요...

텍스트 중 밑줄

API 문서를 읽어봤는데 밑줄을 가져오는 API 는 없는건가요?

문단 복사관련

현재 문단을 복사하여 새로운 파일로 옮기려고 하는데 현재는 옮기고자 하는 문단을 ArrayList에 저장하고 새로운 파일을 열어 저장을 해보았는데 파일이 손상되었다는 오류가 발생하네요..
혹시 문단을 그대로 카피하려면 paragraph객체에 옮기고자하는 모든 정보들을 카피해 주어야 하나요?
헤더도 그대로 설정해주고 텍스트나 컨트롤도 대입이 아닌 하나하나 생성후 원본의 정보를 넣어주어야 하나요?

ArrayList paragraphs = getParagraphs(2, 3);  // 이런식으로 가져오고나서
Section s = hwp.getBodyText().getSectionList().get(0);
Paragraph p =  s.addNewParagrsph();
p.createText();
p.getText().addString("Hello world!");
HWPWriter.toFile(hwp, 'somewhere'); // 이렇게 하면 저장은 됩니다. 하지만 한글 파일을 열면 손상된 파일이라고 나오네요..

혹시나 해서 setHeader, setControl, setText등의 메소드를 만들어 일일이 하나하나 대입해보아도.. 손상된 파일이라고만 뜹니다. 제 생각엔 docInfo나 fileHeader에서 설정을 해주어야 겠는데, 잘 모르겠어서 질문드립니다. 요점은, 자바상에서 복사, 붙혀넣기를 하려면 어떻게 해야하는가에 입니다.

안녕하세요 hwplib-master를 사용해보고 궁금한 점이 있어서 질문드립니다.

먼저 유용한 라이브러리를 개발해주셔서 감사합니다. 제가 다운받고 여러 hwp 파일들을 테스트해봤는데 이미지, 누름틀, 표서식 등 복잡한 문서도 대부분 잘 읽혔습니다. 하지만 특정한 한글문서버전은 읽지 못하고 예외가 발생하거나 결과가 나오지 않는 경우를 확인하게 되었습니다. 대표적으로 문서버전이 5.0.0.6, 5.0.2.4.1, 5.0.0.3, 5.0.1.6, 5.0.3.0.1, 5.0.0.5, 5.0.1.7인 경우 문서를 읽지 못하였습니다. 해당 원인을 찾기위해 현재도 알아가보는 중이지만 개발하신 분도 아시면 개발에 도움이 되실 것 같아 이렇게 질문을 드리게 됩니다.

글머리표 추출관련

안녕하세요. 우선, 좋은 라이브러리 만들어 주셔서 감사합니다.

한글에서 사용한 글머리표도 같이 추출될 수 있는 방법이 없을까요?

◦ Title -­ Sub-Title · Text1

<현재 TestExtractingText.java결과>
Title
Sub-Title
Text1

<글머리추출 결과(원하는 결과)>
◦ Title
-­ Sub-Title
· Text1

페이지 표시에 관련해서 궁금한게 있어서 남깁니다.

<div class="block">한자 긍꼴 리스트</div>

오타 : 한자 긍꼴 리스트 -> 한자 글꼴 리스트

안녕하세요.
한글파일을 HTML파일로 변환하는 프로그램을 만들고 있는 학생입니다.
먼저 이렇게 좋은 모듈을 만들어 주셔서 감사합니다.

현재의 문단이나 표가 어느 페이지(쪽)에 속해 있는지 알아낼 수 있는 방법을 찾지 못해 이렇게 문의를 드립니다.

밑에는 좀더 자세한 설명을 적어 두었습니다.

HTML로 변환 할 시 표가 hwp파일에서 출력된 순서가 아닌 다른 순서로 출력이 되어 확인 해 본 결과,
표가 글자처럼 취급이 되어 있으면 paragraph에 저장된 순서와 일치 하지만,
글자처럼 취급이 되어 있지 않으면 저장된 순서가 일치하지 않는 다는 사실을 알게 되었습니다.

그래서 HTML로 변환 했을 때 hwp 파일에서 보이는 화면과 HTML의 화면이 일치 하게 만들기 위해서 전 처리 후 출력을 할 생각입니다.

문단 같은 경우는
몇 번쨰 페이지인지, 그리고 그 위치(y축 값)를 알아낸 뒤,
LineSegItem의 lineVerticalPosition의 값을 이용하여 페이지 내에서의 문단의 위치를 더해서 문단의 위치를 알아내고,

표 같은 경우는
몇 번쨰 페이지에 속한 표인지 알아내어, 그 페이지의 위치(y축 값)을 알아내어,
CtrlHeaderGso의 yOffset값을 더해서 표의 위치를 알아내려고 생각했습니다.

그리고 문단과 표에 instanceID으로 어느 페이지(쪽)에 속해 있는지 알아낼 수있을 것이라 생각했습니다.
하지만 현재의 문단이나 표가 어느 페이지(쪽)에 속해 있는지 알아낼 수 있는 방법을 찾지 못해 이렇게 문의를 드립니다.

혹시 더 좋은 방법을 알고계신다면 알려 주셨으면 합니다.

밑의 덧글이나 ([email protected]) 로 회신을 해주시길 바랍니다.
감사합니다.

텍스트 추출시 개요 목록 관련 문의 입니다.

안녕하세요.
한글 hwp 텍스트 추출관련 라이브러리를 찾다가 알게되어서 라이브러리 제공에 감사드립니다.
문의 사항이 있어서 이렇게 방법에 대한 질의 드립니다.

  1. 한글에서의 개요보기처럼 문단의 목록을 가져올수 있는지 테스트를 해보고 있는데,
    그 부분이 Paragraph(하나의 문단 객체)와 스타일에서 순번과의 관계(관련) 부분과 조합이 가능할런지요?
    예) 1. 사업개요
    1-1 개요
    1-1-1. 개요내용
    1-2 기타
    1-2-1. 기타 내용

그리고, 한글과 컴퓨터에서 제공하는 한글문서파일형식 문서에서의 tag ID로 데이터를 조합해서,
문서에서의 해당 문단, 스타일과 속성정보를 추출하여, 구조화된 아래의 문서처럼
hml, odt, xml, xml, pdf 같은 형태로 변환도 가능할듯 한데,
그 부분에 대해서 나아갈 방안도 있으신가요?
답변 가능하시면 회신([email protected]) 부탁드립니다.

이런 공유라이브러리도 사용시에 한글과 컴퓨터에서 문제제기가 될지는 잘 모르겠지만, 여러가지 방법을 찾아보고자 이렇게 질의 드립니다.

필드설정시 값의 맨마지막이 줄바꿈 문자일경우 에러가납니다

중간에 ₩n이 있을경우는 정상으로 멀티라인으로 설정되나
마지막에 ₩n이 있을경우 StringIndexOutOfBoundsExcption 에러가 발생합니다.
저는 임시로 FieldFinder.setFieldText메소드의 맨 윗줄에
for(int i = 0; i < textList.size(); i++){
if(textList.get(i).charAt(textList.get(i).length()-1)=='₩n')textList.set(i, textList.get(i).substring(0, textList.get(i).length()-1));
}

를 삽입해서 임시방편으로 쓰고있습니다.
다만 맨마지막이 줄바꿈문자이면 맨마지막 줄바꿈문자만 잘라내는 소스라 제가 쓰는곳은 상관없지만 근본적인 해결책은 아닌거 같습니다.

맨마지막이 줄바꿈문자이면 제대로 맨마지막에 비어있는 줄이 생성되도록 하는 방법이 있을까요?

문서 내에서 컨트롤(이미지 또는 수식)의 위치를 알고 싶습니다.

안녕하세요. 라이브러리 정말 잘 쓰고 있습니다.
한가지 궁금한 사항이 있어 문의 드립니다.

현재 제가 작업하고 있는 내용은 한글 문서안에 컨트롤을 찾아서 어느 위치(페이지, 줄, 칸)에 존재하는지 출력하는 것입니다.
그런데 이리저리 찾아봐도 제가 찾고자 하는 정보가 없네요vv

도움 부탁드립니다.

how to auto break or warp text line in table cell?

how to make the cell content auto warp for cell width.
look like this :
image

i watch the file use 한워드 2018 create file they have two lineSegItem

image
and it have a textStartPositon
image
i want sure the textStartPositon is control the cell content line warp or maybe have other way ?

thank you .

Paragraph 안 내용을 수정하기

우선 정말 좋은 라이브러리를 만들어주셔서 감사합니다.

제가 지금 하고 싶은게 Cell 에서 ParagraphList 를 뽑아 개별 Paragraph 의 내용을 수정하고 싶은데요

아무리 Documentation 을 찾아봐도 deleteText 밖에 보이지 않고 수정 옵션이 없네요.

이럴 경우 deleteText 를 실행 한 뒤 addText 를 하고 TextShape 을 일일히 다 설정 해줘야 될 것 같은데 그게 맞나요?

테이블 셀 필드 명 읽기/쓰기

안녕하세요.
정말 반갑고 고마운 걸 만들어 주셔서 감사합니다.

그런데 제가 못 찾아서 그런건지 모르겠는데 누름틀에 대한 필드명을 찾거나 찾아서 해당 필드에 값을 넣거나 하는 건 있는 것 같은데 테이블의 셀에 필드명을 지정해놓고 해당 셀필드를 찾아 읽거나 쓰는 건 없는 것 같더라구요..

혹시 방법이 있나요? ㅠㅠ;

help,add image to hwp

i want add a picture to the .hwp file. i imitate the TestInsertImage.java code, but not any image show.

please give me some help ,and i not know any korean language.

int streamIndex = hwpFile.getBinData().getEmbeddedBinaryDataList().size() + 1;// get one stream id
String streamName = getStreamName(streamIndex, "jpg"); // get file name
byte[] fileBinary = loadFile(); 

Rectangle shapePosition = new Rectangle(0, 3, 30, 30);
hwpFile.getBinData().addNewEmbeddedBinaryData(streamName, fileBinary);// put binary to bin data
int binDataID =addBinDataInDocInfo(hwpFile, streamIndex); //get bin id

firstParagraph.getText().addExtendCharForGSO(); // i don't know what mean

And then setting something

ControlPicture controlPicture =(ControlPicture)firstParagraph.addNewGsoControl(GsoControlType.Picture); //create a ControlPicture 
            CtrlHeaderGso header = controlPicture.getHeader();
            GsoHeaderProperty prop = header.getProperty();
            prop.setLikeWord(false);
            prop.setApplyLineSpace(false);
            prop.setVertRelTo(VertRelTo.Para);
            prop.setVertRelativeArrange(RelativeArrange.TopOrLeft);
            prop.setHorzRelTo(HorzRelTo.Para);
            prop.setHorzRelativeArrange(RelativeArrange.TopOrLeft);
            prop.setVertRelToParaLimit(true);
            prop.setAllowOverlap(true);
            prop.setWidthCriterion(WidthCriterion.Absolute);
            prop.setHeightCriterion(HeightCriterion.Absolute);
            prop.setProtectSize(false);
            prop.setTextFlowMethod(TextFlowMethod.TopAndBottom);
            prop.setTextHorzArrange(TextHorzArrange.BothSides);
            prop.setObjectNumberSort(ObjectNumberSort.Figure);

            header.setyOffset(fromMM(shapePosition.y));
            header.setxOffset(fromMM(shapePosition.x));
            header.setWidth(fromMM(shapePosition.width));
            header.setHeight(fromMM(shapePosition.height));
            header.setzOrder(0);
            header.setOutterMarginLeft(0);
            header.setOutterMarginRight(0);
            header.setOutterMarginTop(0);
            header.setOutterMarginBottom(0);
            header.setInstanceId(0x5bb840e1);//  i don't know what mean but i think this is very import.
            header.setPreventPageDivide(false);
            header.setExplanation(null);

and setting i think this is very import ,lose this will be print error (when open the .hwp file )

            ShapeComponentNormal sc = (ShapeComponentNormal) controlPicture.getShapeComponent();
            sc.setOffsetX(0);
            sc.setOffsetY(0);
            sc.setGroupingCount(0);
            sc.setLocalFileVersion(1);
            sc.setWidthAtCreate(fromMM(shapePosition.width));
            sc.setHeightAtCreate(fromMM(shapePosition.height));
            sc.setWidthAtCurrent(fromMM(shapePosition.width));
            sc.setHeightAtCurrent(fromMM(shapePosition.height));
            sc.setRotateAngle(0);
            sc.setRotateXCenter(fromMM(shapePosition.width / 2));
            sc.setRotateYCenter(fromMM(shapePosition.height / 2));

            sc.createLineInfo();
            LineInfo li = sc.getLineInfo();
            li.getProperty().setLineEndShape(LineEndShape.Flat);
            li.getProperty().setStartArrowShape(LineArrowShape.None);
            li.getProperty().setStartArrowSize(LineArrowSize.MiddleMiddle);
            li.getProperty().setEndArrowShape(LineArrowShape.None);
            li.getProperty().setEndArrowSize(LineArrowSize.MiddleMiddle);
            ;
            li.getProperty().setFillStartArrow(true);
            li.getProperty().setFillEndArrow(true);
            li.getProperty().setLineType(LineType.None);
            li.setOutlineStyle(OutlineStyle.Normal);
            li.setThickness(0);
            li.getColor().setValue(0);

and then setting ComponentPicture

           ShapeComponentPicture scp = controlPicture.getShapeComponentPicture();

            Color4Byte borderColor = scp.getBorderColor();
            borderColor.setValue(0);
            LineInfoProperty borderProperty = scp.getBorderProperty();
            borderProperty.setLineEndShape(LineEndShape.Flat);
            borderProperty.setStartArrowShape(LineArrowShape.None);
            borderProperty.setStartArrowSize(LineArrowSize.MiddleMiddle);
            borderProperty.setEndArrowShape(LineArrowShape.None);
            borderProperty.setEndArrowSize(LineArrowSize.MiddleMiddle);
            borderProperty.setLineType(LineType.None);
            borderProperty.setFillStartArrow(true);
            borderProperty.setFillEndArrow(true);

            PositionXY leftTop = scp.getLeftTop();
            PositionXY leftBottom = scp.getLeftBottom();
            PositionXY rightBottom = scp.getRightBottom();
            PositionXY rightTop = scp.getRightTop();

            leftTop.setX(0);
            leftTop.setY(fromMM(shapePosition.height));
            rightTop.setX(fromMM(shapePosition.width));
            rightTop.setY(fromMM(shapePosition.height));
            leftBottom.setX(0);
            leftBottom.setY(0);
            rightBottom.setX(fromMM(shapePosition.width));
            rightBottom.setY(0);

            PictureInfo pictureInfo = scp.getPictureInfo();
            pictureInfo.setBinItemID(binDataID);
            pictureInfo.setContrast((byte) 0);
            pictureInfo.setBrightness((byte) 0);
            pictureInfo.setEffect(PictureEffect.RealPicture);

            scp.setImageHeight(fromMM(shapePosition.height));
            scp.setImageWidth(fromMM(shapePosition.width));
            scp.setInstanceId(0x5bb810e1); // and the `instanceld` with above has some relation?

            scp.setTopAfterCutting(0);
            scp.setLeftAfterCutting(0);
            scp.setBottomAfterCutting(0);
            scp.setRightAfterCutting(0);

Ok final write out

            String writePath = "sample_hwp\\test-my-image.hwp";
            HWPWriter.toFile(hwpFile, writePath);
            System.out.println("done");

above code run out ,i open got black, no image,no error,
i missing something or write bad code .

please help me ,thank you.

표 정보 읽어오기 예제 소스

한글 파일 안에 있는 표를 찾아서 표의 각 셀에 있는 텍스트 정보를 얻어오고 싶습니다.
HwpCtrl.ocx 를 이용할때는 CtrlID 값을 이용해서 테이블을 찾고 MovePos 등을 사용하여 이동하면서
텍스트 정보를 얻어왔었는데요.
hwplib 를 사용해서 같은 기능을 구현해보고 싶은데 어렵네요.

혹 간단한 예제 좀 부탁드려도 될까요?
수고하세요 ^^

테이블 이용시 에러

hwp 빈 문서에다 표 하나만 그려놓고 해당 rows와 cell수에 맞게 입력을 하려하고있습니다. (ReWrite 형식으로)

  1. 섹션을 우선 구하고
    Section s = hwpFile.getBodyText().getSectionList().get(0);

  2. 첫 파라그래프에
    Paragraph p = s.getParagraph(0);

  3. 테이블을 가져와서
    ControlTable ct = (ControlTable) p.getControlList().get(0);

  4. 테이블 정보를 입력하고
    ct.getTable().addCellCountOfRow(3);
    ct.addNewRow();
    ArrayList rows = ct.getRowList();
    for(int i = 0; i < 3; i++)
    {
    Cell cell = rows.get(0).addNewCell();
    Paragraph para = cell.getParagraphList().addNewParagraph();
    para.createText();
    para.getText().addString("" + i);
    }

  5. 파일을 씁니다.
    long filename = new Date().getTime();
    HWPWriter.toFile(hwpFile, "D:/upload/" + filename + ".hwp");

3번 테이블 가져오는데서 에러가 나네요. 에러코드는 아래와 같습니다.
kr.dogfoot.hwplib.object.bodytext.control.ControlSectionDefine cannot be cast to kr.dogfoot.hwplib.object.bodytext.control.ControlTable

추가적으로 아예 컨트롤을 생성해서 p.addNewGsoControl 을 사용하면 NullPointer가 ForPharagraph.java에서 잡혀버리구요.

어떤식으로 테이블 추가나 수정을 해야하나요?

질문이 있습니다.

안녕하세요.
먼저 Cell field에 관련된 사항 추가해주셔서 감사합니다.^^;
질문이 하나 있어서 글 올립니다.
현재 파일형식이 hwp인 파일만 읽어서 할 수 있는 거죠?
이 외 HWPML형식의 파일(확장자 hml)을 읽어서 할 수 있는 방법도 있는건지 궁금합니다.
만약 할 수 있다고 해도 현재 개발하신 것을 수정하는게 아니라 새로 개발해야 되는 것인지 궁금합니다.

감사합니다^^

hwp파일에서 이미지만 추출하는 방법 문의

올려주신 작업관련하여 큰 감동과 많은 도움을 받고 있습니다.
감사합니다.

초보 작업자로 하나 여쭙고 싶습니다.
HWP파일에서 이미지만 추출하고 싶습니다.

작업하신 소스를 보고 이미지를 추출하는 방법을 아래처럼 작성해 봤습니다.
추출은 잘 되는데, 실제 윈도우에서 추출된 파일을 읽어보면 이미지 파일이 읽어지지 않습니다.

가르침을 받고자 합니다.
감사합니다.

이 사이트에 말씀을 주시거나 메일로 말씀주셔도 됩니다. (연락처: [email protected])

다시한번 감사인사 드립니다.
감사합니다.

== 예시 ==

	String strFilePath = "c://tmp/hwp01/test-image.hwp";
	
	HWPFile hwpFile = HWPReader.fromFile(strFilePath);
	List<EmbeddedBinaryData> list = hwpFile.getBinData().getEmbeddedBinaryDataList();
	
	for(EmbeddedBinaryData e:list) {
				
		byte[] byteData = e.getData();
		
		String filePath = "c://tmp/" + e.getName();
		Path path = Paths.get(filePath);
		Files.write(path, byteData);			
	}

Table Row 추가 시 HWP가 Crash 합니다

안녕하세요 ^^

만들어주신 라이브러리 잘 쓰다가 테이블 조작에서 문제가 발생해 문의사항 남깁니다.

ControlTable distNRetrieveTable = (ControlTable) tables.get(1); ArrayList<Row> distNRetrieveRows = distNRetrieveTable.getRowList(); distNRetrieveTable.addNewRow().addNewCell();

위와 같은 경우에 기존에 있는 테이블을 하나 선택하여 새로운 Row를 추가할려고 했는데 이럴경우
실행은 잘 되지만 새로 저장된 문서를 HWP 로 실행 시 프로그램이 Crash 됩니다.
정확히는 addNewRow() 만 적용 하였을 경우 Crash 하고 addNewCell() 까지 넣으면 HWP가 손상된 테이블이 있다며 복원하겠냐고 물어봅니다.

현재 사용하는 버전은 다음과 같습니다.

문서 버전 : 5.0.4.0.1
프로그램 버전: 9.0.0.562

안녕하세요. 혹시 Apache Tika 프로젝트에 integrate 가능할까요??

여러 포멧의 문서파일들에 대한 형식추출 및 본문추출을 개발하기 위해 라이브러리를 찾던중에 Apache Tika 프로젝트를 발견해서 사용중에 있습니다.
대부분의 문서 포멧이 지원하나, 한글 문서는 지원을 안하더라고요.
hwp-v3, hwp-v5 는 위에 https://issues.apache.org/jira/browse/TIKA-1728 이슈로 인하여 타 라이브러리를 통해서 detect만 가능한 상황입니다.

아무래도 한글파일(hwp)을 사용하는 나라가 거의 없다보니, 지원이 안되고 있는거 같습니다.
혹시 Apache Tika 에 hwp 파일 관련 parser 로 추가되도록 지원 가능할까요??

https://issues.apache.org/jira/browse/TIKA-1731?focusedCommentId=16840414&page=com.atlassian.jira.plugin.system.issuetabpanels%3Acomment-tabpanel#comment-16840414

위 이슈 댓글보시고 가능하실때 검토 부탁드립니다.
감사합니다!

밑줄 텍스트 추출 관련 문제

HWPFile hwpFile = HWPReader.fromFile(dataPath+fileName);
ParaCharShape paraText =hwpFile.getBodyText().getSectionList().get(0).getParagraph(1).getCharShape();

getCharShapePeoperty 를 이용해서 문단안에있는 텍스트들의 밑줄의 종류를 가져오고 싶은데 도대체 어떻게 가져오는지 잘모르겠습니다.

안녕하세요. 몇가지 질문사항이 있어 문의 드립니다.

우선 감사합니다.
이번 프로젝트에서 한글 파일로 파일 추출하는게 있어서.. 찾다가 여기까지 왔습니다.
이렇게 만들어 주셔서 정말 감사합니다.

작업하던 중 확인하고자 하는 부분이 있어서 질문을 드립니다.

혹시 특정 Table을 복사 해뒀다가 복사 하는 기능 같은 것도 있나 해서 질문 드려 봅니다.

또, Table에서 Row를 삭제 하는 기능이 있는지도 알고 싶습니다.

table.getRowList().remove(2);
이런식으로 했더니.. 한글 문서가 중간에 뻣어 버리네요.

감사합니다.

한글문서 읽어들일때

일단 이런 엄청난 라이브러리를 개발해주셔서 정말 감사합니다.

다름이 아니라. 라이브러리를 빌드후 .jar로 라이브러리를 불러들여와 사용하려고 하는데

HWPReader.fromFile()에서 오류가 발생합니다.

Exception in thread "main" java.io.FileNotFoundException: no such entry: "Section1", had: [Section0]
Exception in thread "main" java.lang.Exception: List header must be located.

jdk7, 8로 해보아도 결과는 같았습니다. 혹시 읽히지 않는 한글파일의 조건이 있나요. 몇시간 씨름하고 있는데, 답답한 마음에 올려봅니다.

한글 버전은 NEO사용중입니다.

문서버전은 5.0.2.5.1, 프로그램 버전은 7.5.12.721 입니다.

계속 테스트중이긴 한데, sample_hwp에 들어있는 파일들은 읽고 쓰는 것이 가능한데, 제가 보유하고 있는 한글 파일들은 대부분 열지 못합니다.

혹시 특정 Table를 찾을 수 있는 방법이 있나요??

안녕하세요...^^
이번 프로젝트에서 한글로 문서를 출력해 달라는 요청이 있어서
구글링 하다가 여기까지 왔습니다.

다행이 이렇게 만들어 져 있어서 감사했습니다.

그런데 여러가지를 찾다 보니까 제가 못 찾는건지..

특정 Table을 찾는것이 안되더라구요..
하려그는게 기존에 있던 Table에 Row를 추가하고 싶은데
Cell을 찾는 것은 지원이 되는데 그 Cell이 속한 Table을 찾는것을 어떻게 해야 할지 몰라서 이렇게 문의 합니다.

안녕하세요 Apache Tika 에 hwp 파일 관련 parser 로 추가되도록 동참하고싶습니다.

안녕하세요.

저는 개방형 OS인 하모니카OS에서 한글 사용자들의 업무 환경을 개선하고자
다양한 문서들의 원문 검색 엔진을 만들어 하모니카 OS에 배포하며, Apache Tika에 반영을 하여 누구나 사용할 수 있도록 오픈소스로 운영할 계획을 가지고 프로젝트를 운영하던중
Apache Tika에서 한글(hwp)에 관련되 이슈를 발견하였고 Apache Tika 이슈에서 kyoungseok-joo님이 올리신 해당 글을 발견하였습니다.
저 또한 neolord0님의 한글 라이브러리를 Apache Tika에 hwp parser로 추가되도록 동참을 하고 싶습니다.

감사합니다.

안녕하세요. 파일 HWP 저장하는 것에 궁금증이 있어 문의 드려요.

안녕하세요.
항상 와서 구경하고 있어요. 매번 감사드립니다.
HWP파일을 저장하는 API도 추가된 걸 확인했어요.
혹시 저장할때 해당 한글파일의 누름틀영역에 문자열을 넣고 저장할 수 있는 기능이 있나요?

찾아봐도 안찾아져서요.
답변 기다릴게요. ^^
감사합니다.

헤더푸터

노고가 많으십니다.

헤더나 푸터에 문단으로 이미지나 텍스트를 쓸 수 있는 방법이 있을까요?

감사합니다.

컨트롤 찾기에 대한 아이디어

안녕하세요. 좋은 라이브러리 공개해 주셔서 정말 감사드립니다.
이 라이브러리를 이용해 개발 중 아이디어가 있어 문의드립니다.
현재 Control을 찾는 방법은 하나의 Hwp문서에서 상하관계없이 무조건 단독의 객체에서 검색하는데
같은 내용이 여러군데 있거나 하나의 특정한 Control(예를들어 Table)안에서 또다른 Control을 찾는 등 계층형으로 검색이 불가합니다.
따라서 Find/Filter등을 HwpFile이 아닌 Control자체에서 찾을 수 있게 하면 이런게 가능하지 않을까 생각해봅니다^^

셀병합 문의 드립니다.

안녕하세요.
먼저 한글 생성 라이브러리 제공에 감사드립니다~~

제공하시는 라이브러리로 개발 중 문의 사항이 있서서 도움 요청드립니다.

단순 표는 작성에는 문제가 없으나 셀을 병합시 문서 생성이 되지 않습니다.(컴파일 오류는 없고 손상된 문서가 생성됩니다.)

제가 원하는 형태는
____ 포도
과일 딸기
____ 수박
채소 호박
육류 소고기
____ 돼지고기
( 이 편집기 에서는 여러 빈칸이 적용되지 않아 밑줄 넣었습니다.)

이런 식인데 셀 병합을 위해
setListHeaderForCell 을 변경 하여

setListHeaderForCellSpan(int colIndex, int rowIndex , int colSpan , int rowSpan)
으로 병합될 개수를 입력 받게 변경 후

....
for.....
...
if( colnum ==0 && ...
setListHeaderForCellSpan(colnum, rownum , 0 , 3);
setListHeaderForCell(colnum, rownum);
....

이런 식으로 호출해서 사용 해 보았으나 (병합되는 첫 row에서 실행하거나 ,마지막에 실행 하거나, 병합되는 모든 행에서 실행 등등...)

문서 생성은 정상적이나 손상된 문서라 열리지가 않습니다...

도움 부탁드립니다.
감사합니다.

kr.dogfoot.hwplib.reader.HWPReader.fromURL 관련 문의 입니다

혹시 배포용 문서를 일반문서로 바꾸려면 어떻게 하면 좋을까요?

https://github.com/forcom/HwpSharp

C#으로 이런 코드가 있는데.. 제 생각에 이건 Push 안된지 꽤 오래 된것 같고
https://openhwp.azurewebsites.net/
이런 프로그램이 있습니다.

Code Level에서 배포용 문서를 일반문서로 변경하고 싶은데요.
혹시 이미 작업된 부분이 있다거나...
어떤 부분을 고치면 될것이다. 라는 점 슬쩍 알려주시면
한번 제가 작업해보려고 하는데요.

알려주시면 정말 감사하겠습니다.

kr.dogfoot.hwplib.reader.HWPReader.fromURL 관련 문의 입니다.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.