diff --git a/src/gui/painting/qpdf.cpp b/src/gui/painting/qpdf.cpp
index 9082f98205f90118d7a2df458a353661f0016218..46d016de6b4d1f031d41895f2315e1828fb29596 100644
--- a/src/gui/painting/qpdf.cpp
+++ b/src/gui/painting/qpdf.cpp
@@ -2501,7 +2501,8 @@ void QPdfEnginePrivate::drawTextItem(const QPointF &p, const QTextItemInt &ti)
 
     QFontEngine::FaceId face_id = fe->faceId();
     bool noEmbed = false;
-    if (face_id.filename.isEmpty()
+    if (!embedFonts
+        || face_id.filename.isEmpty()
         || fe->fsType & 0x200 /* bitmap embedding only */
         || fe->fsType == 2 /* no embedding allowed */) {
         *currentPage << "Q\n";
diff --git a/src/plugins/platforms/cocoa/qprintengine_mac.mm b/src/plugins/platforms/cocoa/qprintengine_mac.mm
index f684fef233fd36dd8d00f8745b2caaf39285cbf3..a58514614b10454a3add3ec4d96d7359ef6a1c46 100644
--- a/src/plugins/platforms/cocoa/qprintengine_mac.mm
+++ b/src/plugins/platforms/cocoa/qprintengine_mac.mm
@@ -412,7 +412,10 @@ void QMacPrintEngine::drawTextItem(const QPointF &p, const QTextItem &ti)
 {
     Q_D(QMacPrintEngine);
     Q_ASSERT(d->state == QPrinter::Active);
-    d->paintEngine->drawTextItem(p, ti);
+    if (!d->embedFonts)
+        QPaintEngine::drawTextItem(p, ti);
+    else
+        d->paintEngine->drawTextItem(p, ti);
 }
 
 void QMacPrintEngine::drawTiledPixmap(const QRectF &dr, const QPixmap &pixmap, const QPointF &sr)
@@ -457,8 +460,6 @@ void QMacPrintEngine::setProperty(PrintEnginePropertyKey key, const QVariant &va
         break;
     case PPK_CustomBase:
         break;
-    case PPK_FontEmbedding:
-        break;
     case PPK_PageOrder:
         // TODO Check if can be supported via Cups Options
         break;
@@ -471,6 +472,9 @@ void QMacPrintEngine::setProperty(PrintEnginePropertyKey key, const QVariant &va
         break;
 
     // The following keys are properties and settings that are supported by the Mac PrintEngine
+    case PPK_FontEmbedding:
+        d->embedFonts = value.toBool();
+        break;
     case PPK_Resolution:  {
         // TODO It appears the old code didn't actually set the resolution???  Can we delete all this???
         int bestResolution = 0;
@@ -622,9 +626,6 @@ QVariant QMacPrintEngine::property(PrintEnginePropertyKey key) const
     case PPK_CustomBase:
         // Special case, leave null
         break;
-    case PPK_FontEmbedding:
-        ret = false;
-        break;
     case PPK_PageOrder:
         // TODO Check if can be supported via Cups Options
         ret = QPrinter::FirstPageFirst;
@@ -648,6 +649,9 @@ QVariant QMacPrintEngine::property(PrintEnginePropertyKey key) const
         break;
 
     // The following keys are properties and settings that are supported by the Mac PrintEngine
+    case PPK_FontEmbedding:
+        ret = d->embedFonts;
+        break;
     case PPK_CollateCopies: {
         Boolean status;
         PMGetCollate(d->settings(), &status);
diff --git a/src/plugins/platforms/cocoa/qprintengine_mac_p.h b/src/plugins/platforms/cocoa/qprintengine_mac_p.h
index c7307688aef9fba4fa542194da4bdf53c96cfde1..c99069b7f7195a7eb8f48c46c80021b23d6e6654 100644
--- a/src/plugins/platforms/cocoa/qprintengine_mac_p.h
+++ b/src/plugins/platforms/cocoa/qprintengine_mac_p.h
@@ -124,10 +124,11 @@ public:
     QString m_creator;
     QPaintEngine *paintEngine;
     QHash<QMacPrintEngine::PrintEnginePropertyKey, QVariant> valueCache;
+    uint embedFonts;
 
     QMacPrintEnginePrivate() : mode(QPrinter::ScreenResolution), state(QPrinter::Idle),
                                m_pageLayout(QPageLayout(QPageSize(QPageSize::A4), QPageLayout::Portrait, QMarginsF(0, 0, 0, 0))),
-                               printInfo(0), paintEngine(0) {}
+                               printInfo(0), paintEngine(0), embedFonts(true) {}
     ~QMacPrintEnginePrivate();
 
     void initialize();
diff --git a/src/printsupport/kernel/qprintengine_win.cpp b/src/printsupport/kernel/qprintengine_win.cpp
index 7f5e83c61ee5cc6e7b0a68735e4e9433c5015e5d..4e0a3e0795961c12e4aed02d09ef25acbab3bee0 100644
--- a/src/printsupport/kernel/qprintengine_win.cpp
+++ b/src/printsupport/kernel/qprintengine_win.cpp
@@ -269,7 +269,8 @@ void QWin32PrintEngine::drawTextItem(const QPointF &p, const QTextItem &textItem
     bool fallBack = state->pen().brush().style() != Qt::SolidPattern
                     || qAlpha(brushColor) != 0xff
                     || d->txop >= QTransform::TxProject
-                    || ti.fontEngine->type() != QFontEngine::Win;
+                    || ti.fontEngine->type() != QFontEngine::Win
+                    || !d->embed_fonts;
 
     if (!fallBack) {
         const QVariantMap userData = ti.fontEngine->userData().toMap();
@@ -1001,8 +1002,6 @@ void QWin32PrintEngine::setProperty(PrintEnginePropertyKey key, const QVariant &
     // The following keys are settings that are unsupported by the Windows PrintEngine
     case PPK_CustomBase:
         break;
-    case PPK_FontEmbedding:
-        break;
     case PPK_PageOrder:
         break;
     case PPK_PrinterProgram:
@@ -1011,6 +1010,10 @@ void QWin32PrintEngine::setProperty(PrintEnginePropertyKey key, const QVariant &
         break;
 
     // The following keys are properties and settings that are supported by the Windows PrintEngine
+    case PPK_FontEmbedding:
+        d->embed_fonts = value.toBool();
+        break;
+
     case PPK_CollateCopies:
         {
             if (!d->devMode)
@@ -1282,9 +1285,6 @@ QVariant QWin32PrintEngine::property(PrintEnginePropertyKey key) const
 
     // The following keys are settings that are unsupported by the Windows PrintEngine
     // Return sensible default values to ensure consistent behavior across platforms
-    case PPK_FontEmbedding:
-        value = false;
-        break;
     case PPK_PageOrder:
         value = QPrinter::FirstPageFirst;
         break;
@@ -1296,6 +1296,10 @@ QVariant QWin32PrintEngine::property(PrintEnginePropertyKey key) const
         break;
 
     // The following keys are properties and settings that are supported by the Windows PrintEngine
+    case PPK_FontEmbedding:
+        value = d->embed_fonts;
+        break;
+
     case PPK_CollateCopies:
         value = d->devMode->dmCollate == DMCOLLATE_TRUE;
         break;
diff --git a/src/printsupport/kernel/qprintengine_win_p.h b/src/printsupport/kernel/qprintengine_win_p.h
index b84bde8a92d113368448f40ff646416f0dd5dcb4..0a87795bb840c4030db6647d3b650285b7fc5f0a 100644
--- a/src/printsupport/kernel/qprintengine_win_p.h
+++ b/src/printsupport/kernel/qprintengine_win_p.h
@@ -125,7 +125,8 @@ public:
         m_pageLayout(QPageLayout(QPageSize(QPageSize::A4), QPageLayout::Portrait, QMarginsF(0, 0, 0, 0))),
         num_copies(1),
         printToFile(false),
-        reinit(false)
+        reinit(false),
+        embed_fonts(true)
     {
     }
 
@@ -216,6 +217,7 @@ public:
     uint has_pen : 1;
     uint has_brush : 1;
     uint has_custom_paper_size : 1;
+    uint embed_fonts : 1;
 
     uint txop;
 
diff --git a/src/printsupport/kernel/qprinter.cpp b/src/printsupport/kernel/qprinter.cpp
index c13b1574d0ba527e6c880799c0ffb642cbab4d21..437a68e6097b8d1db2dc76a1168fed3e04a1313f 100644
--- a/src/printsupport/kernel/qprinter.cpp
+++ b/src/printsupport/kernel/qprinter.cpp
@@ -1632,8 +1632,6 @@ QPrinter::PaperSource QPrinter::paperSource() const
 
   Enabled or disables font embedding depending on \a enable.
 
-  Currently this option is only supported on X11.
-
   \sa fontEmbeddingEnabled()
 */
 void QPrinter::setFontEmbeddingEnabled(bool enable)
@@ -1647,8 +1645,6 @@ void QPrinter::setFontEmbeddingEnabled(bool enable)
 
   Returns \c true if font embedding is enabled.
 
-  Currently this option is only supported on X11.
-
   \sa setFontEmbeddingEnabled()
 */
 bool QPrinter::fontEmbeddingEnabled() const
diff --git a/tests/auto/printsupport/kernel/qprinter/tst_qprinter.cpp b/tests/auto/printsupport/kernel/qprinter/tst_qprinter.cpp
index 1be570e4b86c0897f032450f3445c4b7a07284dc..e3a72f4ab4dcf2e9d9fac20099d3dedcfb430927 100644
--- a/tests/auto/printsupport/kernel/qprinter/tst_qprinter.cpp
+++ b/tests/auto/printsupport/kernel/qprinter/tst_qprinter.cpp
@@ -1103,9 +1103,7 @@ void tst_QPrinter::fontEmbedding()
 {
     // fontEmbeddingEnabled() / setFontEmbeddingEnabled() / PPK_FontEmbedding
     // PdfFormat: Supported, default true
-    // NativeFormat, Cups: Supported, default true
-    // NativeFormat, Win: Unsupported, always false
-    // NativeFormat, Mac: Unsupported, always false
+    // NativeFormat: Supported, default true
 
     QPrinter pdf;
     pdf.setOutputFormat(QPrinter::PdfFormat);
@@ -1116,25 +1114,17 @@ void tst_QPrinter::fontEmbedding()
     QPrinter native;
     if (native.outputFormat() == QPrinter::NativeFormat) {
         // Test default
-#if defined Q_OS_MAC || defined Q_OS_WIN
-        QCOMPARE(native.fontEmbeddingEnabled(), false);
-#else
         QCOMPARE(native.fontEmbeddingEnabled(), true);
-#endif // Q_OS_MAC || Q_OS_WIN
 
         // Test set/get
-        bool expected = true;
-        native.setFontEmbeddingEnabled(expected);
-#if defined Q_OS_MAC || defined Q_OS_WIN
-        expected = false;
-#endif // Q_OS_MAC || Q_OS_WIN
-        QCOMPARE(native.fontEmbeddingEnabled(), expected);
+        native.setFontEmbeddingEnabled(true);
+        QCOMPARE(native.fontEmbeddingEnabled(), true);
 
         // Test value preservation
         native.setOutputFormat(QPrinter::PdfFormat);
-        QCOMPARE(native.fontEmbeddingEnabled(), expected);
+        QCOMPARE(native.fontEmbeddingEnabled(), true);
         native.setOutputFormat(QPrinter::NativeFormat);
-        QCOMPARE(native.fontEmbeddingEnabled(), expected);
+        QCOMPARE(native.fontEmbeddingEnabled(), true);
     } else {
         QSKIP("No printers installed, cannot test NativeFormat, please install printers to test");
     }