巨大的.svg。20.04如何开通

Fer*_*oao 6 svg 20.04

升级到 20.04 后,我无法打开大的 svg 文件。我得到:

XML 解析错误:无法加载超过 200000 个 XML 元素

Image Viewer 和 Gimp 中出现问题,而 ImageMagick display、 inkscape 则libreoffice --draw 停止运行,什么也不显示。

Firefox 和 Chrome 都可以打开该文件,但 Firefox 的缩放功能很差,而 Chrome 则非常慢并且容易卡顿。

svg 包:apt list --installed | grep svg

gir1.2-rsvg-2.0/focal-updates,now 2.48.9-1ubuntu0.20.04.1 amd64 [installed,automatic]
libimage-librsvg-perl/focal,now 0.07-8build5 amd64 [installed]
libqt5svg5/focal,now 5.12.8-0ubuntu1 amd64 [installed,automatic]
librsvg2-2/focal-updates,now 2.48.9-1ubuntu0.20.04.1 amd64 [installed,automatic]
librsvg2-2/focal-updates,now 2.48.9-1ubuntu0.20.04.1 i386 [installed]
librsvg2-common/focal-updates,now 2.48.9-1ubuntu0.20.04.1 amd64 [installed,automatic]
librsvg2-common/focal-updates,now 2.48.9-1ubuntu0.20.04.1 i386 [installed,automatic]
librsvg2-dev/focal-updates,now 2.48.9-1ubuntu0.20.04.1 amd64 [installed]
Run Code Online (Sandbox Code Playgroud)

N0r*_*ert 6

这是包中的错误librsvg。他们为 2.49.5 之前的版本硬编码了 200000 个项目。

我可以确认 Ubuntu 20.04 LTS 上的错误。所以我已将其报告给 LaunchPad,错误号为 1916055。受影响的热门应用程序:

  • 侏儒之眼
  • MATE之眼,阿特里尔
  • GIMP

有些应用程序使用不同的库并失败 - Karbon、Krita、Cenon。

可能的解决方法是:

  • 使用补丁在本地重新编译库以具有 1000000 个 XML 节点限制。

    首先启用源代码存储库software-properties-gtk并运行以下命令以获取构建依赖项并通过成功编译进行修补:

    sudo apt-add-repository main
    sudo apt-add-repository universe
    sudo apt-add-repository multiverse
    sudo apt-add-repository restricted
    
    sudo apt-get update
    sudo apt-get dist-upgrade
    
    sudo apt-get build-dep librsvg2-dev
    sudo apt-get install devscripts
    
    cd ~/Downloads
    apt-get source librsvg2-dev
    cd librsvg-2.48.9
    
    # change 200000 to 1000000
    sed -i "s/200_000/1_000_000/" rsvg_internals/src/limits.rs
    dpkg-buildpackage -b -uc -us
    
    sudo apt-get install ../*svg*.deb
    
    Run Code Online (Sandbox Code Playgroud)

    然后使用单个长命令固定软件包版本:

    cat <<EOF | sudo tee /etc/apt/preferences.d/pin-librsvg2
    Package: gir1.2-rsvg-2.0
    Pin: release a=now
    Pin-Priority: 1337
    
    Package: librsvg2-2
    Pin: release a=now
    Pin-Priority: 1337
    
    Package: librsvg2-bin
    Pin: release a=now
    Pin-Priority: 1337
    
    Package: librsvg2-dev
    Pin: release a=now
    Pin-Priority: 1337
    
    Package: librsvg2-common
    Pin: release a=now
    Pin-Priority: 1337
    
    Package: librsvg2-doc
    Pin: release a=now
    Pin-Priority: 1337
    EOF
    
    Run Code Online (Sandbox Code Playgroud)

    享受:

    带有修补过的 librsvg2 的 EoM

  • 使用具有不同后端库的查看器和编辑器:

    • Firefox、Chromium、Konqueror 等网络浏览器
    • LibreOffice 绘图
    • Inkscape(需要 >14 Gb RAM)