17 votes

Comment convertir un paquet epub en epub normal ?

J'ai quelques fichiers epub dans mon iCloud Drive qui sont essentiellement des paquets. Je peux afficher le contenu du paquet, puis il me montre une hiérarchie de fichiers et de dossiers.

Comment puis-je convertir cette structure en un epub standard que tout lecteur d'epub normal comprendra ?

0 votes

(ceci peut être une réponse) Avez-vous essayé d'insérer directement le fichier ePub de votre lecteur iCloud dans votre lecteur ePub ?

0 votes

Oui, j'ai essayé @Brick, mais ils apparaissent comme des dossiers comme indiqué ci-dessus...

0 votes

En d'autres termes, s'affiche-t-il comme prévu dans le lecteur ?

14voto

Pour info, voici une commande shell qui fonctionne :

 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 *

Pour autant que je sache, la compression ne doit pas être désactivée ( -0 ). epubcheck n'a pas à se plaindre. Il pourrait y avoir des différences entre les versions de la spécification epub, cependant. Mon test était avec un fichier epub 3.0.

1 votes

Le meilleur

1 votes

Cette solution pour moi !

13voto

Navdeep Points 88

Comment iBooks importe un fichier ePub :

A .epub comme indiqué dans d'autres réponses, est essentiellement un fichier zippé. Lorsque iBooks importe le .epub le fichier .epub Le fichier qu'il stocke est un un fichier zippé. Cela explique pourquoi il a le Show Package Contents qui vous permet d'explorer les fichiers "dézippés". Cependant, le simple fait de zipper le paquet ne fonctionne pas toujours.

Recréer le .epub à partir du fichier paquet :

Manuellement :

  1. Right click sur le .epub et cliquez sur Show Package Contents .
  2. Sélectionnez tous les contenus ( CMD + A ) Right click Compress .
  3. Cela créera un .zip fichier. Il suffit de changer l'extension de .zip à .epub et voilà ! Le fichier est devenu un ePub document.

Automatisation :

J'avais plus que 2,000 .epub paquets Je voulais me convertir en .epub fichiers La méthode ci-dessus n'était donc pas réalisable. Pour éviter le travail manuel, j'ai écrit un script qui exécute essentiellement la méthode ci-dessus sur tous les fichiers. J'ai utilisé le simple et élégant code-barres fourni par Matthias ici et l'a enveloppé dans un python script partagé ci-dessous :

# 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 La fonction prend un path dans un répertoire qui contient le .epub paquets qui doivent être convertis. [AVERTISSEMENT] Il est préférable de travailler sur une copie de l'écran de l'ordinateur. .epub en cas de problème. Pour être sûr, copiez simplement les paquets dans un autre répertoire et travaillez dessus.

El create_epub La fonction prend un path dans un répertoire où vous souhaitez stocker les fichiers générés. Il exécute ensuite un shell pour ouvrir chaque .epub paquet et générer un .epub fichier .


J'espère que cela vous aidera ! Cela a certainement résolu un de mes gros maux de tête.

4voto

Tetsujin Points 95239

Un fichier ePub est essentiellement un dossier zippé, bien qu'il contienne un fichier mimetype qui ne doit apparemment pas être compressé.

Cela signifie qu'il n'est pas tout à fait simple de le recréer avec une simple application zip. Cependant, il se peut que ce soit plus simple que cela.
Supposons que rien n'ait été déballé et que l'on ne sache pas comment s'en servir. Travaillez sur une copie.

Deux choses à essayer...

  1. Essayez de le renommer, changez .epub en .zip, puis changez-le à nouveau, pour voir s'il est reconnu correctement.

  2. Ouvrez-le en Calibre
    Vous avez alors une myriade de possibilités pour y remédier, la plus simple étant de voir s'il peut communiquer avec votre lecteur d'ebook via OPDS. Calibre peut faire tourner son propre serveur local sur votre wifi et vous pouvez copier des livres très simplement.
    Si ce n'est toujours pas le cas, demandez à Calibre de le convertir en ePub [encore]. C'est une excellente méthode pour réparer un fichier, car il peut le réexaminer, corriger les polices, les mauvaises césures, toutes sortes de problèmes.

Calibre est un sujet trop vaste pour être traité dans le cadre d'un simple QA, mais il existe des tonnes de données sur le site lui-même et à l'adresse suivante http://www.mobileread.com/forums/ y compris des sections pour la plupart des principaux e-readers.

0 votes

Très intéressant, merci. Je suis heureux que vous ayez confirmé mes soupçons concernant la compression. Connaissez-vous une méthode permettant de le faire via la coquille du dessus ? Je suppose que ce sera assez rapide et facile avec une simple incantation si je peux bricoler et en trouver une ou en inventer une.

0 votes

J'ai trouvé ceci - mobileread.com/forums/showthread.php?t=29057 - bien que je ne sois pas un expert en matière de terminaux.

0 votes

Je sais que cela fait 5 ans, mais le fait de renommer .epub.zip en .epub a réglé le problème pour moi.

3voto

George Points 131

Reproduction du problème :

  1. Un fichier ePub nommé, disons, book.epub est un fichier ( -rw-r--r-- ).
  2. Ouvrir book.epub en utilisant l'application iBooks.
  3. Retirer le fichier en cache stocké dans ~/Library/Containers/com.apple.BKAgentService/Data/Documents/iBooks/Books/ qui a été renommé sous un autre nom tel que A22DFAF7E75C21D979C375B1AD07008F.epub et devient un répertoire ( drwxr-xr-x@ ).

Etapes de la solution de contournement qui fonctionne sur mon Mac :

  1. Modifier l'extension de A22DFAF7E75C21D979C375B1AD07008F.epub de .epub à .zip .
  2. Allez dans le paquet zip et zippez tout le contenu à l'intérieur dans un nouveau paquet zip. .zip disons, Archive.zip .
  3. Faites glisser le nouveau .zip et changez l'extension en .epub .
  4. El Archive.epub est un fichier ( -rw-r--r-- ).

2voto

m1cha3ll0w3 Points 19

J'ai adapté les méthodes partagées ici, et créé le shell script suivant.

Il est assez simpliste car il ne prend aucun argument, il s'exécute simplement à partir du répertoire dans lequel il est exécuté.
Le script ajoute un fixed s'il n'y en a pas déjà un, où il place les fichiers corrigés.

Vous pouvez soit l'ajouter à un fichier, soit l'ajouter à la liste des fichiers. fix_epub.sh . Ou ajoutez-le à votre .bashrc / .zshrc etc., en l'intégrant dans une fonction. J'ai ajouté des exemples pour chacun d'entre eux ci-dessous.

Puis à partir de votre terminal, cd <epub-path> dans votre dossier .epub et soit ;

  1. Utilisation du fichier shell
    a. courir touch fix_epub.sh et ajoutez votre code au fichier.
    b. courir sh fix_epub.sh .
  2. Utilisation d'une fonction shell
    a. courir fix_epub (en supposant que vous l'avez déjà ajouté à .bashrc ).

scripts

fix_epub.sh

#!/bin/bash

mkdir -p fixed

find . -name "*.epub" | while read -r file; do
  (cd "$file" || exit && \
  find . -iname 'iTunesMetadata*.plist' -delete && \
  zip -r -X "../fixed/$file" mimetype .)
done

.bashrc

function fix_epub () {
  mkdir -p fixed

  find . -name "*.epub" | while read -r file; do
    (cd "$file" || exit && \
    find . -iname 'iTunesMetadata*.plist' -delete && \
    zip -r -X "../fixed/$file" mimetype .)
  done
}

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X