void ExportWizard::saveSvg() { if (m_ui->svgFilePath->text().isEmpty()) { QMessageBox::warning(this, tr("No file selected !"), tr("You need to choose a file path for saving.")); return; } QString svgFilePath = m_ui->svgFilePath->text(); // get the rendering size QRect svgRect(m_canvas->sceneRect().toRect()); // create the SVG writer QSvgGenerator generator; generator.setFileName(svgFilePath); generator.setSize(svgRect.size()); generator.setResolution(physicalDpiX()); generator.setViewBox(svgRect); generator.setTitle(m_canvas->titleText()); generator.setDescription(tr("Created with %1").arg(QCoreApplication::applicationName() + " " + QCoreApplication::applicationVersion())); // paint over the writer QPainter painter(&generator); painter.setRenderHints(QPainter::Antialiasing | QPainter::TextAntialiasing | QPainter::SmoothPixmapTransform, true); m_canvas->renderVisible(&painter, svgRect, svgRect, Qt::IgnoreAspectRatio, !m_ui->svgAsIsBox->isChecked()); painter.end(); }
void SvgTextC(struct ADrawTag *ctx, unsigned int x, unsigned int y, const char *string, const char *url) { SvgContext *context = getSvgCtx(ctx); unsigned int hw = SvgTextWidth(ctx, string) / 2; svgRect(ctx, getSvgBgPen(ctx), x - (hw + 2), y - SvgTextHeight(ctx) + 1, x + hw, y - 1); y += getSpace(ctx, SvgHelvetica.descender); if(url) { fprintf(getSvgFile(ctx), "<a xlink:href=\"%s\">", url); } fprintf(getSvgFile(ctx), "<text x=\"%u\" y=\"%u\" textLength=\"%u\" font-family=\"Helvetica\" font-size=\"%u\" fill=\"%s\" text-anchor=\"middle\">", x, y, SvgTextWidth(ctx, string), context->fontPoints, context->penColName); writeEscaped(ctx, string); fprintf(getSvgFile(ctx), "</text>\n"); if(url) { fprintf(getSvgFile(ctx), "</a>", url); } }
void SvgFilledRectangle(struct ADrawTag *ctx, unsigned int x1, unsigned int y1, unsigned int x2, unsigned int y2) { svgRect(ctx, getSvgPen(ctx), x1, y1, x2, y2); }
QImage minigis::svgGenerator(QSvgRenderer &render, const QPointF &p, const qreal &ang, const QString &cls, const qreal &svgSize, const quint8 &anchorX, const quint8 &anchorY, QPointF *start) { QRectF rgn = svgRect(render, cls, p, svgSize); QPointF mid(rgn.left(), rgn.top()); if (anchorX != 0 || anchorY != 0) { QPointF anchor(rgn.width() * anchorX * 0.01, rgn.height() * anchorY * 0.01); rgn.moveTopLeft(rgn.topLeft() - anchor); mid = QPointF(rgn.left() + anchor.x(), rgn.top() + anchor.y()); } QTransform tr; tr.translate(mid.x(), mid.y()).rotate(ang).translate(-mid.x(), -mid.y()); return svgGenerator(render, cls, rgn, tr, tr.inverted(), start); }