Eingebettete und externe SVGs aus HTML extrahieren

Aspose.HTML for Java lädt eine Webseite in ein HTMLDocument, sodass eine Anwendung sowohl eingebettetes SVG-Markup als auch verknüpfte SVG-Ressourcen untersuchen kann. Eingebettete Grafiken erscheinen als <svg>-Elemente im DOM, während externe SVG-Dateien beispielsweise durch <img src="image.svg"> referenziert werden können.

Speichern Sie eine eingebettete Grafik, indem Sie den Wert getOuterHTML() in eine .svg-Datei schreiben. Bei einer externen Grafik lösen Sie die relative URL anhand von document.getBaseURI() auf, fordern die Ressource über den Netzwerkdienst des Dokuments an und speichern die zurückgegebenen Daten ohne erneute Codierung.


SVG-Grafiken einer Webseite speichern

Das Java-Beispiel speichert jedes eingebettete <svg>-Element und lädt eindeutige externe SVG-Dateien herunter, die durch <img>-Elemente referenziert werden. Unterschiedliche Namen machen die beiden Quelltypen im Ausgabeverzeichnis svg leicht erkennbar.

SVG aus einer Website in Java extrahieren

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++;
        }
    }
}

SVG aus HTML in Java extrahieren

  1. Laden Sie die Zielseite mit HTMLDocument .
  2. Sammeln Sie eingebettete <svg>-Elemente mit getElementsByTagName("svg") und schreiben Sie den Wert getOuterHTML() jedes Elements als UTF-8-Text.
  3. Sammeln Sie <img>-Elemente und lesen Sie deren nicht leere src-Attribute.
  4. Lösen Sie jede relative Quelle mit Url auf und behalten Sie URLs, deren Pfad mit .svg endet.
  5. Senden Sie für jedes externe SVG eine RequestMessage und prüfen Sie die ResponseMessage .
  6. Speichern Sie jede erfolgreiche Antwort mit Files.write() als .svg-Datei.

Eingebettete und externe SVGs

Ein eingebettetes SVG ist Teil des HTML-DOM. Sein XML-Markup ist über das entsprechende <svg>-Element verfügbar und kann mit getOuterHTML() serialisiert werden.

Ein externes SVG ist eine separate, durch eine URL referenzierte Ressource. Der Code lädt Dateien herunter, die von <img>-Elementen verwendet werden. Für SVGs in anderen Elementen, in CSS oder in Fragmentverweisen sind Selektoren erforderlich, die zu diesen Einbindungsarten passen.

Die dokumentierten Abläufe für eingebettete und externe SVGs finden Sie unter SVG von einer Website extrahieren .


Wichtige Hinweise zur SVG-Extraktion

  • Trennen Sie eingebettete und externe SVGs. Eingebettetes SVG-Markup wird aus dem DOM serialisiert, während ein externes SVG als Ressourcenantwort heruntergeladen wird.
  • Verwenden Sie eindeutige Ausgabenamen. Eingebettete Grafiken besitzen keinen ursprünglichen Dateinamen, und verschiedene externe URLs können mit demselben Pfadsegment enden.
  • Prüfen Sie jede Ressourcenantwort. Eine externe URL kann statt SVG-Daten eine Fehlerseite, eine Authentifizierungsantwort oder eine nicht verfügbare Ressource zurückgeben.
  • Berücksichtigen Sie große Sammlungen. readAsByteArray() puffert jede externe SVG-Antwort im Speicher. Verwenden Sie eine Streaming-Strategie, wenn eine Seite viele Ressourcen oder ungewöhnlich große Dateien referenzieren kann.
  • Validieren Sie nicht vertrauenswürdige Inhalte. Behandeln Sie heruntergeladene SVGs als aktive XML-basierte Inhalte und prüfen Sie Skripte, Links und externe Referenzen vor der Veröffentlichung oder Anzeige.
  • Beachten Sie Urheberrecht und Nutzungsbedingungen. Extrahieren und verwenden Sie nur eigene SVG-Grafiken oder Ressourcen, für die Sie eine Erlaubnis besitzen. Die öffentliche Verfügbarkeit erlaubt nicht automatisch die Weitergabe geschützter Logos, Icons oder Illustrationen.

Häufig gestellte Fragen

1. Warum lassen sich manche SVG-Bilder nicht direkt von einer Website herunterladen?

Viele Websites betten Grafiken als <svg>-Elemente ein, statt separate .svg-Dateien zu verknüpfen. Ein eingebettetes SVG muss im HTML-DOM gefunden und aus seinem getOuterHTML()-Markup gespeichert werden, anstatt es über eine Ressourcen-URL herunterzuladen.

2. Wie lassen sich SVG-Dateien und Icons aus einer Webseite in Java extrahieren?

Aspose.HTML for Java kann die SVG-Quellen in einem geladenen Dokument untersuchen, doch kein einzelner Selektor deckt alle Einbindungsarten ab. Prüfen Sie eingebettete <svg>-Elemente, <img src>, <object data>, <embed src>, CSS-Werte url() und Verweise auf SVG-Sprites.

3. Bleibt die Vektorqualität beim Extrahieren von SVG aus HTML erhalten?

Das Speichern von eingebettetem SVG-Markup oder den ursprünglichen Daten eines externen SVG rastert die Grafik nicht. Vektorpfade und skalierbare Abmessungen bleiben daher erhalten. Die Darstellung kann dennoch abweichen, wenn das SVG von Seiten-CSS, Schriften, Bildern, Skripten oder externen Symbolen abhängt, die nicht kopiert wurden.

4. Kann Aspose.HTML for Java SVG-Dateien aus einer gesamten Website extrahieren?

Aspose.HTML for Java extrahiert SVGs aus der in ein HTMLDocument geladenen Seite, durchsucht jedoch nicht automatisch alle Seiten einer Domain. Um eine vollständige Website zu verarbeiten, erfassen Sie die zulässigen Seiten-URLs, untersuchen jedes Dokument und entfernen Duplikate aus den gesammelten SVG-Ressourcen.


Aspose.HTML for Java installieren

Fügen Sie Aspose.HTML for Java aus dem offiziellen Aspose-Repository hinzu. Ersetzen Sie ASPOSE_HTML_VERSION durch eine genaue Versionsnummer von der Seite Aspose.HTML for Java-Releases und laden oder erstellen Sie das Projekt anschließend neu, damit die Abhängigkeit aufgelöst wird.

Fügen Sie das Repository und die Abhängigkeit zum Maven-Projekt hinzu:

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>

Fügen Sie das Repository und die Abhängigkeit zum Gradle-Projekt hinzu:

Gradle – build.gradle

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

Verwenden Sie ein JDK, das mit dem ausgewählten Release kompatibel ist. Hinweise zur manuellen JAR-Installation, Kotlin DSL, Updates und zur Fehlerbehebung bei Abhängigkeiten finden Sie unter Aspose.HTML for Java installieren .

Verwandte Java-Aufgaben für SVG und Datenextraktion

Weiter zur Bildextraktion, zur Übersicht der Datenextraktion oder zu Beispielen für die SVG-Konvertierung.