konverze .pdf do .txt (ebook)

...

Moderátor: Mods_senior

petrofff
Level 2
Level 2
Příspěvky: 190
Registrován: duben 08
Bydliště: Ostrava-Zábřeh
Pohlaví: Muž
Stav:
Offline

konverze .pdf do .txt (ebook)

Příspěvekod petrofff » 11 úno 2011 19:59

Knihy v pdf mají pevnou šířku řádků, což - když dám uložit jako .txt - se projeví zhoršenou čitelností na malé obrazovce kapesního readeru.
Řešil jsem to tak, že jsem všechny výskyty LF odřádkování nahradil skupinou LF o 1 menší (tj. LF => nic, LFLF => LF atd) Tím se řádky spojily do odstavců a vynechaly zbytečné mezery mezi odstavci.
Poněkud krkolomný způsob, pokud neznáte editor, kt. to umí ? (diskové editory umí nahradit jen "na místě"; reg.exp. je výhoda, ne však nutnost)
Ještě lepší by byl program/skript ...ale to by ho někdo musel vytvořit (nevím jak na jiných platformách, ale na windows se používá 0D0A pro LineFeed)

Reklama
petrofff
Level 2
Level 2
Příspěvky: 190
Registrován: duben 08
Bydliště: Ostrava-Zábřeh
Pohlaví: Muž
Stav:
Offline

Re: konverze .pdf do .txt (ebook)

Příspěvekod petrofff » 13 úno 2011 14:01

Nakonec jsem udělal skript v jazyce python, bez vymoženosti dávkového zpracování - stejně se musí .pdf "ručně" načíst do Adobe Readeru a uložit jako .txt (ANSI). PAK PŘETÁHNOUT NA SCRIPT v Pythonu
Výsledek je v požadovaném kódování Unicode (pro můj mp4 Doonio Naut ; pro jiné playery stačí změnit encoding u vystup).

Kód: Vybrat vše

# -*- coding: cp1250 -*-
'''
[PYTHON 3.1]
Created on 13.2.2011
------------------------------------------------
1.vynechá text až do místa:
 [nová stránka]
 Kapitola první
2.zformátuje obsah (na konci) počínaje textem:
 [nová stránka]
 OBSAH:
3.vypustí řádky se znakem [nová stránka]
4.vynechává znaky [NL] na koncích řádků s textem
5.skupiny řádků s WHITESPACE sloučí do jednoho
6.zformátuje názvy kapitol v díle/obsahu
7.vzniklý soubor obdrží příponu .TXT
8.původní soubor se uloží s příponou .BAK
9.název vých.souboru je vstupním parametrem
------------------------------------------------
@author: Petroff
'''
import sys,os

def zapis(txt):
    vystup.write(txt)

alert = "Nezadán vstupní soubor" if len(sys.argv)<2 else "Vstupní soubor neexistuje" if not(os.path.isfile(sys.argv[1])) else ""
if alert:
    print (alert)
    input("ENTERem ukončit")
    quit()

newFname=sys.argv[1]
oldFname,fe=os.path.splitext(newFname)

if fe != ".txt":
    newFname = oldFname + ".txt"
    oldFname += fe
else:
    oldFname += ".bak"
    if (os.path.isfile(oldFname)):
        os.remove(oldFname)
    os.rename(newFname,oldFname)

vstup = open(oldFname,"r",encoding='cp1250')
vystup = open(newFname, "w",encoding='utf-16')

odstavec = stranka = ""
kopiruj = obsah = False
for radek in vstup:
    if chr(12) in radek:
        stranka = radek
        continue
    if radek > " \n":
        if stranka or obsah:
            if "Kapitola" in radek:
                if kopiruj:
                    radek = "\n" + radek
                kopiruj = True
            if "OBSAH" in radek:
                    odstavec = "\n\n"
                    obsah = True
        radek = odstavec + radek[:-1]
        stranka = odstavec = ""
        if kopiruj:
            zapis(radek)
    else:
        odstavec = "\n"

vstup.close()
vystup.close()

petrofff
Level 2
Level 2
Příspěvky: 190
Registrován: duben 08
Bydliště: Ostrava-Zábřeh
Pohlaví: Muž
Stav:
Offline

Re: konverze .pdf do .txt (ebook)

Příspěvekod petrofff » 05 zář 2011 09:37

Hledám program/modul který by převedl pdf do text.formátu - v případě programu aby šel spustit na příkazové řádce.
Dávám dokupy dávkový převodník - realizovaný jako OpenOffice makro(StarBasic) a převod z DOC,RTF,PDB,TXT/ansi/utf8 funguje.
Vyzkoušel jsem i řadu interaktivních popř. dávkových aplikací, a žádná neposkytla korektní výsledek - takový umí jen Adobe Reader >>Uložit jako TEXT. Ve většině případů dělá paseku čeština (znaky jsou kódovány nesprávně, jsou vynechány popř. jsou ve slovech mezery) Jindy vadí vícesloupcový text.


Zpět na “Vše ostatní (sw)”

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 3 hosti