I just thought I would add that the GetGlyphID function and several others won't work for embedded fonts. That's pretty much it.
So, the approach I have been taking makes the assumption that these fonts lie on my system when in fact the fonts are embedded. I personally think knowing this requires a deeper understanding of podofo the average user won't have. It might be worth putting that information into the documentation. Just a suggestion. We have spent some time on this now and have just realized the approach we have been taking is all wrong. On Mon, Oct 26, 2015 at 3:17 AM, Svetlana Watkins < svetlana.watk...@gmail.com> wrote: > Something I forgot to add. In one of the Pdf's I was using, I am able to > get the font name using: PdfFontMetrics::GetFontname() which returns > LNCKCK+TimesNewRomanPSMT . I'm beginning to think that the reason the > PdfFontMetricsObject version of GetGlyphID is being called is due to some > kind of limitation with my system. I'm using Windows XP SP3. > > I even deleted the FontCache file in my Win32 folder and restarted the > computer (enabling it to be rebuilt) but it hasn't made any difference. > > Could it be that the loaded font isn't recognized as something managed by > Freetype2 or a Base14 font so it's defaulting the PdfFontMetricsObject > every time? I'm certain my problem has something to do with the font. > > > > On Mon, Oct 26, 2015 at 3:11 AM, Svetlana Watkins < > svetlana.watk...@gmail.com> wrote: > >> I really appreciate the help with this, thanks very much. I realize >> you're probably very busy. >> >> Unfortunately your code snipped produced the same result. The GetGlyphID >> function returned 0 again so I placed some messages in the source code to >> see what was going on. >> >> As the PdfFontMetrics object doesn't contain a definition for GetGlyphID >> (I'm assuming that this is because it's only an abstract class), the >> PdfFontMetricsObject::GetGlyphID function is being called. >> >> Here's the definition of this method: * It explains why I'm getting a >> zero. * >> >> long PdfFontMetricsObject::GetGlyphId( long ) const >> { >> // TODO >> cout << "PdfFontMetricsObject_GetGlyphID Returning" << endl; >> return 0; // OC 13.08.2010 BugFix: Avoid microsoft compiler error >> } >> >> My coding skills aren't as advanced as any of yours so I'm not sure I >> understand what the reason is for this? I'm assuming that it's yet to be >> completed. >> >> On the other hand, my program could be referencing this method instead of >> the method contained in PdfFontMetricsFreetype because of something I've >> done wrong. >> >> Domonik ... The code I posted wasn't just some snipped. It was a small >> functioning (or malfunctioning) program I wrote to highlight a point. >> >> On Tue, Oct 20, 2015 at 1:49 PM, Svetlana Watkins < >> svetlana.watk...@gmail.com> wrote: >> >>> I am having trouble getting the PdfFontMetrics::GetGlyphID(long >>> lunicode) function to work. I have pasted some very simplified code >>> below. For the current font some functions are working as shown below. >>> For example I can successfully get the Char Width and Font Size for each >>> character but for some reason not the Glyph ID. I am using the latest >>> version on the Podofo website 0.9.3 but am having trouble with the >>> subversion link (i'm using SV Tortoise to download the files. Could it be >>> that this issue has already been fixed with a patch that is only >>> incorporated in the latest SVN version? >>> >>> Could someone please test my code below and maybe indicate what I have >>> done wrong here? If you look down to the inline comment >>> "// NOW ATTEMPT TO EXTRACT GLYPH INFORMATION" just below that is where I >>> have applied the GetGlyphID method. Thanks >>> >>> >>> >>> >>> #include <iostream> >>> #include <string> >>> #include <cstdlib> >>> #include <podofo/podofo.h> >>> #include <stack> >>> >>> >>> using namespace PoDoFo; >>> using namespace std; >>> >>> >>> PdfMemDocument doc; >>> int page_count; >>> PdfPage *page; >>> >>> EPdfContentsType type; >>> PdfVariant var; >>> const char* token; >>> >>> PdfFont *Font; >>> const PdfFontMetrics *met; >>> >>> PdfArray pArray; // for extracting text under TJ operator >>> int size_of_array; >>> string TJ_string; >>> >>> stack<PdfVariant> PdfStack; >>> >>> // THE PURPOSE OF THIS SMALL PROGRAM IS TO SHOW HOW I AM EXTRACTING THE >>> GLYPH ID. >>> long GlyphID; >>> >>> >>> int main(int argc, char **argv) >>> { >>> try{ >>> >>> doc.Load(argv[1]); >>> page_count = doc.GetPageCount(); >>> >>> for(int i = 0; i < page_count;i++) >>> { >>> page = doc.GetPage(i); >>> PdfContentsTokenizer tokenizer(page); // tokenize page >>> >>> >>> >>> while(tokenizer.ReadNext(type,token,var)) >>> { >>> >>> if(type==ePdfContentsType_Keyword) >>> { >>> string keyword; >>> keyword = token; >>> >>> if(keyword == "Tf") >>> { >>> >>> PdfStack.pop(); //pop the font size off the stack. >>> PdfName name_of_font = PdfStack.top().GetName(); >>> PdfObject *ofont = >>> page->GetFromResources(PdfName("Font"),name_of_font); >>> Font = doc.GetFont(ofont); >>> met = Font->GetFontMetrics(); // get the font metrics for >>> current font. >>> //met is global. >>> } >>> >>> if(keyword == "TJ") >>> { >>> >>> pArray = PdfStack.top().GetArray(); >>> PdfStack.pop(); >>> size_of_array = pArray.GetSize(); >>> >>> for(int x = 0; x < size_of_array; x++) >>> { >>> if(pArray[x].IsHexString()|| pArray[x].IsString()) >>> { >>> TJ_string = pArray[x].GetString().GetString(); >>> >>> // Now to test the font metrics. >>> for (int s = 0; s < TJ_string.length(); s++) >>> { >>> unsigned char individual_character = >>> TJ_string[s]; >>> >>> //THE BELOW CALL TO CURRENT FONT DATA WORKS FINE >>> cout << "Font Size is: " << met->GetFontSize() << >>> endl; >>> cout << "Character Width is: " << >>> met->CharWidth(individual_character) << endl; >>> >>> // NOW ATTEMPT TO EXTRACT GLYPH INFORMATION >>> GlyphID = >>> met->GetGlyphId((long)individual_character); >>> cout << "************************* THE GLYPH ID IS: >>> " << GlyphID << endl; >>> >>> >>> } >>> >>> } >>> } >>> >>> >>> } >>> >>> >>> } >>> else if(type==ePdfContentsType_Variant) >>> { >>> PdfStack.push(var); >>> } >>> >>> >>> } >>> >>> } >>> } >>> catch(PdfError &err) >>> { >>> cout << "The Error is: " << err.what() << endl; >>> } >>> >>> >>> } >>> >> >> >
------------------------------------------------------------------------------
_______________________________________________ Podofo-users mailing list Podofo-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/podofo-users