Skip to content

Commit d06e127

Browse files
committedDec 19, 2017
Add unit test for svg export
1 parent 6640257 commit d06e127

File tree

3 files changed

+71
-0
lines changed

3 files changed

+71
-0
lines changed
 

‎tests/src/python/test_qgslayoutexporter.py

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
QgsFillSymbol)
3737
from qgis.PyQt.QtCore import QSize, QSizeF, QDir, QRectF, Qt
3838
from qgis.PyQt.QtGui import QImage, QPainter
39+
from qgis.PyQt.QtSvg import QSvgRenderer, QSvgGenerator
3940

4041
from qgis.testing import start_app, unittest
4142

@@ -91,6 +92,24 @@ def pdfToPng(pdf_file_path, rendered_file_path, page, dpi=96):
9192
"message: {2}".format(e.cmd, e.returncode, e.message))
9293

9394

95+
def svgToPng(svg_file_path, rendered_file_path, width):
96+
svgr = QSvgRenderer(svg_file_path)
97+
98+
height = width / svgr.viewBoxF().width() * svgr.viewBoxF().height()
99+
100+
image = QImage(width, height, QImage.Format_ARGB32)
101+
image.fill(Qt.transparent)
102+
103+
p = QPainter(image)
104+
p.setRenderHint(QPainter.Antialiasing, False)
105+
svgr.render(p)
106+
p.end()
107+
108+
res = image.save(rendered_file_path, 'png')
109+
if not res:
110+
os.unlink(rendered_file_path)
111+
112+
94113
start_app()
95114

96115

@@ -390,6 +409,58 @@ def testExportToPdf(self):
390409
self.assertTrue(self.checkImage('exporttopdfdpi_page1', 'exporttopdfdpi_page1', rendered_page_1, size_tolerance=1))
391410
self.assertTrue(self.checkImage('exporttopdfdpi_page2', 'exporttopdfdpi_page2', rendered_page_2, size_tolerance=1))
392411

412+
def testExportToSvg(self):
413+
l = QgsLayout(QgsProject.instance())
414+
l.initializeDefaults()
415+
416+
# add a second page
417+
page2 = QgsLayoutItemPage(l)
418+
page2.setPageSize('A5')
419+
l.pageCollection().addPage(page2)
420+
421+
# add some items
422+
item1 = QgsLayoutItemShape(l)
423+
item1.attemptSetSceneRect(QRectF(10, 20, 100, 150))
424+
fill = QgsSimpleFillSymbolLayer()
425+
fill_symbol = QgsFillSymbol()
426+
fill_symbol.changeSymbolLayer(0, fill)
427+
fill.setColor(Qt.green)
428+
fill.setStrokeStyle(Qt.NoPen)
429+
item1.setSymbol(fill_symbol)
430+
l.addItem(item1)
431+
432+
item2 = QgsLayoutItemShape(l)
433+
item2.attemptSetSceneRect(QRectF(10, 20, 100, 150))
434+
item2.attemptMove(QgsLayoutPoint(10, 20), page=1)
435+
fill = QgsSimpleFillSymbolLayer()
436+
fill_symbol = QgsFillSymbol()
437+
fill_symbol.changeSymbolLayer(0, fill)
438+
fill.setColor(Qt.cyan)
439+
fill.setStrokeStyle(Qt.NoPen)
440+
item2.setSymbol(fill_symbol)
441+
l.addItem(item2)
442+
443+
exporter = QgsLayoutExporter(l)
444+
# setup settings
445+
settings = QgsLayoutExporter.SvgExportSettings()
446+
settings.dpi = 80
447+
settings.forceVectorOutput = False
448+
449+
svg_file_path = os.path.join(self.basetestpath, 'test_exporttosvgdpi.svg')
450+
svg_file_path_2 = os.path.join(self.basetestpath, 'test_exporttosvgdpi_2.svg')
451+
self.assertEqual(exporter.exportToSvg(svg_file_path, settings), QgsLayoutExporter.Success)
452+
self.assertTrue(os.path.exists(svg_file_path))
453+
self.assertTrue(os.path.exists(svg_file_path_2))
454+
455+
rendered_page_1 = os.path.join(self.basetestpath, 'test_exporttosvgdpi.png')
456+
dpi = 80
457+
svgToPng(svg_file_path, rendered_page_1, width=936)
458+
rendered_page_2 = os.path.join(self.basetestpath, 'test_exporttosvgdpi2.png')
459+
svgToPng(svg_file_path_2, rendered_page_2, width=467)
460+
461+
self.assertTrue(self.checkImage('exporttosvgdpi_page1', 'exporttopdfdpi_page1', rendered_page_1, size_tolerance=1))
462+
self.assertTrue(self.checkImage('exporttosvgdpi_page2', 'exporttopdfdpi_page2', rendered_page_2, size_tolerance=1))
463+
393464
def testExportWorldFile(self):
394465
l = QgsLayout(QgsProject.instance())
395466
l.initializeDefaults()

0 commit comments

Comments
 (0)
Please sign in to comment.