17 October 2022: dvisvgm 3.0: Pre-release of new major version

dvisvgm 3.0 is a new major version of the utility that’s still considered beta status. While the new version doesn’t bring many obvious new features, essential core functionality has changed under the hood. The following list gives an overview of the most important changes and additions.

  • The previously bundled reduced FontForge library has been replaced with a dedicated font writer library used to create TrueType and WOFF files from the font data processed by dvisvgm.
  • A new PDF handler based on mutool has been added to retain dvisvgm’s PDF conversion functionality after the removal of Ghostscript’s old PDF interpreter announced for version 10.1.0.
    • The new handler supports all font options of dvisvgm, i.e. in contrast to the current Ghostscript-based PDF processor, fonts can not only be embedded as paths but also as SVG, TTF, WOFF, and WOFF2 fonts (depending on options --no-fonts and --font-format).
    • The new handler is still experimental and may contain bugs. Please report any issues via the issue tracker at GitHub.
    • Not all PDF features are supported – either because there is no simple equivalent in SVG or because mutool doesn’t provide means to access the corresponding data. For example, Type 3 fonts and color gradients fills are not yet processed by dvisvgm’s new PDF handler.
    • The former Ghostscript-based PDF handler is still available. It’s automatically invoked if dvisvgm finds a proper Ghostscript version. Otherwise, it looks for the mutool executable through the system’s search path and uses the new handler in case it’s found. The desired PDF handler can also be selected by setting environment variable DVISVGM_PDF_PROC to either gs or mutool.
  • Option --embed-bitmaps has been added to allow for embedding of external images referenced in DVI files into the generated SVG files. By default the SVG only contains a reference to the image.
  • The optional filters :even and :odd have been added to option --page which limit the given page ranges to even and odd page numbers respectively.

You can download the sources and pre-built binaries for MiKTeX from the project page at GitHub.

12 August 2022: dvisvgm 2.14 has been released
  • Added processing of SVG path elements inserted by “raw” specials in order to treat them similar to generated ones.
  • Added support for native font references lacking a file name suffix.
  • Improved the lookup of native fonts.
  • Improved the removal of redundant SVG group elements.
  • Fixed the conversion of empty glyphs to TTF/WOFF data.
  • Updated the bundled WOFF2 library.
20 April 2022: dvisvgm 2.13.4 has been released
  • Fixed the size of bounding boxes applied when converting multiple pages (issue #182).
  • Try to enable the old PDF interpreter when using Ghostscript >= 9.56.0. dvisvgm does not work with Ghostscript’s new PDF interpreter.
27 February 2022: dvisvgm 2.13.3 has been released
  • Added SVG optimizer module reassign-clippaths that searches for duplicate clipPath elements, removes them, and updates the clip-path references.
  • Replaced the method used to clip embedded EPS/PDF graphics that now usually results in faster rendering of the affected SVG sections.
  • Fixed a regression regarding transformations of embedded EPS/PDF graphics.
23 February 2022: dvisvgm 2.13.2 has been released

This small release improves the clipping of embedded EPS/PDF graphics (issue #176).

26 January 2022: dvisvgm 2.13.1 has been released
  • Enabled the evaluation of expression {?(...)} in special dvisvgm:rawdef (issue #175).
  • Fixed a regression concerning the positioning of PDF graphics with special pdffile (issue #174).
  • Fixed some build issues for older C++ compilers.
20 January 2022: dvisvgm 2.13 has been released
  • Added the functionality to sequentially convert multiple EPS files given on the command-line.
  • Added variables n and N to option --output that represent the number of the file currently being processed and the total number of input files given on the command-line, respectively.
  • Fixed the selection of the hash algorithm set by option --page-hashes.
  • Improved the computation of glyph heights and depths.
  • The SVG optimizer now also simplifies transform attributes when collapsing group elements.
  • Extended several paragraphs of the manual page with more detailed information on the corresponding topics.
  • Updated the bundled xxHash library to version 0.8.1.
  • Updated the bundled GoogleTest framework to version 1.11.0.
23 November 2021: Information on PDF support as of Ghostscript 9.56.0

Ghostscript has introduced a completely rewritten implementation of its PDF interpreter, which is now implemented in C instead of PostScript. This has a lot of advantages besides the performance improvements. For third-party applications like dvisvgm, however, this change has significant impact on the functions that can be provided. dvisvgm relies on the possibility to overwrite PostScript and PDF operators in order to directly communicate with the interpreter. The nice thing about the current PostScript-based PDF interpreter is the fact that both PostScript and PDF code can be treated almost equally.

As of Ghostscript 9.56.0, this will no longer be possible, and as far as I can tell from the documentation, there is no way to replicate the current functionality. As a consequence, all PDF functionality currently available in dvisvgm will no longer work with the upcoming Ghostscript releases. Therefore, it will require the parallel installation of Ghostscript 9.55.0 or earlier. In the long run, I’ll probably have to drop PDF support since I don’t have the resources to implement a completely new PDF handler.