18 votos

¿Cómo convertir un paquete epub en epub normal?

Tengo algunos archivos epub en mi iCloud Drive que son esencialmente paquetes. Puedo mostrar el contenido del paquete y luego me muestra una jerarquía de archivos y carpetas.

¿Cómo puedo convertir esta estructura en un epub estándar que cualquier lector habitual de epub pueda entender?

0 votos

(esto puede ser una respuesta) ¿Has probado a insertar directamente el ePub desde tu unidad de iCloud en tu lector de ePub?

0 votos

Sí, lo he intentado @Brick, sin embargo aparecen como carpetas como se ha indicado anteriormente...

0 votos

Es decir, ¿se muestra correctamente como se pretende en el lector?

15voto

MattW. Puntos 107

FWIW, aquí hay un comando de shell que funciona:

 cd my-broken.epub

 # iTunes/Books seems to add a file 
 # 'iTunesMetadata.plist', and it produces a warning.
 # May also contain private data, so better delete it.

 rm iTunesMetadata.plist 

 zip -X -r ../fixed.epub mimetype *

Por lo que sé, no es necesario desactivar la compresión ( -0 ). epubcheck no tiene ninguna queja. Sin embargo, puede haber diferencias entre las versiones de la especificación epub. Mi prueba fue con un archivo epub 3.0.

1 votos

Lo mejor

1 votos

¡Esta solución para mí!

14voto

Navdeep Puntos 88

Cómo importa iBooks un archivo ePub:

A .epub como se ha señalado en otras respuestas, es esencialmente un archivo comprimido. Cuando iBooks importa el .epub archivo, el .epub que almacena es un un archivo comprimido. Esto explica por qué tiene el Show Package Contents que permite explorar los archivos "descomprimidos". Sin embargo, el simple hecho de comprimir el paquete no siempre funciona.

Re-creación de la .epub del archivo paquete :

Manualmente:

  1. Right click en el .epub y haga clic en Show Package Contents .
  2. Seleccione todos los contenidos ( CMD + A ) Right click Compress .
  3. Esto creará un .zip archivo. Basta con cambiar la extensión de .zip a .epub y ¡listo! El archivo se ha convertido en un ePub documento.

Automatización:

Tenía más de 2,000 .epub paquetes Quería convertirme a .epub archivos por lo que el método anterior no era factible. Para evitar el trabajo manual, escribí un script que esencialmente ejecuta el método anterior en todos los archivos. Utilicé el sencillo y elegante código de shell proporcionado por Matthias aquí y lo envolvió en un python script compartido a continuación:

# Convert epub packages to epub files
import os
import subprocess

filenames = []
path_to_files = ""
#   Function to store all filenames in a list
def extract_filename(path_to_files):    # "/Users/****/Desktop/Old_epubs"
    os.chdir(path_to_files)
    books = os.getcwd()
    for f in os.listdir(books):
        f_name, f_ext = os.path.splitext(f)
        if f_ext == ".epub":
            filenames.append(f_name)

    filenames.sort()

#   Function to generate new epub files
def create_epub(path_to_new_files): # "/Users/****/Desktop/new_epubs/"
    total_files = len(filenames)
    for i in range(total_files):
        epub_path = "cd " + path_to_files
        filename = filenames[i] + ".epub"
        zipping = " zip -X -r " + path_to_new_files + filename + " mimetype *"
        plist = "rm iTunesMetadata.plist"
        comm = epub_path + filename + "; " + plist + "; " + zipping
        p1 = subprocess.run(comm, capture_output = True, text = True, shell = True)
        success = p1.returncode
        if success == 0:
            rem_files = total_files - i + 1
            print("File #", i+1, " has been processed successfully. Remaining files: ", rem_files)

#   Enter the paths
extract_filename("/Users/****/Desktop/Books")   # Path to directory containing epub packages
create_epub("/Users/****/Desktop/new_epubs/")   # Path to store new epub files in

El extract_filename toma un path a un directorio que contenga el .epub paquetes que hay que convertir. [ADVERTENCIA] Es mejor trabajar en una copia del .epub paquetes en caso de que algo vaya mal. Para estar seguro, copie los paquetes a un directorio diferente y trabaje en él.

El create_epub toma un path a un directorio en el que desee almacenar los archivos generados. A continuación, ejecuta un shell para abrir cada .epub paquete y generar un .epub archivo .


Espero que esto ayude. Desde luego, me ha solucionado un gran dolor de cabeza.

4voto

Tetsujin Puntos 23061

Un archivo ePub es esencialmente una carpeta comprimida, aunque tiene un archivo mimetype en su interior que aparentemente no necesita ser comprimido.

Esto implicaría que no es del todo sencillo de recrear con una simple aplicación zip. Sin embargo, puede ser más sencillo que eso.
Supongamos que nada lo ha desempacado, simplemente se ha confundido sobre cómo manejarlo. Trabaja en una copia.

Dos cosas para probar...

  1. Prueba a cambiarle el nombre, cambia el .epub por el .zip, y luego vuelve a cambiarlo, a ver si se reconoce correctamente.

  2. Abrirlo en Calibre
    Tienes una miríada de maneras de tratar con él, la más simple es ver si puede hablar con tu lector de libros electrónicos a través de OPDS. Calibre puede ejecutar su propio servidor local en su wifi y puede copiar los libros de manera muy sencilla.
    Si todavía no hay alegría, consigue que Calibre lo convierta en un ePub [de nuevo] Este es un gran método para arreglar un archivo, ya que puede volver a examinarlo, arreglar las fuentes, las malas guiones, todo tipo de problemas.

Calibre en sí mismo es un tema demasiado grande para cubrirlo en un simple control de calidad, pero hay montones de datos sobre él en el propio sitio y en http://www.mobileread.com/forums/ incluyendo también secciones para la mayoría de los principales lectores electrónicos.

0 votos

Muy interesante, gracias. Me alegro de que hayas confirmado mi sospecha sobre la compresión. ¿Conoces algún método para hacerlo a través de la cáscara de la parte superior? Supongo que esto será bastante rápido y fácil con un simple encantamiento si puedo toquetear y encontrar uno o inventar uno.

0 votos

Encontré esto - mobileread.com/forums/showthread.php?t=29057 - aunque no soy un experto en lo que respecta a la Terminal.

0 votos

Sé que han pasado 5 años, pero con sólo cambiar el nombre de .epub.zip a .epub se me arregló.

3voto

user1959712 Puntos 41

Reproducción del problema:

  1. Un archivo ePub llamado, por ejemplo, book.epub es un archivo ( -rw-r--r-- ).
  2. Abrir book.epub utilizando la aplicación iBooks.
  3. Sacar el archivo en caché almacenado en ~/Library/Containers/com.apple.BKAgentService/Data/Documents/iBooks/Books/ que ha sido rebautizado con otro nombre como A22DFAF7E75C21D979C375B1AD07008F.epub y se convierte en un directorio ( drwxr-xr-x@ ).

Pasos de la solución que funciona en mi Mac:

  1. Cambiar la extensión de A22DFAF7E75C21D979C375B1AD07008F.epub de .epub a .zip .
  2. Entra en el paquete zip y cierra todo el contenido dentro en un nuevo .zip archivo, digamos, Archive.zip .
  3. Arrastre el nuevo .zip y volver a cambiar la extensión a .epub .
  4. El Archive.epub es un archivo ( -rw-r--r-- ).

1voto

Jon M Puntos 111

He tomado algunos de los comentarios aquí y he proporcionado una Cuaderno Jupyter que hace esto para una copia de seguridad de, por ejemplo, un directorio de Libros:

import pathlib
import glob
import os
import zipfile

# Extract the relevant components of a full path
def pathComponents(fullpath):
    path = pathlib.Path(fullpath)
    name = path.name
    stem = path.stem
    suffix = path.suffix
    parent = path.parent
    return name, stem, suffix, parent

# Get directories in your path that have a .epub suffix
def getePubDirs(path):
    epubSearch = os.path.join(path, "*" + "." + "epub")
    eDirs=[]
    for p in glob.glob(epubSearch):
        if (os.path.isdir(p)):    # Only if it's an epub directory
            eDirs.append(p)
    return eDirs

def createZipFile(fname, files):
    zFile = zipfile.ZipFile(fname, mode='w', compression=zipfile.ZIP_DEFLATED)
    for f in files:
        zFile.write(f)
    zFile.close()

def convertDirToePub(dirname):
    name, stem, suffix, parent = pathComponents(dirname)        # get dirname details
    newdirname = zFile = str(parent) + "/" + name + ".ori"
    zFile = str(parent) + "/" + stem + ".epub"
    os.rename(dirname,newdirname)     # rename the epub dir so the epub can take its old name
    # get all the files within the epub directory
    os.chdir(newdirname) # We need to be in directory so the resultant epub paths are correct
    everything = [os.path.join(r,file) for r,d,f in os.walk(".") for file in f]
    createZipFile(zFile, everything)  # Create a zip file containing all those files
    os.chdir(parent)

dirtoconvert='/Users/<username>/tmp/Booksdir'

eDirs = getePubDirs(dirtoconvert)
totalDirs=len(eDirs)
print(totalDirs, "docs to convert")
ctr=1
for i in eDirs:
    print(ctr, "of", totalDirs, ": Converting ", i)
    convertDirToePub(i)
    ctr = ctr + 1
print("Done!")

1 votos

Un material estupendo. He incluido tu código directamente en la respuesta para que la gente no tenga que esperar a otro sitio y no se pierda en caso de que el enlace se rompa.

0 votos

Gracias @nohillside. Por cierto, subir la respuesta si crees que merece la pena, podría ayudar a conseguir algo de visibilidad :)

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X