巨大的 .svg。如何在 20.04 中打开

巨大的 .svg。如何在 20.04 中打开

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

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

问题出现在图像查看器和 Gimp 中,而 ImageMagickdisplay和 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]

答案1

这是软件包中的一个错误librsvg。他们有 200000 个项目硬编码适用于 2.49.5 之前的版本。

我可以确认 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
    

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

    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
    

    享受:

    带有修补 librsvg2 的 EoM

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

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

相关内容