0

I have a pdf document whose font type is OpenType (Garamond OpenType). So the pdfBox text extraction can also extract special characters (for example small capital lettres), which caused problems when the underlying font has been a simple Type1 font.

However, the text extraction now causes another type of problem. In my case, when the charater sequences "fi" or "fl" occur in the text, the PDFTextStripper#getText(PDDocument doc) extracts them as single characters: 'fi' and 'fl' and sets a space character on their right side.

(Surprisingly, if I access the list of characters of a page via the charactersByArticle field of PDFTextStripper / via the PDFTextStripper#processText(TextPosition pos) method, the same characters show up as 'normal-single' characters f i / f l).

My assumption is that the advantage of the underlying OpenFont type turns into this particular disadvantage, because the PDFTextStripper recognizes the character sequence f i / f l as special charcters fi / fl (- what might have to do with the fact, that the getText() method calculates things like whitespace characters by distances / positional placements).

Background: The given document is a wordbook text with very dense printed text.

My question: is there anything what I can do to avoid this problem?

thanks in advance ...

EDIT:

@mkl Here is a simple code-snippet (for testing-purposes only):

import java.io.File;
import java.io.IOException;
import java.util.List;
import java.util.Vector;

import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.util.PDFTextStripper;
import org.apache.pdfbox.util.TextPosition;

public class PDFTextStripperOpenFontTest extends PDFTextStripper {

public PDFTextStripperOpenFontTest(String encoding) throws IOException {
    super(encoding);
}

public static void main(String[] args) throws IOException {
    String fileName = "filename";
    PDFTextStripperOpenFontTest stripper = new PDFTextStripperOpenFontTest("UTF-8");
    stripper.setSortByPosition(false);
    PDDocument doc = PDDocument.load(new File(fileName));
    stripper.setStartPage(1);
    stripper.setEndPage(1);
    //extract text by getText(doc)
    String text1 = stripper.getText(doc);
    text1 = text1.replaceAll("\\r|\\n", "");
    System.out.println(text1);
    //extract text by
    StringBuilder sb = new StringBuilder();
    Vector<List<TextPosition>> list = stripper.getCharactersByArticle();
    for (List<TextPosition> list2 : list) 
        for (TextPosition textPosition : list2) 
            sb.append(textPosition.getCharacter());
    System.out.println(sb.toString());  
    doc.close();
}
}

And here is the output for the test file (the differences begin in the second half of the page):

des Verhältnisses von Individuum und Gesellschaft habe (vgl. Holzkamp-Osterkamp 1976, Kap. 5.2). Er schlug allerdings vor, Sigmund Freuds persön-lichkeitstheoretische Konzeptionen »der Abwehr-vorgänge, der Angst und des Unbewussten« mit historisch bestimmten gesellschaftlichen Verhältnis-sen zu vermitteln (255f) und sie subjektwissenschaft-lich zu reinterpretieren. »Freuds Prämissen von der  genuinen Unvereinbarkeit subjektiver Lebensan-sprüche mit gesellschaftlichen Anforderungen« sind für Holzkamp mehr als eine »falsche Universali-sierung bürgerlich-kapitalistischer Verhältnisse«, sie brächten auch »bestimmte Aspekte der subjektiven Situation der Menschen unter diesen Verhältnissen […] differenziert und schonungslos« auf den Begriff (1984, 33). Die Auffassung, dass die ich-psycholo-gische »›Soziologisierung‹« die »Schärfe und Uner-bittlichkeit« der Psychoanalyse »verkleistert« (ebd.), teilt er mit Adorno, der darin deren »Kastrierung« behauptet (1952, 25).3. Die Entwicklung einer eigenständigen KP begann mit dem Problem, allein auf der Basis der marx-schen KrpÖ verschiedene Ansätze und Befunde der »bürgerlichen« Psychologie nicht »differenziell«, d.h. nach ihrem jeweiligen Verhältnis von Erkennt-nismöglichkeiten und -grenzen beurteilen und somit nicht kritisch-psychologisch aufheben zu können (Maiers 1979). »Positive Ergebnisse über die empi-rische Subjektivität des Menschen in der bürgerlichen Gesellschaft« (Holzkamp 1978, 249) versprachen zwei Wege historisch-rekonstruktiver Forschung: wissenschaftsbezogen zu untersuchen, wie es dazu kam, dass im 19. Jh. »empirische Subjektivität« auf eine Weise problematisch wurde, die zur Entstehung der Einzelwissenschaft »Psychologie« führte (1973, 45); und gegenstandsbezogen die Grundlagen der menschlichen Subjektivität von der Entstehung des Psychischen über das Tier-Mensch-Übergangsfeld bis zur Existenz in kapitalistischen Verhältnissen zu analysieren (46f). Während der erste Weg im Umkreis der KP v.a. von Siegfried Jaeger und Irmingard Staeuble (1978) verfolgt wurde, konzentrierte sich der Kreis um Holzkamp zunächst auf den zweiten. Holzkamp resümiert später, dass »die Unterscheidung zwischen wissenschafts- und gegenstandsbezogener Kategorialanalyse nur ›aspekthafter‹ Natur ist« (1983, 37). Problematisch bleibt, inwieweit die Begriffe, von denen auch die Rekonstruktion des Psychischen ihren Ausgang nehmen muss, diese formieren (Fries 2011). Insofern müssen bei einer »vollständigen his-torischen Analyse« die betreffenden psychologischen Konzepte »›im Schnittpunkt‹« beider »Entwicklungs-züge« begriffen werden (Holzkamp 1973, 47).4. Der Anspruch der historischen Rekonstruktion des Psychischen ist es, die auf einen vorparadigma-tischen (Métraux 1981; Graumann 1994) Zustand der Psychologie verweisende »Beliebigkeit« (Holz-kamp 1977b) der Begriffsbildung zu überwinden und die Psychologie kategorial neu zu begründen. Termi-nologisch ist es schwierig, dass in der KP die Bezeich-nung wissenschaftlich ausgewiesener Grundbegriffe als »Kategorien« (programmatisch Holzkamp 1983, 19 u. 27) im Gegensatz zur Verwendungsweise bei Marx steht, der damit gerade Alltagsvorstellun-gen meint (vgl. W.F.Haug 2008), die wiederum bei Holzkamp als »Vorbegriffe« (1983, 48ff u. 515ff) bezeichnet werden.4.1 In einer Spezifi zierung des logisch-historischen Herangehens ging es der KP darum, das Verhältnis von Natur-, Gesellschafts- und Individualgeschichte begriffl ich so aufzuklären, dass dem entwicklungs-geschichtlich Früheren das begriffl ich Allgemeinere und dem entwicklungsgeschichtlich Späteren das begriffl ich Spezifi schere entsprechen soll. Dies als eine Grundlage dafür, sowohl Anthropomorphisie-rungen tierischen Verhaltens als auch Biologisierun-gen gesellschaftlicher Verhältnisse bzw. menschlichen Handelns und Erlebens und damit Universalisierun-gen historisch spezifi scher Ausdrucksformen des Psychischen zu vermeiden. Die KP schloss an Arbei-ten der »Kulturhistorischen Schule« an, bes. an  Alexej N. Leontjews 1959 veröffentlichtes »historisches Herangehen an die Untersuchungen der mensch-lichen Psyche« (1973, 262ff; vgl. Holzkamp 1983, 47). Gegen dessen Durchführung wandten Holz-kamp und Volker Schurig (1973, XLVI) jedoch ein, dass der Gedanke der Historizität des Psychischen in Leontjews »Forschungsarbeit nicht überall mit gleicher Entschiedenheit Berücksichtigung« gefun-den habe, die Gesellschaftlichkeit des Menschen zwar allgemein bestimmt, nicht aber formationsspe-zifi sch auf gesellschaftliche Widersprüche in der SU konkretisiert worden sei. – In der KP bestanden mit Blick auf die DDR, der Holzkamp eine »systembe-dingte Konvergenz zwischen allgemeinen und indi-viduellen Interessen« (1983, 382) attestierte, ähnliche Neigungen zur Widerspruchseliminierung, die von der Hoffnung auf dortige Publikationszustimmung genährt waren (vgl. Markard 2009a, 199f).4.2 Soweit sich die Kategorialanalyse auf biologi-sche Evolutionsprozesse bezieht, wird sie als »funk-tional-historisch« charakterisiert (Maiers 1999). Sie zielt auf die Rekonstruktion von Widersprüchen in Organismus-Umwelt-Konstellationen, aus denen Entwicklungen und neue Qualitäten in ihrer biolo-gischen Funktionalität begreifbar werden – bezogen auf jene Evolutionsreihe, die zum Menschen hin-führt, unter dem Gesichtspunkt der Entstehung und Kritische Psychologie 171 172
des Verhältnisses von Individuum und Gesellschaft habe (vgl. Holzkamp-Osterkamp 1976, Kap. 5.2). Er schlug allerdings vor, Sigmund Freuds persön-lichkeitstheoretische Konzeptionen »der Abwehr-vorgänge, der Angst und des Unbewussten« mit historisch bestimmten gesellschaftlichen Verhältnis-sen zu vermitteln (255f) und sie subjektwissenschaft-lich zu reinterpretieren. »Freuds Prämissen von der  genuinen Unvereinbarkeit subjektiver Lebensan-sprüche mit gesellschaftlichen Anforderungen« sind für Holzkamp mehr als eine »falsche Universali-sierung bürgerlich-kapitalistischer Verhältnisse«, sie brächten auch »bestimmte Aspekte der subjektiven Situation der Menschen unter diesen Verhältnissen […] differenziert und schonungslos« auf den Begriff (1984, 33). Die Auffassung, dass die ich-psycholo-gische »›Soziologisierung‹« die »Schärfe und Uner-bittlichkeit« der Psychoanalyse »verkleistert« (ebd.), teilt er mit Adorno, der darin deren »Kastrierung« behauptet (1952, 25).3. Die Entwicklung einer eigenständigen KP begann mit dem Problem, allein auf der Basis der marx-schen KrpÖ verschiedene Ansätze und Befunde der »bürgerlichen« Psychologie nicht »differenziell«, d.h. nach ihrem jeweiligen Verhältnis von Erkennt-nismöglichkeiten und -grenzen beurteilen und somit nicht kritisch-psychologisch aufheben zu können (Maiers 1979). »Positive Ergebnisse über die empi-rische Subjektivität des Menschen in der bürgerlichen Gesellschaft« (Holzkamp 1978, 249) versprachen zwei Wege historisch-rekonstruktiver Forschung: wissenschaftsbezogen zu untersuchen, wie es dazu kam, dass im 19. Jh. »empirische Subjektivität« auf eine Weise problematisch wurde, die zur Entstehung der Einzelwissenschaft »Psychologie« führte (1973, 45); und gegenstandsbezogen die Grundlagen der menschlichen Subjektivität von der Entstehung des Psychischen über das Tier-Mensch-Übergangsfeld bis zur Existenz in kapitalistischen Verhältnissen zu analysieren (46f). Während der erste Weg im Umkreis der KP v.a. von Siegfried Jaeger und Irmingard Staeuble (1978) verfolgt wurde, konzentrierte sich der Kreis um Holzkamp zunächst auf den zweiten. Holzkamp resümiert später, dass »die Unterscheidung zwischen wissenschafts- und gegenstandsbezogener Kategorialanalyse nur ›aspekthafter‹ Natur ist« (1983, 37). Problematisch bleibt, inwieweit die Begriffe, von denen auch die Rekonstruktion des Psychischen ihren Ausgang nehmen muss, diese formieren (Fries 2011). Insofern müssen bei einer »vollständigen his-torischen Analyse« die betreffenden psychologischen Konzepte »›im Schnittpunkt‹« beider »Entwicklungs-züge« begriffen werden (Holzkamp 1973, 47).4. Der Anspruch der historischen Rekonstruktion des Psychischen ist es, die auf einen vorparadigma-tischen (Métraux 1981; Graumann 1994) Zustand der Psychologie verweisende »Beliebigkeit« (Holz-kamp 1977b) der Begriffsbildung zu überwinden und die Psychologie kategorial neu zu begründen. Termi-nologisch ist es schwierig, dass in der KP die Bezeich-nung wissenschaftlich ausgewiesener Grundbegriffe als »Kategorien« (programmatisch Holzkamp 1983, 19 u. 27) im Gegensatz zur Verwendungsweise bei Marx steht, der damit gerade Alltagsvorstellun-gen meint (vgl. W.F.Haug 2008), die wiederum bei Holzkamp als »Vorbegriffe« (1983, 48ff u. 515ff) bezeichnet werden.4.1 In einer Spezifi zierung des logisch-historischen Herangehens ging es der KP darum, das Verhältnis von Natur-, Gesellschafts- und Individualgeschichte begriffl ich so aufzuklären, dass dem entwicklungs-geschichtlich Früheren das begriffl ich Allgemeinere und dem entwicklungsgeschichtlich Späteren das begriffl ich Spezifi schere entsprechen soll. Dies als eine Grundlage dafür, sowohl Anthropomorphisie-rungen tierischen Verhaltens als auch Biologisierun-gen gesellschaftlicher Verhältnisse bzw. menschlichen Handelns und Erlebens und damit Universalisierun-gen historisch spezifi scher Ausdrucksformen des Psychischen zu vermeiden. Die KP schloss an Arbei-ten der »Kulturhistorischen Schule« an, bes. an  Alexej N. Leontjews 1959 veröffentlichtes »historisches Herangehen an die Untersuchungen der mensch-lichen Psyche« (1973, 262ff; vgl. Holzkamp 1983, 47). Gegen dessen Durchführung wandten Holz-kamp und Volker Schurig (1973, XLVI) jedoch ein, dass der Gedanke der Historizität des Psychischen in Leontjews »Forschungsarbeit nicht überall mit gleicher Entschiedenheit Berücksichtigung« gefun-den habe, die Gesellschaftlichkeit des Menschen zwar allgemein bestimmt, nicht aber formationsspe-zifi sch auf gesellschaftliche Widersprüche in der SU konkretisiert worden sei. – In der KP bestanden mit Blick auf die DDR, der Holzkamp eine »systembe-dingte Konvergenz zwischen allgemeinen und indi-viduellen Interessen« (1983, 382) attestierte, ähnliche Neigungen zur Widerspruchseliminierung, die von der Hoffnung auf dortige Publikationszustimmung genährt waren (vgl. Markard 2009a, 199f).4.2 Soweit sich die Kategorialanalyse auf biologi-sche Evolutionsprozesse bezieht, wird sie als »funk-tional-historisch« charakterisiert (Maiers 1999). Sie zielt auf die Rekonstruktion von Widersprüchen in Organismus-Umwelt-Konstellationen, aus denen Entwicklungen und neue Qualitäten in ihrer biolo-gischen Funktionalität begreifbar werden – bezogen auf jene Evolutionsreihe, die zum Menschen hin-führt, unter dem Gesichtspunkt der Entstehung und Kritische Psychologie 171 172

you can find the pdf-file used for this test under this link: https://issues.apache.org/jira/browse/PDFBOX-2548.

I added a second test page, from a former volume of the same wordbook. For this volume, a Type1 font has been used. I chose a page where the two words "begrifflich" and "spezifisch" occur (they cause problems as you can see in the first test). As you can see/test, the described error doesn't occur when extracting the text of this second page! This strenghens my assumption that the OpenType format is the reason for the occuring error.

Here is the second output:

ehrenamtliche Arbeit, Eigenarbeit, Elend, Exklusion,Gemeinwesen, Genossenschaft, Kommunalpolitik, Kom-munitarismus, Nachbarschaftsbewegung, neue sozialeBewegungen, Owenismus, Selbstverwaltung, Sozialarbeit,Sozialfürsorge, Sozialpolitik, Sozialstaat, Wohlfahrtsstaat,WohnungsfrageGemeinwirtschaftA: al-iqisäd at-ta’äwuni.– E: communal economy . –F: économie communautaire. –R: kooperativnoye khoziaysrvo. –S: economía comunitaria. – C: jiti jingjiDie Konzeption der ›G‹ ist nicht originär sozialistisch.Sie wurde erst nachträglich von der Arbeiterbewegungbegrifflich adaptiert und im Sinne eines nicht-kapita-listischen Wirtschaftssektors (v.a. gewerkschaftseigene,genossenschaftliche und öffentliche Unternehmen),der primär bedarfsorientiert und demokratisch kon-trolliert arbeiten sollte, in reformsozialistische Strate-gien integriert.In jeweils unterschiedlichen Formen und Strukturenhat sich seit Ende des 19. Jh. in den verschiedeneneuropäischen Ländern ein Unternehmenssektor mitnicht-kapitalistischen Eigentümern herausgebildet,in Gestalt staatlicher bzw. kommunaler und nicht-staatlicher Unternehmen. In Großbritannien entstandunter Einfluss des Munizipalsozialismus hauptsäch-lich ein kommunal-gemeinwirtschaftlicher Sektor;in Österreich versteht man unter G vorwiegend den(zentralisierten) Staatssektor. In Deutschland da-gegen hat die gewerkschaftlich organisierte Arbei-terbewegung selbst einen sog. freigemeinwirtschaft-lichen Sektor gefördert und zeitweilig aufgebaut,dessen Besonderheit eine Identifikation mit demenglischen ›social sector‹ oder dem französischen›secteur public‹ verbietet. So bezeichnet der Aus-druck im engeren Sinne eine spezifische, vornehmlichin Deutschland nach dem Ersten Weltkrieg geschaffeneRealität.1. Die Klassiker der deutschen G-Lehre (EugenDÜHRING, Albert SCHÄFFLE, Adolph WAGNER) gingendavon aus, dass in kapitalistischen Gesellschaften –um die Funktionsfähigkeit des marktwirtschaftlichenSystems zu gewährleisten – neben dem privatwirt-schaftlichen Sektor ein mehr oder weniger ausgedehn-ter gemeinwirtschaftlicher Sektor bestehen muss, dernicht profitorientiert ist, was Hans RITSCHL späterals »dualistische Wirtschaftsordnung« charakterisiert(1931). Die G umfasst für diese Tradition nicht nurstaatliche bzw. kommunale, sondern auch ›frei-gemeinwirtschaftliche‹ Unternehmen privater Trägerund Genossenschaften. Die klassische G-Lehre isteine harmonistische Konzeption (THIEMEYER 1980),die ein ›organisches‹ Nebeneinander von Privat- undGemeinwirtschaft anstrebt. Im System zunehmenderDominanz der Großindustrie und bei einer wach-senden und kämpferischen Arbeiterbewegung sollennicht-profitorientierte staatssozialistische Betriebefür sozialen Ausgleich sorgen und zur politischenEntspannung beitragen (SCHÄFFLE 1875).2. Bei MARX und ENGELS lassen sich nur wenige kon-zeptionelle Bezüge zur G-Lehre herstellen. Heftigpolemisiert Engels gegen DÜHRINGS auf die G-Kon-zeption zugeschnittene »Wirtschaftskommunen« (AD,MEW 20, 268ff). Bis zu dem Zeitpunkt, wo unterMarxisten reformistische Auffassungen an Bodengewinnen, besteht ein zentraler Gegensatz zwischenMarxismus und G-Lehre: den Klassikern des Marxis-mus kann in diesem Kontext der quasi umfassendsteG-Anspruch zugeschrieben werden (KÜHNE 1978),nämlich auf gesamtgesellschaftliche Verwirklichungeiner nicht-kapitalistischen G.Einzelne Formen der G werden von MARX undENGELS dem Inhalt nach angesprochen, etwa öffent-liche Unternehmen: so wird in den Forderungen derKommunistischen Partei in Deutschland 1848 dieVerstaatlichung des Transport-, Verkehrs- und Kom-munikationswesens verlangt, verbunden mit dempreispolitischen Konzept des ›Nulltarifs‹: die betref-fenden öffentlichen Dienstleistungen sollen »derunbemittelten Klasse zur unentgeltlichen Verfügunggestellt« werden (MEW 5, 4; vgl. 4, 373f).Die meisten der für die G-Thematik relevantenAusführungen beziehen sich auf genossenschaftlicharbeitende »Kooperativfabriken«. MARX widmet sichder Problematik von isolierten oder sektoral begrenz-ten Genossenschaftsunternehmen, die den privat-wirtschaftlichen ›Eigennutz‹ zunächst nur im Innen-verhältnis der Kooperativ-Mitglieder überwindenkönnen. Ein umfassendes und gesamtgesellschaftlichrationales System freier Kooperativarbeit hingegenlässt sich Marx zufolge nicht ohne gesellschaftlicheVeränderungen mit dem Übergang der Staatsmachtin die Hände der Produzenten selbst verwirklichen(Inauguraladresse, MEW 16, 11, 195f; Gotha, MEW19, 13-32). ENGELS spricht sich in späteren Jahrenmehrfach für genossenschaftliche Produktionsbe-triebe aus (z.B. MEW 36, 261, 426), freilich nicht imSinne einer harmonistischen G-Konzeption, bei der
ehrenamtliche Arbeit, Eigenarbeit, Elend, Exklusion,Gemeinwesen, Genossenschaft, Kommunalpolitik, Kom-munitarismus, Nachbarschaftsbewegung, neue sozialeBewegungen, Owenismus, Selbstverwaltung, Sozialarbeit,Sozialfürsorge, Sozialpolitik, Sozialstaat, Wohlfahrtsstaat,WohnungsfrageGemeinwirtschaftA: al-iqisäd at-ta’äwuni.– E: communal economy . –F: économie communautaire. –R: kooperativnoye khoziaysrvo. –S: economía comunitaria. – C: jiti jingjiDie Konzeption der ›G‹ ist nicht originär sozialistisch.Sie wurde erst nachträglich von der Arbeiterbewegungbegrifflich adaptiert und im Sinne eines nicht-kapita-listischen Wirtschaftssektors (v.a. gewerkschaftseigene,genossenschaftliche und öffentliche Unternehmen),der primär bedarfsorientiert und demokratisch kon-trolliert arbeiten sollte, in reformsozialistische Strate-gien integriert.In jeweils unterschiedlichen Formen und Strukturenhat sich seit Ende des 19. Jh. in den verschiedeneneuropäischen Ländern ein Unternehmenssektor mitnicht-kapitalistischen Eigentümern herausgebildet,in Gestalt staatlicher bzw. kommunaler und nicht-staatlicher Unternehmen. In Großbritannien entstandunter Einfluss des Munizipalsozialismus hauptsäch-lich ein kommunal-gemeinwirtschaftlicher Sektor;in Österreich versteht man unter G vorwiegend den(zentralisierten) Staatssektor. In Deutschland da-gegen hat die gewerkschaftlich organisierte Arbei-terbewegung selbst einen sog. freigemeinwirtschaft-lichen Sektor gefördert und zeitweilig aufgebaut,dessen Besonderheit eine Identifikation mit demenglischen ›social sector‹ oder dem französischen›secteur public‹ verbietet. So bezeichnet der Aus-druck im engeren Sinne eine spezifische, vornehmlichin Deutschland nach dem Ersten Weltkrieg geschaffeneRealität.1. Die Klassiker der deutschen G-Lehre (EugenDÜHRING, Albert SCHÄFFLE, Adolph WAGNER) gingendavon aus, dass in kapitalistischen Gesellschaften –um die Funktionsfähigkeit des marktwirtschaftlichenSystems zu gewährleisten – neben dem privatwirt-schaftlichen Sektor ein mehr oder weniger ausgedehn-ter gemeinwirtschaftlicher Sektor bestehen muss, dernicht profitorientiert ist, was Hans RITSCHL späterals »dualistische Wirtschaftsordnung« charakterisiert(1931). Die G umfasst für diese Tradition nicht nurstaatliche bzw. kommunale, sondern auch ›frei-gemeinwirtschaftliche‹ Unternehmen privater Trägerund Genossenschaften. Die klassische G-Lehre isteine harmonistische Konzeption (THIEMEYER 1980),die ein ›organisches‹ Nebeneinander von Privat- undGemeinwirtschaft anstrebt. Im System zunehmenderDominanz der Großindustrie und bei einer wach-senden und kämpferischen Arbeiterbewegung sollennicht-profitorientierte staatssozialistische Betriebefür sozialen Ausgleich sorgen und zur politischenEntspannung beitragen (SCHÄFFLE 1875).2. Bei MARX und ENGELS lassen sich nur wenige kon-zeptionelle Bezüge zur G-Lehre herstellen. Heftigpolemisiert Engels gegen DÜHRINGS auf die G-Kon-zeption zugeschnittene »Wirtschaftskommunen« (AD,MEW 20, 268ff). Bis zu dem Zeitpunkt, wo unterMarxisten reformistische Auffassungen an Bodengewinnen, besteht ein zentraler Gegensatz zwischenMarxismus und G-Lehre: den Klassikern des Marxis-mus kann in diesem Kontext der quasi umfassendsteG-Anspruch zugeschrieben werden (KÜHNE 1978),nämlich auf gesamtgesellschaftliche Verwirklichungeiner nicht-kapitalistischen G.Einzelne Formen der G werden von MARX undENGELS dem Inhalt nach angesprochen, etwa öffent-liche Unternehmen: so wird in den Forderungen derKommunistischen Partei in Deutschland 1848 dieVerstaatlichung des Transport-, Verkehrs- und Kom-munikationswesens verlangt, verbunden mit dempreispolitischen Konzept des ›Nulltarifs‹: die betref-fenden öffentlichen Dienstleistungen sollen »derunbemittelten Klasse zur unentgeltlichen Verfügunggestellt« werden (MEW 5, 4; vgl. 4, 373f).Die meisten der für die G-Thematik relevantenAusführungen beziehen sich auf genossenschaftlicharbeitende »Kooperativfabriken«. MARX widmet sichder Problematik von isolierten oder sektoral begrenz-ten Genossenschaftsunternehmen, die den privat-wirtschaftlichen ›Eigennutz‹ zunächst nur im Innen-verhältnis der Kooperativ-Mitglieder überwindenkönnen. Ein umfassendes und gesamtgesellschaftlichrationales System freier Kooperativarbeit hingegenlässt sich Marx zufolge nicht ohne gesellschaftlicheVeränderungen mit dem Übergang der Staatsmachtin die Hände der Produzenten selbst verwirklichen(Inauguraladresse, MEW 16, 11, 195f; Gotha, MEW19, 13-32). ENGELS spricht sich in späteren Jahrenmehrfach für genossenschaftliche Produktionsbe-triebe aus (z.B. MEW 36, 261, 426), freilich nicht imSinne einer harmonistischen G-Konzeption, bei der

... so far

  • Can you provide a small sample program and a sample PDF to illustrate your issue? – mkl Dec 06 '14 at 19:15

1 Answers1

1

a bit late as the PDFBox issue PDFBOX-2548 opened in parallel already explained quite a bit, but here as a wrap-up:

To sum it up: The creation process of the first sample PDF used ligatures followed by actual space characters and insertion point movements. Whether this is due to programs in this process not properly supporting OpenType fonts (as the OP assumes) or some other weakness, cannot be decided based on the output PDFs alone.

To fix this issue, you should fix the document creation process. If that is not possible, you can try to enhance PDFBox to understand the weirdness created by that process but this is non-trivial and/or error-prone.

In detail:

when the charater sequences "fi" or "fl" occur in the text, the PDFTextStripper#getText(PDDocument doc) extracts them as single characters: 'fi' and 'fl' and sets a space character on their right side.

A section of the first sample document test.pdf containing samples for both is this

Section of test.pdf

with Spezifizierung and begrifflich.

The first thing to do in case of text extraction troubles usually is copying&pasting from Adobe Reader as that software is quite proficient in text extraction matters. We get:

In einer Spezifi zierung des
...
begriffl ich so aufzuklären

So Adobe Reader does extract these unwanted space characters, too! This usually means that there is some issue in the PDF, not in the text extractor.

Looking at the operations drawing the text we see:

[(4.1 In einer Spezifi)305.505( )-20.3063(zierung des logisch-historischen )]TJ 

This means that after drawing "Spezifi" the text insertion point is moved back by 0.3 text space units, then a space character is drawn, then the text insertion point is moved forward by 0.02 text space units, and then the rest of the line is drawn.

(begriffl)Tj
24.1273 0 Td
1.9264 Tw
[( )168.494(ich so aufzuklären, dass dem entwicklungs-)]TJ 

Similarly here after drawing "begriffl" the text insertion point is moved forward by 0.024 text space units, the the word spacing is changed to nearly 2 unscaled text space units (i.e. the width of a space character is increased by that amount), then a space character is drawn, then the text insertion point is moved backwards by 0.17 text space units and then the rest of the line is drawn.

Thus, in both cases there indeed is a single ligature glyph followed by a space character, just as PDFBox returns.

My assumption is that the advantage of the underlying OpenFont type turns into this particular disadvantage, because the PDFTextStripper recognizes the character sequence f i / f l as special charcters fi / fl (- what might have to do with the fact, that the getText() method calculates things like whitespace characters by distances / positional placements).

No, it is not a weirdness of the PDFBox or Adobe Reader text extraction routines, it is a weirdness of the PDF creation process.

Surprisingly, if I access the list of characters of a page via the charactersByArticle field of PDFTextStripper / via the PDFTextStripper#processText(TextPosition pos) method, the same characters show up as 'normal-single' characters f i / f l

At some point PDFBox does expand the ligatures to their participant letters, as mentioned in PDFBOX-2548 this happens by design. Whether the choice of which methods return ligatures and which individual letters is a good one and a properly documented one, might be a different matter.

I added a second test page, from a former volume of the same wordbook. For this volume, a Type1 font has been used. I chose a page where the two words "begrifflich" and "spezifisch" occur (they cause problems as you can see in the first test). As you can see/test, the described error doesn't occur when extracting the text of this second page! This strenghens my assumption that the OpenType format is the reason for the occuring error.

Looking at the text drawing operations in test2.pdf

[(begrifflich adaptiert und im Sinne eines n)20.2892(i)20.3857(c)20.4141(h)20.3148(t)20.3801(-)20.4198(k)20.3148(a)20.4141(p)]TJ
....
(druck im engeren Sinne eine spezifische, vornehmlich)Tj

In this document there is no such weird ligature and space character use as in the first one. Thus, no reason for PDFBox (or Adobe Reader) to see such space characters.

My question: is there anything what I can do to avoid this problem?

Fix the document creation process.

If that is not possible, you might try and change your class derived from PDFTextStripper

  • either to ignore all TextPosition instances containing space characters (including the unwanted ones) and lateron deduce correct space characters by gaps or
  • check all recognized spaces for overlapping letters.

The former alternative is easier to implement but somewhat error prone, especially in densely typeset documents, the latter one more difficult to implement but less error prone.

mkl
  • 90,588
  • 15
  • 125
  • 265