diff --git a/poppler/Annot.cc b/poppler/Annot.cc
index 00fc7be..c75837f 100644
--- a/poppler/Annot.cc
+++ b/poppler/Annot.cc
@@ -2620,6 +2620,8 @@
 //------------------------------------------------------------------------
 // AnnotFreeText
 //------------------------------------------------------------------------
+const double AnnotFreeText::undefinedFontPtSize = 10.;
+
 AnnotFreeText::AnnotFreeText(PDFDoc *docA, PDFRectangle *rect, const DefaultAppearance &da) :
     AnnotMarkup(docA, rect) {
   type = typeFreeText;
@@ -2647,8 +2649,7 @@
     appearanceString.reset(obj1.getString()->copy());
   } else {
     appearanceString = std::make_unique<GooString>();
-    error(errSyntaxError, -1, "Bad appearance for annotation");
-    ok = false;
+    error(errSyntaxWarning, -1, "Bad appearance for annotation");
   }
 
   obj1 = dict->lookup("Q");
@@ -2843,7 +2844,7 @@
   if (!da.getFontName().isName())
     da.setFontName(Object(objName, "AnnotDrawFont"));
   if (da.getFontPtSize() <= 0)
-    da.setFontPtSize(10);
+    da.setFontPtSize(undefinedFontPtSize);
   if (!da.getFontColor())
     da.setFontColor(std::make_unique<AnnotColor>(0, 0, 0));
   if (!contents)
diff --git a/poppler/Annot.h b/poppler/Annot.h
index 8603b75..105ed2e 100644
--- a/poppler/Annot.h
+++ b/poppler/Annot.h
@@ -1005,6 +1005,8 @@
     intentFreeTextTypeWriter  // FreeTextTypeWriter
   };
 
+  static const double undefinedFontPtSize;
+
   AnnotFreeText(PDFDoc *docA, PDFRectangle *rect, const DefaultAppearance &da);
   AnnotFreeText(PDFDoc *docA, Object &&dictObject, const Object *obj);
   ~AnnotFreeText();
diff --git a/qt5/src/poppler-annotation.cc b/qt5/src/poppler-annotation.cc
index 2f35425..b372ccb 100644
--- a/qt5/src/poppler-annotation.cc
+++ b/qt5/src/poppler-annotation.cc
@@ -2094,15 +2094,18 @@
     if ( !d->pdfAnnot )
         return d->textFont;
 
-    QFont font;
+    double fontSize { AnnotFreeText::undefinedFontPtSize };
     if ( d->pdfAnnot->getType() == Annot::typeFreeText )
     {
-        if ( std::unique_ptr<DefaultAppearance> da{ d->getDefaultAppearanceFromNative() } )
+        std::unique_ptr<DefaultAppearance> da{ d->getDefaultAppearanceFromNative() };
+        if ( da && da->getFontPtSize() > 0 )
         {
-            font.setPointSize( da->getFontPtSize() );
+            fontSize = da->getFontPtSize();
         }
     }
 
+    QFont font;
+    font.setPointSizeF( fontSize );
     return font;
 }
 
