summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjghali <jghali@11d20701-8431-0410-a711-e3c959e3b870>2012-06-24 21:07:11 +0000
committerjghali <jghali@11d20701-8431-0410-a711-e3c959e3b870>2012-06-24 21:07:11 +0000
commit6e6cc9a3193091d50a061e0ab3affb909aed79c3 (patch)
treec7a7d799098416a8d862004382dd97ec6be87a7d
parent183dc8a0add89cf36beb940a1fe8c8a1eaaf1dce (diff)
downloadscribus-6e6cc9a3193091d50a061e0ab3affb909aed79c3.tar.gz
scribus-6e6cc9a3193091d50a061e0ab3affb909aed79c3.tar.xz
scribus-6e6cc9a3193091d50a061e0ab3affb909aed79c3.zip
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
-rw-r--r--scribus/pdflib_core.cpp386
1 files 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<QStrin
if (Options.Compress)
PutDoc("\n/Filter /FlateDecode");
PutDoc(" >>\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<QStrin
if ((fformat == ScFace::PFB) && (Options.EmbedList.contains(it.key())))
{
QString fon("");
+ QByteArray bb;
embeddedFontObject = newObject();
StartObj(embeddedFontObject);
- QByteArray bb;
- AllFonts[it.key()].RawData(bb);
+ face.RawData(bb);
int posi;
for (posi = 6; posi < bb.size(); ++posi)
{
@@ -1307,7 +1307,7 @@ bool PDFLibCore::PDF_Begin_Doc(const QString& fn, SCFonts &AllFonts, QMap<QStrin
bool ok = true;
embeddedFontObject = newObject();
StartObj(embeddedFontObject);
- AllFonts[it.key()].EmbedFont(fon);
+ face.EmbedFont(fon);
int len1 = fon.indexOf("eexec")+5;
fon2 = fon.left(len1)+"\n";
int len2 = fon.indexOf("0000000000000000000000000");
@@ -1339,10 +1339,10 @@ bool PDFLibCore::PDF_Begin_Doc(const QString& fn, SCFonts &AllFonts, QMap<QStrin
if ((fformat == ScFace::SFNT || fformat == ScFace::TTCF) && (Options.EmbedList.contains(it.key())))
{
QString fon("");
+ QByteArray bb;
embeddedFontObject = newObject();
StartObj(embeddedFontObject);
- QByteArray bb;
- AllFonts[it.key()].RawData(bb);
+ face.RawData(bb);
//AV: += and append() dont't work because they stop at '\0' :-(
for (int i=0; i < bb.size(); i++)
fon += QChar(bb[i]);
@@ -1360,29 +1360,29 @@ bool PDFLibCore::PDF_Begin_Doc(const QString& fn, SCFonts &AllFonts, QMap<QStrin
StartObj(fontDescriptor);
// TODO: think about QByteArray ScFace::getFontDescriptor() -- AV
PutDoc("<<\n/Type /FontDescriptor\n");
- PutDoc("/FontName /"+AllFonts[it.key()].psName().replace( QRegExp("[\\s\\/\\{\\[\\]\\}\\<\\>\\(\\)\\%]"), "_" )+"\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<int>(AllFonts[it.key()].ascent()))+"\n");
-// PutDoc("/Descent "+QString::number(static_cast<int>(AllFonts[it.key()].descent()))+"\n");
-// PutDoc("/CapHeight "+QString::number(static_cast<int>(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<int>(face.ascent()))+"\n");
+// PutDoc("/Descent "+QString::number(static_cast<int>(face.descent()))+"\n");
+// PutDoc("/CapHeight "+QString::number(static_cast<int>(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<QStrin
if ((fformat == ScFace::PFA) && (Options.EmbedList.contains(it.key())))
PutDoc("/FontFile "+QString::number(embeddedFontObject)+" 0 R\n");
PutDoc(">>\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<uint,std::pair<QChar,QString> > gl;
+ face.glyphNames(gl);
+ int nglyphs = 0;
+ QMap<uint,std::pair<QChar,QString> >::Iterator gli;
+ for (gli = gl.begin(); gli != gl.end(); ++gli)
+ {
+ if (gli.key() > static_cast<uint>(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<int>(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<int>(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<uint,std::pair<QChar,QString> > gl;
- AllFonts[it.key()].glyphNames(gl);
- int nglyphs = 0;
- QMap<uint,std::pair<QChar,QString> >::Iterator gli;
- for (gli = gl.begin(); gli != gl.end(); ++gli)
- {
- if (gli.key() > static_cast<uint>(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<int>(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<int> 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<int> 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<uint,std::pair<QChar,QString> >::Iterator glIt = gl.find(glyph);
+ if (glIt != gl.end() && !glIt.value().second.isEmpty())
{
- uint glyph = 224 * Fc + ww2 - 32;
- QMap<uint,std::pair<QChar,QString> >::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> <FFFF>\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<int>(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> <FFFF>\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<int>(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++;
}