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 variableDVISVGM_PDF_PROC
to eithergs
ormutool
.
- 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
- 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.
- 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.
- 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.
- Added SVG optimizer module
reassign-clippaths
that searches for duplicateclipPath
elements, removes them, and updates theclip-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.
This small release improves the clipping of embedded EPS/PDF graphics (issue #176).
- Enabled the evaluation of expression
{?(...)}
in specialdvisvgm: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.
- Added the functionality to sequentially convert multiple EPS files given on the command-line.
- Added variables
n
andN
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.
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.