Extraer datos vectoriales de un archivo PDF usando Java
Contents
[
Hide
]
Acceder a datos vectoriales de un documento PDF
Utilice GraphicsAbsorber para inspeccionar los elementos gráficos vectoriales en una página y escribir su geometría básica en un archivo de texto.
- Abra el PDF de origen en una instancia de
Document. - Cree un
GraphicsAbsorbery visite el objetivoPagepara recopilar operaciones de gráficos vectoriales. - Itere a través de los extraídos
GraphicElementobjetos y lea sus colecciones de rectángulo, posición y operadores. - Construya el texto de salida con detalles de geometría y recuento de operadores para cada elemento.
- Escriba los datos vectoriales extraídos en el archivo de salida.
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());
}
}
Guardar gráficos vectoriales de la página en SVG
- Abra el PDF de origen en una instancia de
Document. - Obtenga el objetivo
Pagedel documento. - Llame
page.trySaveVectorGraphics(outputFile.toString())para exportar el contenido de gráficos vectoriales de esa página directamente a SVG.
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());
}
}
Guardar cada elemento extraído en un SVG separado
- Abra el PDF de origen en una instancia de
Document. - Cree un
GraphicsAbsorbery visite el objetivoPage. - Cree el directorio de salida para los subcaminos extraídos antes de escribir cualquier archivo.
- Itere a través de los extraídos
GraphicElementobjetos y llamadasaveToSvg(...)para cada elemento. - Guarde cada elemento extraído en un archivo SVG separado.
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++;
}
}
}
Combinar los elementos extraídos en un solo SVG
- Abra el PDF de origen en una instancia de
Document. - Cree un
GraphicsAbsorbery visite el objetivoPage. - Cree el marcado contenedor SVG que contendrá los fragmentos vectoriales combinados.
- Itere a través de los extraídos
GraphicElementobjetos y agregue cada fragmento SVG generado. - Escriba la salida SVG combinada en el archivo de destino.
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());
}
}
Extraer un único elemento vectorial
- Abra el PDF de origen en una instancia de
Document. - Cree un
GraphicsAbsorbery visite el objetivoPage. - Obtenga lo requerido
GraphicElementde la colección de elementos extraídos. - Verifique si el elemento seleccionado es un
XFormPlacementy descienda a sus elementos anidados cuando sea necesario. - Guarde el elemento vectorial seleccionado en el archivo SVG de salida.
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());
}
}
}
}