Extraire des SVG en ligne et externes du HTML en Java

Aspose.HTML for Java charge une page web dans un HTMLDocument afin que l’application puisse examiner le balisage SVG en ligne et les ressources SVG liées. Les graphiques en ligne apparaissent sous forme d’éléments <svg> dans le DOM, tandis que les fichiers SVG externes peuvent être référencés par des éléments tels que <img src="image.svg">.

Pour enregistrer un graphique en ligne, écrivez sa valeur getOuterHTML() dans un fichier .svg. Pour un graphique externe, résolvez son URL relative par rapport à document.getBaseURI(), demandez la ressource avec le service réseau du document et enregistrez les octets renvoyés sans les réencoder.


Enregistrer les SVG trouvés dans une page web

L’exemple Java enregistre chaque élément <svg> en ligne et télécharge les fichiers SVG externes distincts référencés par des éléments <img>. Des noms séparés permettent d’identifier facilement les deux types de source dans le répertoire de sortie svg.

Extraire des SVG d’un site 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++;
        }
    }
}

Étapes pour extraire des SVG en Java

  1. Chargez la page cible avec HTMLDocument .
  2. Récupérez les éléments <svg> en ligne avec getElementsByTagName("svg") et écrivez la valeur getOuterHTML() de chaque élément sous forme de texte UTF-8.
  3. Récupérez les éléments <img> et lisez leurs attributs src non vides.
  4. Résolvez chaque source relative avec Url et conservez les URL dont le chemin se termine par .svg.
  5. Envoyez un RequestMessage pour chaque SVG externe et vérifiez le ResponseMessage .
  6. Enregistrez chaque réponse valide dans un fichier .svg avec Files.write().

SVG en ligne et SVG externe

Un SVG en ligne fait partie du DOM HTML. Son balisage XML est disponible par l’intermédiaire de l’élément <svg> correspondant et peut être sérialisé avec getOuterHTML().

Un SVG externe est une ressource distincte référencée par une URL. Le code télécharge les fichiers utilisés par les éléments <img>. Les SVG référencés depuis d’autres éléments, des styles CSS ou des liens de fragment nécessitent des sélecteurs adaptés à ces emplacements.

Consultez Extraire des SVG d’un site web – Aspose.HTML for Java pour découvrir les processus documentés concernant les SVG en ligne et externes.


Points à vérifier lors de l’extraction de SVG

  • Distinguez les SVG en ligne et externes. Un SVG en ligne est sérialisé depuis le DOM, tandis qu’un SVG externe est téléchargé comme réponse d’une ressource.
  • Utilisez des noms de sortie uniques. Les graphiques en ligne n’ont pas de nom de fichier d’origine et plusieurs URL externes peuvent partager le même segment de chemin final.
  • Vérifiez chaque réponse de ressource. Une URL externe peut renvoyer une page d’erreur, une réponse d’authentification ou un contenu indisponible au lieu de données SVG.
  • Prévoyez les collections volumineuses. readAsByteArray() met en mémoire chaque réponse SVG externe. Utilisez un traitement en flux lorsqu’une page peut référencer des fichiers exceptionnellement volumineux ou de nombreuses ressources.
  • Validez le contenu non fiable. Traitez les SVG téléchargés comme du contenu actif basé sur XML et examinez les scripts, les liens et les références externes avant de les publier ou de les afficher.
  • Respectez les droits d’auteur et les conditions du site web. Extrayez et réutilisez uniquement les graphiques SVG qui vous appartiennent ou pour lesquels vous disposez d’une autorisation. Leur disponibilité publique n’accorde pas le droit de redistribuer des logos, icônes ou illustrations protégés.

Questions fréquentes

1. Pourquoi certaines images SVG ne peuvent-elles pas être téléchargées directement depuis un site web ?

De nombreux sites web intègrent leurs graphiques sous forme d’éléments <svg> au lieu de créer des liens vers des fichiers .svg distincts. Un SVG en ligne doit être localisé dans le DOM HTML et enregistré à partir de son balisage getOuterHTML(), plutôt que téléchargé depuis une URL de ressource.

2. Comment extraire des fichiers et des icônes SVG d’une page web en Java ?

Aspose.HTML for Java peut examiner les références SVG présentes dans un document chargé, mais aucun sélecteur ne couvre à lui seul tous les emplacements. Vérifiez les éléments <svg> en ligne, <img src>, <object data>, <embed src>, les valeurs CSS url() et les références aux sprites SVG selon la manière dont la page intègre ses graphiques.

3. L’extraction de SVG depuis le HTML préserve-t-elle la qualité vectorielle ?

L’enregistrement du balisage SVG en ligne ou des octets d’origine d’un SVG externe ne pixellise pas le graphique. Ses tracés vectoriels et sa capacité de mise à l’échelle sont donc préservés. Le fichier enregistré peut néanmoins s’afficher différemment s’il dépend de styles CSS, de polices, d’images, de scripts ou de symboles externes de la page qui n’ont pas été copiés.

4. Aspose.HTML for Java peut-il extraire les fichiers SVG de l’ensemble d’un site web ?

Aspose.HTML for Java extrait les SVG de la page chargée dans un HTMLDocument, mais n’explore pas automatiquement toutes les pages d’un domaine. Pour traiter un site web complet, énumérez les URL de pages autorisées, examinez chaque document et supprimez les doublons parmi les ressources SVG collectées.


Installer Aspose.HTML for Java

Ajoutez Aspose.HTML for Java depuis le dépôt officiel Aspose. Remplacez ASPOSE_HTML_VERSION par un numéro de version exact indiqué sur la page des versions d’Aspose.HTML for Java , puis rechargez ou reconstruisez le projet afin de résoudre la dépendance.

Ajoutez le dépôt et la dépendance au projet 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>

Ajoutez le dépôt et la dépendance au projet Gradle :

Gradle – build.gradle

repositories {
    maven {
        url = uri('https://releases.aspose.com/java/repo/')
    }
}
dependencies {
    implementation 'com.aspose:aspose-html:ASPOSE_HTML_VERSION'
}

Utilisez une version du JDK compatible avec la version sélectionnée. Pour l’installation manuelle du fichier JAR, Kotlin DSL, les mises à jour et la résolution des problèmes de dépendances, consultez Installer Aspose.HTML for Java .

Tâches Java associées aux SVG et à l’extraction

Poursuivez avec l’extraction d’images, la page principale d’extraction de données en Java ou les exemples de conversion de SVG.