Java를 사용하여 PDF 파일에서 벡터 데이터 추출
Contents
[
Hide
]
PDF 문서의 벡터 데이터에 액세스
GraphicsAbsorber를 사용하여 페이지의 벡터 그래픽 요소를 검사하고 해당 기본 형상을 텍스트 파일에 씁니다.
Document인스턴스에서 소스 PDF를 여세요.GraphicsAbsorber를 만들고 대상Page를 방문하여 벡터 그래픽 작업을 수집하세요.- 추출된
GraphicElement개체를 반복하고 해당 개체의 직사각형, 위치 및 연산자 컬렉션을 읽으세요. - 각 요소에 대한 기하학 및 연산자 수 세부 정보를 사용하여 출력 텍스트를 작성하세요.
- 추출된 벡터 데이터를 출력 파일에 쓰세요.
public static void extractGraphicsElements(Path inputFile, Path outputFile) throws Exception {
try (Document document = new Document(inputFile.toString())) {
GraphicsAbsorber absorber = new GraphicsAbsorber();
absorber.visit(document.getPages().get_Item(1));
StringBuilder text = new StringBuilder();
int index = 1;
for (GraphicElement element : absorber.getElements()) {
text.append("Element ").append(index)
.append(": Rectangle = ").append(element.getRectangle())
.append(", Position = ").append(element.getPosition())
.append(", Operators = ").append(element.getOperators().size())
.append("\n");
index++;
}
Files.writeString(outputFile, text.toString());
}
}
페이지 벡터 그래픽을 SVG에 저장
Document인스턴스에서 소스 PDF를 여세요.- 문서에서 대상
Page를 가져오세요. - 해당 페이지의 벡터 그래픽 콘텐츠를 SVG로 직접 내보내려면
page.trySaveVectorGraphics(outputFile.toString())를 호출하세요.
public static void saveVectorGraphicsToSvg(Path inputFile, Path outputFile) {
try (Document document = new Document(inputFile.toString())) {
Page page = document.getPages().get_Item(1);
page.trySaveVectorGraphics(outputFile.toString());
}
}
추출된 각 요소를 별도의 SVG에 저장
Document인스턴스에서 소스 PDF를 여세요.GraphicsAbsorber를 만들고 대상Page를 방문하세요.- 파일을 쓰기 전에 추출된 하위 경로에 대한 출력 디렉터리를 만드세요.
- 추출된
GraphicElement개체를 반복하고 각 요소에 대해saveToSvg(...)를 호출하세요. - 추출된 모든 요소를 별도의 SVG 파일에 저장하세요.
public static void extractSubpathsToSvgs(Path inputFile, Path outputDir) throws Exception {
try (Document document = new Document(inputFile.toString())) {
GraphicsAbsorber absorber = new GraphicsAbsorber();
absorber.visit(document.getPages().get_Item(1));
Path subpathsDir = outputDir.resolve("subpaths");
Files.createDirectories(subpathsDir);
int index = 1;
for (GraphicElement element : absorber.getElements()) {
element.saveToSvg(subpathsDir.resolve("subpath_" + index + ".svg").toString());
index++;
}
}
}
추출된 요소를 단일 SVG로 결합
Document인스턴스에서 소스 PDF를 여세요.GraphicsAbsorber를 만들고 대상Page를 방문하세요.- 결합된 벡터 조각을 포함할 SVG 래퍼 마크업을 만드세요.
- 추출된
GraphicElement개체를 반복하고 생성된 각 SVG 조각을 추가하세요. - 결합된 SVG 출력을 대상 파일에 쓰세요.
public static void extractListOfElementsToSingleImage(Path inputFile, Path outputFile) throws Exception {
try (Document document = new Document(inputFile.toString())) {
GraphicsAbsorber absorber = new GraphicsAbsorber();
absorber.visit(document.getPages().get_Item(1));
StringBuilder svg = new StringBuilder();
svg.append("<svg xmlns=\"http://www.w3.org/2000/svg\">\n");
for (GraphicElement element : absorber.getElements()) {
svg.append(element.saveToSvg()).append("\n");
}
svg.append("</svg>\n");
Files.writeString(outputFile, svg.toString());
}
}
단일 벡터 요소 추출
Document인스턴스에서 소스 PDF를 여세요.GraphicsAbsorber를 만들고 대상Page를 방문하세요.- 추출된 요소 컬렉션에서 필수
GraphicElement을 가져오세요. - 선택한 요소가
XFormPlacement인지 확인하고 필요한 경우 중첩된 요소로 내려가세요. - 선택한 벡터 요소를 출력 SVG 파일에 저장하세요.
public static void extractSingleVectorElement(Path inputFile, Path outputFile) {
try (Document document = new Document(inputFile.toString())) {
GraphicsAbsorber graphicsAbsorber = new GraphicsAbsorber();
Page page = document.getPages().get_Item(1);
graphicsAbsorber.visit(page);
if (graphicsAbsorber.getElements().size() > 1) {
GraphicElement xformPlacement = graphicsAbsorber.getElements().get_Item(1);
if (xformPlacement instanceof XFormPlacement) {
XFormPlacement placement = (XFormPlacement) xformPlacement;
if (placement.getElements().size() > 2) {
placement.getElements().get_Item(2).saveToSvg(outputFile.toString());
}
} else {
xformPlacement.saveToSvg(outputFile.toString());
}
}
}
}