Extraer SVG integrado y externo de HTML en Java
Aspose.HTML for Java
carga una página web en un HTMLDocument para que la aplicación pueda examinar tanto el marcado SVG integrado como los recursos SVG enlazados. Los gráficos integrados aparecen como elementos <svg> en el DOM, mientras que los archivos SVG externos pueden estar referenciados por elementos como <img src="image.svg">.
Para guardar un gráfico integrado, escriba su valor getOuterHTML() en un archivo .svg. Para un gráfico externo, resuelva su URL relativa con respecto a document.getBaseURI(), solicite el recurso mediante el servicio de red del documento y guarde los bytes recibidos sin volver a codificarlos.
Guardar gráficos SVG encontrados en una página web
El ejemplo Java guarda cada elemento <svg> integrado y descarga los archivos SVG externos únicos referenciados por elementos <img>. Los nombres distintos permiten identificar fácilmente ambos tipos de origen en el directorio de salida svg.
Extraer SVG de un sitio web en Java
Path outputDirectory = Paths.get("svg");
Files.createDirectories(outputDirectory);
try (HTMLDocument document = new HTMLDocument("https://products.aspose.com/html/java/")) {
// Save inline SVG elements as standalone files
HTMLCollection inlineSvgElements = document.getElementsByTagName("svg");
int inlineNumber = 1;
for (Element svgElement : inlineSvgElements) {
Path outputPath = outputDirectory.resolve("inline-" + inlineNumber + ".svg");
byte[] svgMarkup = svgElement.getOuterHTML().getBytes(StandardCharsets.UTF_8);
Files.write(outputPath, svgMarkup);
inlineNumber++;
}
// Collect distinct external SVG sources from image elements
HTMLCollection images = document.getElementsByTagName("img");
Set<String> externalSources = new LinkedHashSet<>();
for (Element image : images) {
String source = image.getAttribute("src");
if (source.isEmpty()) {
continue;
}
Url resourceUrl = new Url(source, document.getBaseURI());
if (resourceUrl.getPathname().toLowerCase().endsWith(".svg")) {
externalSources.add(source);
}
}
int externalNumber = 1;
for (String source : externalSources) {
Url resourceUrl = new Url(source, document.getBaseURI());
RequestMessage request = new RequestMessage(resourceUrl);
ResponseMessage response = document.getContext().getNetwork().send(request);
if (response.isSuccess()) {
Path outputPath = outputDirectory.resolve("external-" + externalNumber + ".svg");
Files.write(outputPath, response.getContent().readAsByteArray());
externalNumber++;
}
}
}
Pasos para extraer SVG en Java
- Cargue la página de destino con
HTMLDocument. - Reúna los elementos
<svg>integrados congetElementsByTagName("svg")y escriba el valorgetOuterHTML()de cada elemento como texto UTF-8. - Reúna los elementos
<img>y lea sus atributossrcno vacíos. - Resuelva cada origen relativo con
Urly conserve las URL cuya ruta termine en.svg. - Envíe un
RequestMessagepara cada SVG externo y compruebe elResponseMessage. - Guarde cada respuesta correcta como archivo
.svgconFiles.write().
SVG integrado y SVG externo
Un SVG integrado forma parte del DOM HTML. Su marcado XML está disponible mediante el elemento <svg> correspondiente y puede serializarse con getOuterHTML().
Un SVG externo es un recurso independiente referenciado mediante una URL. El código descarga archivos utilizados por elementos <img>. Los SVG referenciados desde otros elementos, CSS o enlaces a fragmentos requieren selectores adecuados para esas ubicaciones.
Consulte Extraer SVG de un sitio web – Aspose.HTML for Java para ver los procedimientos documentados para SVG integrado y externo.
Aspectos importantes al extraer SVG
- Mantenga separados los SVG integrados y externos. Un SVG integrado se serializa desde el DOM, mientras que un SVG externo se descarga como respuesta de un recurso.
- Utilice nombres de salida únicos. Los gráficos integrados no tienen un nombre de archivo original y distintas URL externas pueden compartir el mismo segmento final de ruta.
- Compruebe todas las respuestas de recursos. Una URL externa puede devolver una página de error, una respuesta de autenticación o contenido no disponible en lugar de datos SVG.
- Tenga en cuenta las colecciones grandes.
readAsByteArray()almacena en memoria cada respuesta SVG externa. Utilice una estrategia de streaming cuando una página pueda referenciar archivos inusualmente grandes o numerosos recursos. - Valide el contenido que no sea de confianza. Trate el SVG descargado como contenido activo basado en XML y revise scripts, enlaces y referencias externas antes de publicarlo o mostrarlo.
- Respete los derechos de autor y las condiciones del sitio web. Extraiga y reutilice solo gráficos SVG propios o para los que tenga autorización. La disponibilidad pública no concede permiso para redistribuir logotipos, iconos o ilustraciones protegidos.
Preguntas frecuentes
1. ¿Por qué algunas imágenes SVG no se pueden descargar directamente de un sitio web?
Muchos sitios web integran los gráficos como elementos <svg> en lugar de enlazar archivos .svg independientes. Un SVG integrado debe localizarse en el DOM HTML y guardarse desde su marcado getOuterHTML(), no descargarse desde una URL de recurso.
2. ¿Cómo se extraen archivos e iconos SVG de una página web en Java?
Aspose.HTML for Java puede examinar las referencias SVG presentes en un documento cargado, pero ningún selector único cubre todas las ubicaciones. Compruebe los elementos <svg> integrados, <img src>, <object data>, <embed src>, los valores CSS url() y las referencias a sprites SVG según la forma en que la página incluya los gráficos.
3. ¿La extracción de SVG desde HTML conserva la calidad vectorial?
Guardar el marcado SVG integrado o los bytes originales de un SVG externo no rasteriza el gráfico, por lo que se conservan sus trazados vectoriales y dimensiones escalables. El archivo guardado puede mostrarse de forma diferente si depende de CSS, fuentes, imágenes, scripts o símbolos externos de la página que no se hayan copiado.
4. ¿Puede Aspose.HTML for Java extraer archivos SVG de un sitio web completo?
Aspose.HTML for Java extrae SVG de la página cargada en un HTMLDocument, pero no rastrea automáticamente todas las páginas de un dominio. Para procesar un sitio web completo, enumere las URL de página permitidas, examine cada documento y elimine los recursos SVG duplicados.
Instalar Aspose.HTML for Java
Añada Aspose.HTML for Java desde el repositorio oficial de Aspose. Sustituya ASPOSE_HTML_VERSION por un número de versión exacto de la página de
versiones de Aspose.HTML for Java
y, a continuación, vuelva a cargar o compilar el proyecto para resolver la dependencia.
Añada el repositorio y la dependencia al proyecto Maven:
Maven – pom.xml
<repositories>
<repository>
<id>AsposeJavaAPI</id>
<url>https://releases.aspose.com/java/repo/</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>com.aspose</groupId>
<artifactId>aspose-html</artifactId>
<version>ASPOSE_HTML_VERSION</version>
</dependency>
</dependencies>Añada el repositorio y la dependencia al proyecto Gradle:
Gradle – build.gradle
repositories {
maven {
url = uri('https://releases.aspose.com/java/repo/')
}
}
dependencies {
implementation 'com.aspose:aspose-html:ASPOSE_HTML_VERSION'
}Utilice una versión del JDK compatible con la versión seleccionada. Consulte Instalación – Aspose.HTML for Java para obtener instrucciones sobre la instalación manual del archivo JAR, Kotlin DSL, las actualizaciones y la solución de problemas de dependencias.
Tareas relacionadas de SVG y extracción en Java
Continúe con la extracción de imágenes, la página principal de extracción de datos en Java o los ejemplos de conversión de SVG.