|
|
|
|
@ -2,9 +2,11 @@ package cokr.xit.base.docs.hwp;
|
|
|
|
|
|
|
|
|
|
import java.awt.Rectangle;
|
|
|
|
|
import java.io.FileInputStream;
|
|
|
|
|
import java.io.InputStream;
|
|
|
|
|
import java.util.ArrayList;
|
|
|
|
|
import java.util.function.BiConsumer;
|
|
|
|
|
|
|
|
|
|
import cokr.xit.foundation.AbstractComponent;
|
|
|
|
|
import cokr.xit.foundation.Assert;
|
|
|
|
|
import kr.dogfoot.hwplib.object.bindata.BinData;
|
|
|
|
|
import kr.dogfoot.hwplib.object.bodytext.control.ctrlheader.CtrlHeaderGso;
|
|
|
|
|
@ -42,7 +44,7 @@ import kr.dogfoot.hwplib.object.docinfo.borderfill.fillinfo.PictureEffect;
|
|
|
|
|
/**한글 파일의 이미지 처리를 지원하는 클래스
|
|
|
|
|
* @author mjkhan
|
|
|
|
|
*/
|
|
|
|
|
public class Image {
|
|
|
|
|
public class Image extends AbstractComponent {
|
|
|
|
|
private HWPWriter writer;
|
|
|
|
|
private int instanceID = 0x5bb840e1;
|
|
|
|
|
|
|
|
|
|
@ -62,14 +64,13 @@ public class Image {
|
|
|
|
|
dataID = addToDocInfo(index, getExt(path));
|
|
|
|
|
|
|
|
|
|
ControlRectangle ctrlRect = newRect(paragraph);
|
|
|
|
|
|
|
|
|
|
setCtrlHeaderGso(ctrlRect, rect);
|
|
|
|
|
setShapeComponent(ctrlRect, rect, dataID);
|
|
|
|
|
setShapeComponentRectangle(ctrlRect, rect);
|
|
|
|
|
|
|
|
|
|
return this;
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
throw Assert.runtimeException(e);
|
|
|
|
|
throw runtimeException(e);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@ -82,6 +83,40 @@ public class Image {
|
|
|
|
|
return add(path, paragraph, new Rectangle(50, 50, 100, 100));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**주어진 InputStream을 지정한 이름으로 지정한 문단의 영역에 추가한다.
|
|
|
|
|
* @param name 이미지 파일 경로
|
|
|
|
|
* @param input InputStream
|
|
|
|
|
* @param paragraph 문단
|
|
|
|
|
* @param rect 이미지 영역
|
|
|
|
|
* @return 현재 Image
|
|
|
|
|
*/
|
|
|
|
|
public Image add(String name, InputStream input, Paragraph paragraph, Rectangle rect) {
|
|
|
|
|
try {
|
|
|
|
|
BinData binData = writer.file.getBinData();
|
|
|
|
|
int index = addData(binData, name, input),
|
|
|
|
|
dataID = addToDocInfo(index, getExt(name));
|
|
|
|
|
|
|
|
|
|
ControlRectangle ctrlRect = newRect(paragraph);
|
|
|
|
|
setCtrlHeaderGso(ctrlRect, rect);
|
|
|
|
|
setShapeComponent(ctrlRect, rect, dataID);
|
|
|
|
|
setShapeComponentRectangle(ctrlRect, rect);
|
|
|
|
|
|
|
|
|
|
return this;
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
throw runtimeException(e);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**주어진 InputStream을 지정한 이름으로 지정한 문단에 추가한다.
|
|
|
|
|
* @param name 이미지 파일 경로
|
|
|
|
|
* @param input InputStream
|
|
|
|
|
* @param paragraph 문단
|
|
|
|
|
* @return 현재 Image
|
|
|
|
|
*/
|
|
|
|
|
public Image add(String name, InputStream input, Paragraph paragraph) {
|
|
|
|
|
return add(name, input, paragraph, new Rectangle(50, 50, 100, 100));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**지정한 경로의 이미지 파일을 추가하는 함수를 반환한다.
|
|
|
|
|
* @param path 이미지 파일 경로
|
|
|
|
|
* @return 이미지 파일을 추가하는 함수
|
|
|
|
|
@ -91,6 +126,14 @@ public class Image {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private int addData(String path) throws Exception {
|
|
|
|
|
BinData binData = writer.file.getBinData();
|
|
|
|
|
int index = binData.getEmbeddedBinaryDataList().size() + 1;
|
|
|
|
|
String ext = getExt(path),
|
|
|
|
|
name = String.format("Bin%04X", index) + (!ext.isEmpty() ? "." + ext : ext);
|
|
|
|
|
try (FileInputStream input = new FileInputStream(path)) {
|
|
|
|
|
return addData(binData, name, input);
|
|
|
|
|
}
|
|
|
|
|
/*
|
|
|
|
|
BinData binData = writer.file.getBinData();
|
|
|
|
|
int index = binData.getEmbeddedBinaryDataList().size() + 1;
|
|
|
|
|
String ext = getExt(path),
|
|
|
|
|
@ -101,6 +144,13 @@ public class Image {
|
|
|
|
|
binData.addNewEmbeddedBinaryData(name, bytes, BinDataCompress.ByStorageDefault);
|
|
|
|
|
return index;
|
|
|
|
|
}
|
|
|
|
|
*/
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private int addData(BinData binData, String name, InputStream inputStream) throws Exception {
|
|
|
|
|
byte[] bytes = inputStream.readAllBytes();
|
|
|
|
|
binData.addNewEmbeddedBinaryData(name, bytes, BinDataCompress.ByStorageDefault);
|
|
|
|
|
return binData.getEmbeddedBinaryDataList().size();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static String getExt(String path) {
|
|
|
|
|
@ -117,7 +167,8 @@ public class Image {
|
|
|
|
|
property.setState(BinDataState.NotAccess);
|
|
|
|
|
|
|
|
|
|
binData.setBinDataID(index);
|
|
|
|
|
binData.setExtensionForEmbedding(ext);
|
|
|
|
|
if (!isEmpty(ext))
|
|
|
|
|
binData.setExtensionForEmbedding(ext);
|
|
|
|
|
|
|
|
|
|
ArrayList<kr.dogfoot.hwplib.object.docinfo.BinData> dataList = writer.file.getDocInfo().getBinDataList();
|
|
|
|
|
dataList.add(binData);
|
|
|
|
|
|