From 6e6cc9a3193091d50a061e0ab3affb909aed79c3 Mon Sep 17 00:00:00 2001 From: jghali Date: Sun, 24 Jun 2012 21:07:11 +0000 Subject: pdf export : avoid a few unnecessary lookups in the font map and remove some dead code git-svn-id: svn://scribus.net/branches/Version14x/Scribus@17629 11d20701-8431-0410-a711-e3c959e3b870 --- scribus/pdflib_core.cpp | 386 ++++++++++++++++++++++-------------------------- 1 file changed, 176 insertions(+), 210 deletions(-) diff --git a/scribus/pdflib_core.cpp b/scribus/pdflib_core.cpp index d8ddf19..2426360 100644 --- a/scribus/pdflib_core.cpp +++ b/scribus/pdflib_core.cpp @@ -1243,7 +1243,7 @@ bool PDFLibCore::PDF_Begin_Doc(const QString& fn, SCFonts &AllFonts, QMap>\nstream\n"+EncStream(fon, fontGlyphXForm)+"\nendstream\nendobj\n"); - Seite.XObjects[AllFonts[it.key()].psName().replace( QRegExp("[\\s\\/\\{\\[\\]\\}\\<\\>\\(\\)\\%]"), "_" )+QString::number(ig.key())] = fontGlyphXForm; + Seite.XObjects[face.psName().replace( QRegExp("[\\s\\/\\{\\[\\]\\}\\<\\>\\(\\)\\%]"), "_" )+QString::number(ig.key())] = fontGlyphXForm; } } } @@ -1254,10 +1254,10 @@ bool PDFLibCore::PDF_Begin_Doc(const QString& fn, SCFonts &AllFonts, QMap\\(\\)\\%]"), "_" )+"\n"); - PutDoc("/FontBBox [ "+AllFonts[it.key()].fontBBoxAsString()+" ]\n"); + PutDoc("/FontName /"+face.psName().replace( QRegExp("[\\s\\/\\{\\[\\]\\}\\<\\>\\(\\)\\%]"), "_" )+"\n"); + PutDoc("/FontBBox [ "+face.fontBBoxAsString()+" ]\n"); PutDoc("/Flags "); //FIXME: isItalic() should be queried from ScFace, not from Qt -- AV //QFontInfo fo = QFontInfo(it.data()); int pfl = 0; - if (AllFonts[it.key()].isFixedPitch()) + if (face.isFixedPitch()) pfl = pfl ^ 1; //if (fo.italic()) - if (AllFonts[it.key()].italicAngleAsString() != "0") + if (face.italicAngleAsString() != "0") pfl = pfl ^ 64; // pfl = pfl ^ 4; pfl = pfl ^ 32; PutDoc(QString::number(pfl)+"\n"); - PutDoc("/Ascent "+AllFonts[it.key()].ascentAsString()+"\n"); - PutDoc("/Descent "+AllFonts[it.key()].descentAsString()+"\n"); - PutDoc("/CapHeight "+AllFonts[it.key()].capHeightAsString()+"\n"); - PutDoc("/ItalicAngle "+AllFonts[it.key()].italicAngleAsString()+"\n"); -// PutDoc("/Ascent "+QString::number(static_cast(AllFonts[it.key()].ascent()))+"\n"); -// PutDoc("/Descent "+QString::number(static_cast(AllFonts[it.key()].descent()))+"\n"); -// PutDoc("/CapHeight "+QString::number(static_cast(AllFonts[it.key()].capHeight()))+"\n"); -// PutDoc("/ItalicAngle "+AllFonts[it.key()].italicAngle()+"\n"); -// PutDoc("/StemV "+ AllFonts[it.key()].stemV() + "\n"); + PutDoc("/Ascent "+face.ascentAsString()+"\n"); + PutDoc("/Descent "+face.descentAsString()+"\n"); + PutDoc("/CapHeight "+face.capHeightAsString()+"\n"); + PutDoc("/ItalicAngle "+face.italicAngleAsString()+"\n"); +// PutDoc("/Ascent "+QString::number(static_cast(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("/StemV 1\n"); if ((fformat == ScFace::SFNT || fformat == ScFace::TTCF) && (Options.EmbedList.contains(it.key()))) PutDoc("/FontFile2 "+QString::number(embeddedFontObject)+" 0 R\n"); @@ -1391,218 +1391,184 @@ bool PDFLibCore::PDF_Begin_Doc(const QString& fn, SCFonts &AllFonts, QMap>\nendobj\n"); -/* if (!FT_Has_PS_Glyph_Names(AllFonts[it.key()]) - { - StartObj(ObjCounter); - int chCount = 31; - PutDoc("[ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 "); - for (int ww = 31; ww < 256; ++ww) + + QMap > gl; + face.glyphNames(gl); + int nglyphs = 0; + QMap >::Iterator gli; + for (gli = gl.begin(); gli != gl.end(); ++gli) + { + if (gli.key() > static_cast(nglyphs)) + nglyphs = gli.key(); + } + ++nglyphs; +// qDebug() << QString("pdflib: nglyphs %1 max %2").arg(nglyphs).arg(face.maxGlyph()); + uint FontDes = fontDescriptor; + uint Fcc = nglyphs / 224; + if ((nglyphs % 224) != 0) + Fcc += 1; + for (uint Fc = 0; Fc < Fcc; ++Fc) + { + uint fontWidths2 = newObject(); + StartObj(fontWidths2); + int chCount = 32; + PutDoc("[ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 "); + for (int ww = 32; ww < 256; ++ww) { - PutDoc(QString::number(static_cast(AllFonts[it.key()]->CharWidth[itg.key()]* - 1000))+" "); - if (itg == gl.end()) - break; - ++itg; + uint glyph = 224 * Fc + ww - 32; + if (gl.contains(glyph)) + PutDoc(QString::number(static_cast(face.glyphWidth(glyph)* 1000))+" "); + else + PutDoc("0 "); chCount++; + if (signed(glyph) == nglyphs-1) + break; } PutDoc("]\nendobj\n"); - ObjCounter++; - // put widths object - // encoding dictionary w/ base encoding w/o differences - StartObj(ObjCounter); - PutDoc("<<\n/Type /Font\n/Subtype "); - PutDoc((fformat == ScFace::SFNT || fformat == ScFace::TTCF) ? "/TrueType\n" : "/Type1\n"); - PutDoc("/Name /Fo"+QString::number(a)+"\n"); - PutDoc("/BaseFont /"+AllFonts[it.key()]->psName().replace( QRegExp("[\\s\\/\\{\\[\\]\\}\\<\\>\\(\\)\\%]"), "" )+"\n"); - //cf. widths: - PutDoc("/FirstChar 0\n"); - PutDoc("/LastChar "+QString::number(chCount-1)+"\n"); - PutDoc("/Widths "+QString::number(ObjCounter-1)+" 0 R\n"); - PutDoc("/FontDescriptor "+QString::number(ObjCounter-2)+" 0 R\n"); - PutDoc(">>\nendobj\n"); - Seite.FObjects["Fo"+QString::number(a)] = ObjCounter; - ObjCounter++; - } - else */ -// { - QMap > gl; - AllFonts[it.key()].glyphNames(gl); - int nglyphs = 0; - QMap >::Iterator gli; - for (gli = gl.begin(); gli != gl.end(); ++gli) - { - if (gli.key() > static_cast(nglyphs)) - nglyphs = gli.key(); - } - ++nglyphs; -// qDebug() << QString("pdflib: nglyphs %1 max %2").arg(nglyphs).arg(AllFonts[it.key()].maxGlyph()); - uint FontDes = fontDescriptor; - uint Fcc = nglyphs / 224; - if ((nglyphs % 224) != 0) - Fcc += 1; - for (uint Fc = 0; Fc < Fcc; ++Fc) - { - uint fontWidths2 = newObject(); - StartObj(fontWidths2); - int chCount = 32; - PutDoc("[ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 "); - for (int ww = 32; ww < 256; ++ww) - { - uint glyph = 224 * Fc + ww - 32; - if (gl.contains(glyph)) - PutDoc(QString::number(static_cast(AllFonts[it.key()].glyphWidth(glyph)* 1000))+" "); - else - PutDoc("0 "); - chCount++; - if (signed(glyph) == nglyphs-1) - break; - } - PutDoc("]\nendobj\n"); - uint fontEncoding2 = newObject(); - StartObj(fontEncoding2); - QStringList toUnicodeMaps; - QList toUnicodeMapsCount; - QString toUnicodeMap = ""; - int toUnicodeMapCounter = 0; - PutDoc("<< /Type /Encoding\n"); - PutDoc("/Differences [ \n"); - int crc = 0; - bool startOfSeq = true; - for (int ww2 = 32; ww2 < 256; ++ww2) + uint fontEncoding2 = newObject(); + StartObj(fontEncoding2); + QStringList toUnicodeMaps; + QList toUnicodeMapsCount; + QString toUnicodeMap = ""; + int toUnicodeMapCounter = 0; + PutDoc("<< /Type /Encoding\n"); + PutDoc("/Differences [ \n"); + int crc = 0; + bool startOfSeq = true; + for (int ww2 = 32; ww2 < 256; ++ww2) + { + uint glyph = 224 * Fc + ww2 - 32; + QMap >::Iterator glIt = gl.find(glyph); + if (glIt != gl.end() && !glIt.value().second.isEmpty()) { - uint glyph = 224 * Fc + ww2 - 32; - QMap >::Iterator glIt = gl.find(glyph); - if (glIt != gl.end() && !glIt.value().second.isEmpty()) + if (startOfSeq) { - if (startOfSeq) - { - PutDoc(QString::number(ww2)+" "); - startOfSeq = false; - } - PutDoc("/"+glIt.value().second+" "); - QString tmp, tmp2; - tmp.sprintf("%02X", ww2); - tmp2.sprintf("%04X", glIt.value().first.unicode()); - toUnicodeMap += QString("<%1> <%2>\n").arg(tmp).arg((tmp2)); - toUnicodeMapCounter++; - if (toUnicodeMapCounter == 100) - { - toUnicodeMaps.append(toUnicodeMap); - toUnicodeMapsCount.append(toUnicodeMapCounter); - toUnicodeMap = ""; - toUnicodeMapCounter = 0; - } - crc++; + PutDoc(QString::number(ww2)+" "); + startOfSeq = false; } - else - { - startOfSeq = true; - } - if (signed(glyph) == nglyphs-1) - break; - if (crc > 8) + PutDoc("/"+glIt.value().second+" "); + QString tmp, tmp2; + tmp.sprintf("%02X", ww2); + tmp2.sprintf("%04X", glIt.value().first.unicode()); + toUnicodeMap += QString("<%1> <%2>\n").arg(tmp).arg((tmp2)); + toUnicodeMapCounter++; + if (toUnicodeMapCounter == 100) { - PutDoc("\n"); - crc = 0; + toUnicodeMaps.append(toUnicodeMap); + toUnicodeMapsCount.append(toUnicodeMapCounter); + toUnicodeMap = ""; + toUnicodeMapCounter = 0; } + crc++; } - if (toUnicodeMapCounter != 0) + else { - toUnicodeMaps.append(toUnicodeMap); - toUnicodeMapsCount.append(toUnicodeMapCounter); + startOfSeq = true; } - PutDoc("]\n"); - PutDoc(">>\nendobj\n"); - QString toUnicodeMapStream = ""; - toUnicodeMapStream += "/CIDInit /ProcSet findresource begin\n"; - toUnicodeMapStream += "12 dict begin\n"; - toUnicodeMapStream += "begincmap\n"; - toUnicodeMapStream += "/CIDSystemInfo <<\n"; - toUnicodeMapStream += "/Registry (Adobe)\n"; - toUnicodeMapStream += "/Ordering (UCS)\n"; - toUnicodeMapStream += "/Supplement 0\n"; - toUnicodeMapStream += ">> def\n"; - toUnicodeMapStream += "/CMapName /Adobe-Identity-UCS def\n"; - toUnicodeMapStream += "/CMapType 2 def\n"; - toUnicodeMapStream += "1 begincodespacerange\n"; - toUnicodeMapStream += "<0000> \n"; - toUnicodeMapStream += "endcodespacerange\n"; - for (int uniC = 0; uniC < toUnicodeMaps.count(); uniC++) + if (signed(glyph) == nglyphs-1) + break; + if (crc > 8) { - toUnicodeMapStream += QString("%1 beginbfchar\n").arg(toUnicodeMapsCount[uniC]); - toUnicodeMapStream += toUnicodeMaps[uniC]; - toUnicodeMapStream += "endbfchar\n"; + PutDoc("\n"); + crc = 0; } - toUnicodeMapStream += "endcmap\n"; - toUnicodeMapStream += "CMapName currentdict /CMap defineresource pop\n"; - toUnicodeMapStream += "end\n"; - toUnicodeMapStream += "end\n"; - uint fontToUnicode2 = WritePDFStream(toUnicodeMapStream); - uint fontObject2 = newObject(); - StartObj(fontObject2); - PutDoc("<<\n/Type /Font\n/Subtype "); - PutDoc((fformat == ScFace::SFNT || fformat == ScFace::TTCF) ? "/TrueType\n" : "/Type1\n"); - PutDoc("/Name /Fo"+QString::number(a)+"S"+QString::number(Fc)+"\n"); - PutDoc("/BaseFont /"+AllFonts[it.key()].psName().replace( QRegExp("[\\s\\/\\{\\[\\]\\}\\<\\>\\(\\)\\%]"), "_" )+"\n"); - PutDoc("/FirstChar 0\n"); - PutDoc("/LastChar "+QString::number(chCount-1)+"\n"); - PutDoc("/Widths "+QString::number(fontWidths2)+" 0 R\n"); - PutDoc("/Encoding "+QString::number(fontEncoding2)+" 0 R\n"); - PutDoc("/ToUnicode "+QString::number(fontToUnicode2)+" 0 R\n"); - PutDoc("/FontDescriptor "+QString::number(FontDes)+" 0 R\n"); - PutDoc(">>\nendobj\n"); - Seite.FObjects["Fo"+QString::number(a)+"S"+QString::number(Fc)] = fontObject2; - } // for(Fc) - uint fontWidthsForm = newObject(); - StartObj(fontWidthsForm); - PutDoc("[ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 "); - for (int ww = 32; ww < 256; ++ww) + } + if (toUnicodeMapCounter != 0) { - uint glyph = AllFonts[it.key()].char2CMap(QChar(ww)); - if (gl.contains(glyph)) - PutDoc(QString::number(static_cast(AllFonts[it.key()].glyphWidth(glyph)* 1000))+" "); - else - PutDoc("0 "); + toUnicodeMaps.append(toUnicodeMap); + toUnicodeMapsCount.append(toUnicodeMapCounter); } - PutDoc("]\nendobj\n"); - uint fontObjectForm = newObject(); - StartObj(fontObjectForm); + PutDoc("]\n"); + PutDoc(">>\nendobj\n"); + QString toUnicodeMapStream = ""; + toUnicodeMapStream += "/CIDInit /ProcSet findresource begin\n"; + toUnicodeMapStream += "12 dict begin\n"; + toUnicodeMapStream += "begincmap\n"; + toUnicodeMapStream += "/CIDSystemInfo <<\n"; + toUnicodeMapStream += "/Registry (Adobe)\n"; + toUnicodeMapStream += "/Ordering (UCS)\n"; + toUnicodeMapStream += "/Supplement 0\n"; + toUnicodeMapStream += ">> def\n"; + toUnicodeMapStream += "/CMapName /Adobe-Identity-UCS def\n"; + toUnicodeMapStream += "/CMapType 2 def\n"; + toUnicodeMapStream += "1 begincodespacerange\n"; + toUnicodeMapStream += "<0000> \n"; + toUnicodeMapStream += "endcodespacerange\n"; + for (int uniC = 0; uniC < toUnicodeMaps.count(); uniC++) + { + toUnicodeMapStream += QString("%1 beginbfchar\n").arg(toUnicodeMapsCount[uniC]); + toUnicodeMapStream += toUnicodeMaps[uniC]; + toUnicodeMapStream += "endbfchar\n"; + } + toUnicodeMapStream += "endcmap\n"; + toUnicodeMapStream += "CMapName currentdict /CMap defineresource pop\n"; + toUnicodeMapStream += "end\n"; + toUnicodeMapStream += "end\n"; + uint fontToUnicode2 = WritePDFStream(toUnicodeMapStream); + uint fontObject2 = newObject(); + StartObj(fontObject2); PutDoc("<<\n/Type /Font\n/Subtype "); PutDoc((fformat == ScFace::SFNT || fformat == ScFace::TTCF) ? "/TrueType\n" : "/Type1\n"); -// if (fformat == ScFace::SFNT || fformat == ScFace::TTCF) -// { -// PutDoc("/TrueType\n"); - PutDoc("/Name /Fo"+QString::number(a)+"Form"+"\n"); - Seite.FObjects["Fo"+QString::number(a)+"Form"] = fontObjectForm; - UsedFontsF.insert(it.key(), "/Fo"+QString::number(a)+"Form"); -/* } - else - { - PutDoc("/Type1\n"); - PutDoc("/Name /"+AllFonts[it.key()].psName().replace( QRegExp("[\\s\\/\\{\\[\\]\\}\\<\\>\\(\\)\\%]"), "_" )+"\n"); - Seite.FObjects[AllFonts[it.key()].psName().replace( QRegExp("[\\s\\/\\{\\[\\]\\}\\<\\>\\(\\)\\%]"), "_" )] = ObjCounter; - UsedFontsF.insert(it.key(), "/"+AllFonts[it.key()].psName().replace( QRegExp("[\\s\\/\\{\\[\\]\\}\\<\\>\\(\\)\\%]"), "_" )); - } */ - PutDoc("/BaseFont /"+AllFonts[it.key()].psName().replace( QRegExp("[\\s\\/\\{\\[\\]\\}\\<\\>\\(\\)\\%]"), "_" )+"\n"); - PutDoc("/Encoding << \n"); - PutDoc("/Differences [ \n"); - PutDoc("24 /breve /caron /circumflex /dotaccent /hungarumlaut /ogonek /ring /tilde\n"); - PutDoc("39 /quotesingle 96 /grave 128 /bullet /dagger /daggerdbl /ellipsis /emdash /endash /florin /fraction /guilsinglleft /guilsinglright\n"); - PutDoc("/minus /perthousand /quotedblbase /quotedblleft /quotedblright /quoteleft /quoteright /quotesinglbase /trademark /fi /fl /Lslash /OE /Scaron\n"); - PutDoc("/Ydieresis /Zcaron /dotlessi /lslash /oe /scaron /zcaron 164 /currency 166 /brokenbar 168 /dieresis /copyright /ordfeminine 172 /logicalnot\n"); - PutDoc("/.notdef /registered /macron /degree /plusminus /twosuperior /threesuperior /acute /mu 183 /periodcentered /cedilla /onesuperior /ordmasculine\n"); - PutDoc("188 /onequarter /onehalf /threequarters 192 /Agrave /Aacute /Acircumflex /Atilde /Adieresis /Aring /AE /Ccedilla /Egrave /Eacute /Ecircumflex\n"); - PutDoc("/Edieresis /Igrave /Iacute /Icircumflex /Idieresis /Eth /Ntilde /Ograve /Oacute /Ocircumflex /Otilde /Odieresis /multiply /Oslash\n"); - PutDoc("/Ugrave /Uacute /Ucircumflex /Udieresis /Yacute /Thorn /germandbls /agrave /aacute /acircumflex /atilde /adieresis /aring /ae /ccedilla\n"); - PutDoc("/egrave /eacute /ecircumflex /edieresis /igrave /iacute /icircumflex /idieresis /eth /ntilde /ograve /oacute /ocircumflex /otilde /odieresis\n"); - PutDoc("/divide /oslash /ugrave /uacute /ucircumflex /udieresis /yacute /thorn /ydieresis\n"); - PutDoc("] >>\n"); + PutDoc("/Name /Fo"+QString::number(a)+"S"+QString::number(Fc)+"\n"); + PutDoc("/BaseFont /"+face.psName().replace( QRegExp("[\\s\\/\\{\\[\\]\\}\\<\\>\\(\\)\\%]"), "_" )+"\n"); PutDoc("/FirstChar 0\n"); - PutDoc("/LastChar 255\n"); - PutDoc("/Widths "+QString::number(fontWidthsForm)+" 0 R\n"); + PutDoc("/LastChar "+QString::number(chCount-1)+"\n"); + PutDoc("/Widths "+QString::number(fontWidths2)+" 0 R\n"); + PutDoc("/Encoding "+QString::number(fontEncoding2)+" 0 R\n"); + PutDoc("/ToUnicode "+QString::number(fontToUnicode2)+" 0 R\n"); PutDoc("/FontDescriptor "+QString::number(FontDes)+" 0 R\n"); PutDoc(">>\nendobj\n"); -// } // FT_Has_PS_Glyph_Names + Seite.FObjects["Fo"+QString::number(a)+"S"+QString::number(Fc)] = fontObject2; + } // for(Fc) + uint fontWidthsForm = newObject(); + StartObj(fontWidthsForm); + PutDoc("[ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 "); + for (int ww = 32; ww < 256; ++ww) + { + uint glyph = face.char2CMap(QChar(ww)); + if (gl.contains(glyph)) + PutDoc(QString::number(static_cast(face.glyphWidth(glyph)* 1000))+" "); + else + PutDoc("0 "); + } + PutDoc("]\nendobj\n"); + uint fontObjectForm = newObject(); + StartObj(fontObjectForm); + PutDoc("<<\n/Type /Font\n/Subtype "); + PutDoc((fformat == ScFace::SFNT || fformat == ScFace::TTCF) ? "/TrueType\n" : "/Type1\n"); +// if (fformat == ScFace::SFNT || fformat == ScFace::TTCF) +// { +// PutDoc("/TrueType\n"); + PutDoc("/Name /Fo"+QString::number(a)+"Form"+"\n"); + Seite.FObjects["Fo"+QString::number(a)+"Form"] = fontObjectForm; + UsedFontsF.insert(it.key(), "/Fo"+QString::number(a)+"Form"); +/* } + else + { + PutDoc("/Type1\n"); + PutDoc("/Name /"+face.psName().replace( QRegExp("[\\s\\/\\{\\[\\]\\}\\<\\>\\(\\)\\%]"), "_" )+"\n"); + Seite.FObjects[face.psName().replace( QRegExp("[\\s\\/\\{\\[\\]\\}\\<\\>\\(\\)\\%]"), "_" )] = ObjCounter; + UsedFontsF.insert(it.key(), "/"+face.psName().replace( QRegExp("[\\s\\/\\{\\[\\]\\}\\<\\>\\(\\)\\%]"), "_" )); + } */ + PutDoc("/BaseFont /"+face.psName().replace( QRegExp("[\\s\\/\\{\\[\\]\\}\\<\\>\\(\\)\\%]"), "_" )+"\n"); + PutDoc("/Encoding << \n"); + PutDoc("/Differences [ \n"); + PutDoc("24 /breve /caron /circumflex /dotaccent /hungarumlaut /ogonek /ring /tilde\n"); + PutDoc("39 /quotesingle 96 /grave 128 /bullet /dagger /daggerdbl /ellipsis /emdash /endash /florin /fraction /guilsinglleft /guilsinglright\n"); + PutDoc("/minus /perthousand /quotedblbase /quotedblleft /quotedblright /quoteleft /quoteright /quotesinglbase /trademark /fi /fl /Lslash /OE /Scaron\n"); + PutDoc("/Ydieresis /Zcaron /dotlessi /lslash /oe /scaron /zcaron 164 /currency 166 /brokenbar 168 /dieresis /copyright /ordfeminine 172 /logicalnot\n"); + PutDoc("/.notdef /registered /macron /degree /plusminus /twosuperior /threesuperior /acute /mu 183 /periodcentered /cedilla /onesuperior /ordmasculine\n"); + PutDoc("188 /onequarter /onehalf /threequarters 192 /Agrave /Aacute /Acircumflex /Atilde /Adieresis /Aring /AE /Ccedilla /Egrave /Eacute /Ecircumflex\n"); + PutDoc("/Edieresis /Igrave /Iacute /Icircumflex /Idieresis /Eth /Ntilde /Ograve /Oacute /Ocircumflex /Otilde /Odieresis /multiply /Oslash\n"); + PutDoc("/Ugrave /Uacute /Ucircumflex /Udieresis /Yacute /Thorn /germandbls /agrave /aacute /acircumflex /atilde /adieresis /aring /ae /ccedilla\n"); + PutDoc("/egrave /eacute /ecircumflex /edieresis /igrave /iacute /icircumflex /idieresis /eth /ntilde /ograve /oacute /ocircumflex /otilde /odieresis\n"); + PutDoc("/divide /oslash /ugrave /uacute /ucircumflex /udieresis /yacute /thorn /ydieresis\n"); + PutDoc("] >>\n"); + PutDoc("/FirstChar 0\n"); + PutDoc("/LastChar 255\n"); + PutDoc("/Widths "+QString::number(fontWidthsForm)+" 0 R\n"); + PutDoc("/FontDescriptor "+QString::number(FontDes)+" 0 R\n"); + PutDoc(">>\nendobj\n"); } a++; } -- cgit