Вилучення вбудованого й зовнішнього SVG з HTML у Java

Aspose.HTML for Java завантажує вебсторінку в HTMLDocument, щоб застосунок міг перевірити як вбудовану розмітку SVG, так і пов’язані ресурси SVG. Вбудована графіка представлена в DOM елементами <svg>, а зовнішні SVG-файли можуть задаватися такими елементами, як <img src="image.svg">.

Щоб зберегти вбудовану графіку, запишіть значення getOuterHTML() у файл .svg. Для зовнішньої графіки перетворіть відносний URL на абсолютний за допомогою document.getBaseURI(), запитайте ресурс через мережеву службу документа та збережіть отримані байти без повторного кодування.


Збереження SVG-графіки, знайденої на вебсторінці

Приклад Java зберігає кожен вбудований елемент <svg> і завантажує унікальні зовнішні SVG-файли, на які посилаються елементи <img>. Окремі імена полегшують розпізнавання двох типів джерел у вихідному каталозі svg.

Вилучити SVG із сайту в 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++;
        }
    }
}

Етапи вилучення SVG у Java

  1. Завантажте цільову сторінку за допомогою HTMLDocument .
  2. Зберіть вбудовані елементи <svg> за допомогою getElementsByTagName("svg") і запишіть значення getOuterHTML() кожного елемента як текст UTF-8.
  3. Зберіть елементи <img> і прочитайте їхні непорожні атрибути src.
  4. Перетворіть кожне відносне джерело на абсолютний URL за допомогою Url і залиште URL, шлях яких закінчується на .svg.
  5. Надішліть RequestMessage для кожного зовнішнього SVG і перевірте ResponseMessage .
  6. Збережіть кожну успішну відповідь як файл .svg за допомогою Files.write().

Вбудований і зовнішній SVG

Вбудований SVG є частиною HTML DOM. Його XML-розмітка доступна через відповідний елемент <svg> і може бути серіалізована за допомогою getOuterHTML().

Зовнішній SVG є окремим ресурсом, на який посилається URL. Код завантажує файли, використані елементами <img>. Для SVG, заданого через інші елементи, CSS або посилання на фрагменти, потрібні селектори, що відповідають цим розташуванням.

Документовані робочі процеси для вбудованого й зовнішнього SVG наведено в статті Extract SVG From Website in Java .


Що врахувати під час вилучення SVG

  • Розділяйте вбудований і зовнішній SVG. Вбудований SVG серіалізується з DOM, а зовнішній завантажується як відповідь ресурсу.
  • Використовуйте унікальні імена результатів. Кілька вбудованих графічних елементів не мають початкових імен файлів, а різні зовнішні URL можуть мати однаковий останній сегмент шляху.
  • Перевіряйте кожну відповідь ресурсу. Зовнішній URL може повернути сторінку помилки, відповідь автентифікації або недоступний вміст замість даних SVG.
  • Плануйте роботу з великими колекціями. readAsByteArray() буферизує кожну відповідь зовнішнього SVG у пам’яті. Використовуйте потокову обробку, якщо сторінка може посилатися на дуже великі файли або багато ресурсів.
  • Перевіряйте ненадійний вміст. Ставтеся до завантаженого SVG як до активного вмісту на основі XML і перевіряйте скрипти, посилання та зовнішні залежності перед публікацією або відображенням.
  • Дотримуйтеся авторського права та умов сайту. Вилучайте й повторно використовуйте лише власну SVG-графіку або ту, на яку маєте дозвіл. Загальнодоступність не надає права розповсюджувати захищені логотипи, іконки чи ілюстрації.

Поширені запитання

1. Чому деякі SVG-зображення не можна завантажити безпосередньо із сайту?

Багато сайтів вбудовують графіку як елементи <svg> замість посилань на окремі файли .svg. Вбудований SVG потрібно знайти в HTML DOM і зберегти з розмітки getOuterHTML(), а не завантажувати за URL ресурсу.

2. Як вилучити SVG-файли та іконки з вебсторінки в Java?

Aspose.HTML for Java може перевіряти джерела SVG у завантаженому документі, але один селектор не охоплює всі можливі розташування. Перевіряйте вбудований <svg>, <img src>, <object data>, <embed src>, CSS url() і посилання на спрайти SVG відповідно до способу розміщення графіки на сторінці.

3. Чи зберігається векторна якість під час вилучення SVG з HTML?

Збереження вбудованої розмітки SVG або початкових байтів зовнішнього SVG не растеризує графіку, тому векторні контури й масштабовані розміри зберігаються. Файл усе одно може відображатися інакше, якщо залежить від CSS, шрифтів, зображень, скриптів або зовнішніх символів сторінки, які не були скопійовані.

4. Чи може Aspose.HTML for Java вилучити SVG-файли з усього вебсайту?

Aspose.HTML for Java вилучає SVG зі сторінки, завантаженої в HTMLDocument, але не обходить автоматично всі сторінки домену. Щоб обробити весь вебсайт, сформуйте список дозволених URL сторінок, перевірте кожен документ і видаліть дублікати зібраних SVG-ресурсів.


Встановлення Aspose.HTML for Java

Додайте Aspose.HTML for Java з офіційного репозиторію Aspose. Замініть ASPOSE_HTML_VERSION точним номером версії зі сторінки випусків Aspose.HTML for Java , а потім перезавантажте або перебудуйте проєкт, щоб система залежностей завантажила бібліотеку.

Додайте репозиторій і залежність до проєкту 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>

Додайте репозиторій і залежність до проєкту Gradle:

Gradle – build.gradle

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

Використовуйте JDK, сумісний із вибраним випуском. Інструкції щодо встановлення JAR вручну, Kotlin DSL, оновлення й усунення проблем із залежностями наведено в посібнику Встановлення Aspose.HTML for Java .

Пов’язані завдання із SVG і вилучення даних у Java

Перейдіть до вилучення зображень, огляду вилучення даних у Java або прикладів конвертування SVG.