diff --git a/CMakeLists.txt b/CMakeLists.txt
index e14df598e..53d873cdb 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -863,6 +863,7 @@ if(NULLGL)
     src/glview/OffscreenView.cc
     src/glview/OffscreenContextNULL.cc
     src/io/export_png.cc
+    ../gl2ps/gl2ps.c
     src/io/imageutils.cc)
 else()
   set(OFFSCREEN_SOURCES
@@ -879,6 +880,7 @@ else()
     src/glview/preview/OpenCSGRenderer.cc
     src/glview/preview/ThrownTogetherRenderer.cc
     src/io/export_png.cc
+    ../gl2ps/gl2ps.c
     src/io/imageutils.cc
     ${GLEW_SOURCES})
 endif()
diff --git a/src/gui/QGLView.cc b/src/gui/QGLView.cc
index 484356f17..51476a245 100644
--- a/src/gui/QGLView.cc
+++ b/src/gui/QGLView.cc
@@ -57,6 +57,7 @@
 #endif
 
 #include "qt-obsolete.h"
+#include "../gl2ps/gl2ps.h"
 
 QGLView::QGLView(QWidget *parent) : QOpenGLWidget(parent)
 {
@@ -351,6 +352,22 @@ const QImage& QGLView::grabFrame()
 {
   // Force reading from front buffer. Some configurations will read from the back buffer here.
   glReadBuffer(GL_FRONT);
+
+  FILE* fp = fopen("out.svg", "wb");
+  int state = GL2PS_OVERFLOW;
+  int buffsize = 0;
+  while (state == GL2PS_OVERFLOW) {
+      buffsize += 1024 * 1024;
+      gl2psBeginPage("test", "gl2psTestSimple", NULL,
+                     GL2PS_SVG, GL2PS_BSP_SORT,
+                     GL2PS_DRAW_BACKGROUND | GL2PS_USE_CURRENT_VIEWPORT,
+                     GL_RGBA, 0, NULL, 0, 0, 0, buffsize, fp, "out.svg");
+      GLView::initializeGL();
+      GLView::paintGL();
+      state = gl2psEndPage();
+  }
+  fclose(fp);
+
   this->frame = grabFramebuffer();
   return this->frame;
 }