From 7a724c8f0114b301b8d526906bde12dbe7a58de7 Mon Sep 17 00:00:00 2001 From: jghali Date: Wed, 26 Sep 2012 19:18:09 +0000 Subject: #11094: Excessive line spacing in exported pdf form fields git-svn-id: svn://scribus.net/branches/Version14x/Scribus@17777 11d20701-8431-0410-a711-e3c959e3b870 --- scribus/fonts/ftface.cpp | 13 ++++++++----- scribus/fonts/ftface.h | 20 ++++++++++---------- scribus/fonts/scface.cpp | 16 ++++++++-------- scribus/fonts/scface.h | 20 ++++++++++---------- scribus/fonts/scface_ttf.cpp | 2 +- scribus/pdflib_core.cpp | 17 ++++++----------- 6 files changed, 43 insertions(+), 45 deletions(-) diff --git a/scribus/fonts/ftface.cpp b/scribus/fonts/ftface.cpp index 6889312..d0dc4d6 100644 --- a/scribus/fonts/ftface.cpp +++ b/scribus/fonts/ftface.cpp @@ -111,11 +111,14 @@ void FtFace::load() const m_strikeoutPos = m_ascent / 3; m_strokeWidth = m_face->underline_thickness / m_uniEM; const_cast(this)->isFixedPitch = m_face->face_flags & 4; - Ascent = QString::number(m_face->ascender); - CapHeight = QString::number(m_face->height); - Descender = QString::number(m_face->descender); - FontBBox = QString::number(m_face->bbox.xMin)+" "+QString::number(m_face->bbox.yMin)+" "+QString::number(m_face->bbox.xMax)+" "+QString::number(m_face->bbox.yMax); - ItalicAngle = "0"; + m_pdfAscent = QString::number(m_face->ascender / m_uniEM * 1000); + m_pdfCapHeight = QString::number(m_face->height / m_uniEM * 1000); + m_pdfDescender = QString::number(m_face->descender / m_uniEM * 1000); + m_pdfFontBBox = QString::number(m_face->bbox.xMin / m_uniEM * 1000) + " " + + QString::number(m_face->bbox.yMin / m_uniEM * 1000) + " " + + QString::number(m_face->bbox.xMax / m_uniEM * 1000) + " " + + QString::number(m_face->bbox.yMax / m_uniEM * 1000); + m_italicAngle = "0"; //FIXME: FT_Set_Charmap(m_face, m_face->charmaps[m_encoding]); setBestEncoding(m_face); diff --git a/scribus/fonts/ftface.h b/scribus/fonts/ftface.h index 434d10a..db534d6 100644 --- a/scribus/fonts/ftface.h +++ b/scribus/fonts/ftface.h @@ -70,11 +70,11 @@ struct SCRIBUS_API FtFace : public ScFace::ScFaceData qreal underlinePos(qreal sz=1.0) const { return m_underlinePos * sz; } qreal strokeWidth(qreal /*sz*/) const { return m_strokeWidth; } qreal maxAdvanceWidth(qreal sz=1.0) const { return m_maxAdvanceWidth * sz; } - QString ascentAsString() const { return Ascent; } - QString descentAsString() const { return Descender; } - QString capHeightAsString() const { return CapHeight; } - QString FontBBoxAsString() const { return FontBBox; } - QString ItalicAngleAsString() const { return ItalicAngle; } + QString pdfAscentAsString() const { return m_pdfAscent; } + QString pdfDescentAsString() const { return m_pdfDescender; } + QString pdfCapHeightAsString() const { return m_pdfCapHeight; } + QString pdfFontBBoxAsString() const { return m_pdfFontBBox; } + QString ItalicAngleAsString() const { return m_italicAngle; } //FIXME QMap fontDictionary(qreal sz=1.0) const; @@ -95,13 +95,13 @@ protected: static FT_Library library; - mutable QString Ascent; - mutable QString CapHeight; - mutable QString Descender; - mutable QString ItalicAngle; + mutable QString m_pdfAscent; + mutable QString m_pdfCapHeight; + mutable QString m_pdfDescender; + mutable QString m_italicAngle; + mutable QString m_pdfFontBBox; mutable QString StdVW; QString FontEnc; - mutable QString FontBBox; mutable int m_encoding; diff --git a/scribus/fonts/scface.cpp b/scribus/fonts/scface.cpp index 8be80bc..0d16848 100644 --- a/scribus/fonts/scface.cpp +++ b/scribus/fonts/scface.cpp @@ -208,35 +208,35 @@ const ScFace& ScFace::none() return NONE; } -QString ScFace::ascentAsString() const +QString ScFace::pdfAscentAsString() const { if (m->status == ScFace::UNKNOWN) { m->load(); } - return m->ascentAsString(); + return m->pdfAscentAsString(); } -QString ScFace::descentAsString() const +QString ScFace::pdfDescentAsString() const { if (m->status == ScFace::UNKNOWN) { m->load(); } - return m->descentAsString(); + return m->pdfDescentAsString(); } -QString ScFace::capHeightAsString() const +QString ScFace::pdfCapHeightAsString() const { if (m->status == ScFace::UNKNOWN) { m->load(); } - return m->capHeightAsString(); + return m->pdfCapHeightAsString(); } -QString ScFace::fontBBoxAsString() const +QString ScFace::pdfFontBBoxAsString() const { if (m->status == ScFace::UNKNOWN) { m->load(); } - return m->FontBBoxAsString(); + return m->pdfFontBBoxAsString(); } QString ScFace::italicAngleAsString() const diff --git a/scribus/fonts/scface.h b/scribus/fonts/scface.h index 8281505..f7c3aa0 100644 --- a/scribus/fonts/scface.h +++ b/scribus/fonts/scface.h @@ -161,12 +161,12 @@ public: // dummy implementations virtual qreal ascent(qreal sz) const { return sz; } - virtual QString ascentAsString() const { return "0" ; } - virtual QString descentAsString() const { return "0"; } - virtual QString capHeightAsString() const { return "0"; } - virtual QString FontBBoxAsString() const { return "0 0 0 0"; } + virtual QString pdfAscentAsString() const { return "0" ; } + virtual QString pdfDescentAsString() const { return "0"; } + virtual QString pdfCapHeightAsString() const { return "0"; } + virtual QString pdfFontBBoxAsString() const { return "0 0 0 0"; } virtual QString ItalicAngleAsString() const { return "0"; } - virtual qreal descent(qreal /*sz*/) const { return 0.0; } + virtual qreal descent(qreal /*sz*/) const { return 0.0; } virtual qreal xHeight(qreal sz) const { return sz; } virtual qreal capHeight(qreal sz) const { return sz; } virtual qreal height(qreal sz) const { return sz; } @@ -308,11 +308,11 @@ public: QString variant() const { return m->variant; } // font metrics - QString ascentAsString() const; - QString descentAsString() const; - QString capHeightAsString() const; - QString fontBBoxAsString() const; - QString italicAngleAsString() const; + QString pdfAscentAsString() const; + QString pdfDescentAsString() const; + QString pdfCapHeightAsString() const; + QString pdfFontBBoxAsString() const; + QString italicAngleAsString() const; qreal ascent(qreal sz=1.0) const; qreal descent(qreal sz=1.0) const; qreal xHeight(qreal sz=1.0) const; diff --git a/scribus/fonts/scface_ttf.cpp b/scribus/fonts/scface_ttf.cpp index e436d36..c8f65ae 100644 --- a/scribus/fonts/scface_ttf.cpp +++ b/scribus/fonts/scface_ttf.cpp @@ -603,7 +603,7 @@ bool ScFace_ttf::EmbedFont(QString &str) const str+="/FontName /" + psName + " def\n"; str+="/Encoding /ISOLatin1Encoding where {pop ISOLatin1Encoding} {StandardEncoding} ifelse def\n"; str+="/PaintType 0 def\n/FontMatrix [1 0 0 1 0 0] def\n"; - str+="/FontBBox ["+FontBBox+"] def\n"; + str+="/FontBBox ["+m_pdfFontBBox+"] def\n"; str+="/FontType 42 def\n"; str+="/FontInfo 8 dict dup begin\n"; str+="/FamilyName (" + psName + ") def\n"; diff --git a/scribus/pdflib_core.cpp b/scribus/pdflib_core.cpp index 9018b7f..562ae59 100644 --- a/scribus/pdflib_core.cpp +++ b/scribus/pdflib_core.cpp @@ -1368,8 +1368,8 @@ bool PDFLibCore::PDF_Begin_Doc(const QString& fn, SCFonts &AllFonts, QMap\\(\\)\\%]"), "_" )+"\n"); - PutDoc("/FontBBox [ "+face.fontBBoxAsString()+" ]\n"); + PutDoc("/FontName /" + face.psName().replace( QRegExp("[\\s\\/\\{\\[\\]\\}\\<\\>\\(\\)\\%]"), "_" ) + "\n"); + PutDoc("/FontBBox [ " + face.pdfFontBBoxAsString()+" ]\n"); PutDoc("/Flags "); //FIXME: isItalic() should be queried from ScFace, not from Qt -- AV //QFontInfo fo = QFontInfo(it.data()); @@ -1382,15 +1382,10 @@ bool PDFLibCore::PDF_Begin_Doc(const QString& fn, SCFonts &AllFonts, QMap(face.ascent()))+"\n"); -// PutDoc("/Descent "+QString::number(static_cast(face.descent()))+"\n"); -// PutDoc("/CapHeight "+QString::number(static_cast(face.capHeight()))+"\n"); -// PutDoc("/ItalicAngle "+face.italicAngle()+"\n"); -// PutDoc("/StemV "+ face.stemV() + "\n"); + PutDoc("/Ascent " + face.pdfAscentAsString()+"\n"); + PutDoc("/Descent " + face.pdfDescentAsString()+"\n"); + PutDoc("/CapHeight " + face.pdfCapHeightAsString()+"\n"); + PutDoc("/ItalicAngle " + face.italicAngleAsString()+"\n"); PutDoc("/StemV 1\n"); if ((fformat == ScFace::SFNT || fformat == ScFace::TTCF) && (Options.EmbedList.contains(it.key()))) PutDoc("/FontFile2 "+QString::number(embeddedFontObject)+" 0 R\n"); -- cgit