2016-04-12 22 views
1

Lateks kodlarını epublarda SVG görüntülerine dönüştürmek için bir komut dosyası yapıyorum. Fikir, bir temp dizininde bir epub çıkarmak, kodu bulmak ve SVG oluşturmak ve SVG görüntülerine bağlantılar için kodun yerini almak, sonra her şeyi tekrar sıkıştırmaktır.Zipfile, Python'da bazı SVG dosyalarını sıkıştırmıyor

Her şey iyi çalışıyor ancak son sıkıştırma. Oluşturduğum yeni SVG'yi herşeyi sıkıştırıyor (geçici sıkıştırılmamış epubun Görüntüler klasöründe olduğunu kontrol ettim). fonksiyon recursive_zip aslında (içine bildirim 'baskı düğümleri') her dosyayı bulur

import zipfile 
import os 
import shutil 

def create_minimal_uncompressed_epub(directory): 
    if os.path.exists(directory): 
     shutil.rmtree(directory, ignore_errors=True) 
    os.makedirs(directory) 
    with open(os.path.join(directory, 'mimetype'), 'w') as mimetype: 
     mimetype.write('application/epub+zip') 
    os.makedirs(os.path.join(directory, 'META-INF')) 
    os.makedirs(os.path.join(directory, 'OEBPS')) 
    with open(os.path.join(directory, 'META-INF', 'container.xml'), 'w') as container_xml: 
     data = ('<?xml version="1.0"?>' 
       '<container version="1.0" xmlns="urn:oasis:names:' 
       'tc:opendocument:xmlns:container">' 
       '<rootfiles>' 
       '<rootfile full-path="OEBPS/content.opf" media-type=' 
       '"application/oebps-package+xml"/>' 
       '</rootfiles>' 
       '</container>') 
     container_xml.write(data) 
    with open(os.path.join(directory, 'OEBPS', 'content.opf'), 'w') as content_opf: 
     data = ('<?xml version="1.0" encoding="UTF-8" ?><package xmlns=' 
       '"http://www.idpf.org/2007/opf" xmlns:dc="http://purl.o' 
       'rg/dc/elements/1.1/" unique-identifier="db-id" version' 
       '="3.0"><metadata><dc:title id="t1">Title</dc:title><dc' 
       ':identifier id="db-id">isbn</dc:identifier><meta pro' 
       'perty="dcterms:modified">2014-03-27T09:14:09Z</meta><d' 
       'c:language>en</dc:language></metadata><manifest><item ' 
       'id="toc" properties="nav" href="toc.xhtml" media-type=' 
       '"application/xhtml+xml" /><item id="ncx" href="toc.ncx' 
       '" media-type="application/x-dtbncx+xml" /><item id="te' 
       'mplate_css" href="template.css" media-type="text/css" ' 
       '/><item id="hello" href="1_hello.xhtml" media-type="ap' 
       'plication/xhtml+xml" /></manifest><spine toc="ncx"><it' 
       'emref idref="hello" /></spine></package>') 
     content_opf.write(data) 
    with open(os.path.join(directory, 'OEBPS', 'toc.xhtml'), 'w') as toc_xhtml: 
     data = ('<?xml version="1.0" encoding="utf-8"?><html ' 
       'xmlns="http://www.w3.org/1999/xhtml" xmlns:epub="htt' 
       'p://www.idpf.org/2007/ops"><head><title>toc.xhtml</t' 
       'itle><link href="template.css" rel="stylesheet" type' 
       '="text/css" /></head><body><nav id="toc" epub:type="' 
       'toc"><h1 class="frontmatter">Table of Contents</h1><' 
       'ol class="contents"><li><a href="1_hello.xhtml">Hell' 
       'o</a></li></ol></nav></body></html>') 
     toc_xhtml.write(data) 
    with open(os.path.join(directory, 'OEBPS', 'toc.ncx'), 'w') as toc_ncx: 
     data = ('<?xml version="1.0" encoding="UTF-8" ?><ncx version="2005' 
       '-1" xml:lang="en" xmlns="http://www.daisy.org/z3986/2005/' 
       'ncx/"><head><meta name="dtb:uid" content="isbn"/><meta na' 
       'me="dtb:depth" content="1"/></head><docTitle><text></text' 
       '></docTitle><navMap><navPoint id="hello" playOrder="1"><n' 
       'avLabel><text>cover</text></navLabel><content src="1_hell' 
       'o.xhtml" /></navPoint></navMap></ncx>') 
     toc_ncx.write(data) 
    with open(os.path.join(directory, 'OEBPS', '1_hello.xhtml'), 'w') as hello_xhtml: 
     data = ('<?xml version="1.0" encoding="utf-8"?><html xmlns="http://www.w3.or' 
       'g/1999/xhtml" xmlns:epub="http://www.idpf.org/2007/ops"><head><titl' 
       'e>1_hello.xhtml</title><link href="template.css" rel="stylesheet" t' 
       'ype="text/css" /></head><body><h1>Hello World!</h1></body></html> ') 
     hello_xhtml.write(data) 
    with open(os.path.join(directory, 'OEBPS', 'template.css'), 'w') as templace_css: 
     data = ('h1 {text-align: center;}') 
     templace_css.write(data) 

def recursive_zip(zipf, directory, folder=None): 
    nodes = os.listdir(directory) 
    print nodes 
    for item in nodes: 
     if os.path.isfile(os.path.join(directory, item)): 
      zipf.write(os.path.join(directory, item), os.path.join(folder, item), zipfile.ZIP_DEFLATED) 
     elif os.path.isdir(os.path.join(directory, item)): 
      recursive_zip(zipf, os.path.join(directory, item), os.path.join(folder, item)) 

def create_svg(): 
    return 'code here\n' 

TEMP_DIR = 'minimal_temp_dir' 
SVG_FILENAME = 'minimal_svg_filename.svg' 
create_minimal_uncompressed_epub(TEMP_DIR) 
with open(os.path.join(TEMP_DIR, 'OEBPS', SVG_FILENAME), 'w') as svgfile: 
    svgfile.write(create_svg()) 
try: 
    MINIMAL_EPUB = 'minimal_epub.epub' 
    ZIPF = zipfile.ZipFile(MINIMAL_EPUB, 'w') 
    ZIPF.write(os.path.join(TEMP_DIR, 'mimetype'), 'mimetype', zipfile.ZIP_STORED) 
    for item in os.listdir(TEMP_DIR): 
     if os.path.isdir(os.path.join(TEMP_DIR, item)): 
      recursive_zip(ZIPF, os.path.join(TEMP_DIR, item), item) 
    ZIPF.close() 
except: #IOError 
    print('\nError compressing file') 

: İşte minimal çalışma örneğidir. Svg dosyaları neden eksik bilmiyorum. Hata yok. Svg dosyaları Temp klasöründedir, ancak Sigil ile açtığımda sıkıştırılmış son sürümde değil.

cevap

0

Neler olup bittiğini anladım. Ben manifest adında bir etikette, dosyada content.opf görüntülerin bir liste bulundu ve uygun International Digital Publishing Forum:

(örn İçerik Belgeler yayının parçası olan tüm dosyaların bir listesini vermelidir Gerekli gösterim , stil sayfaları, resim dosyaları, herhangi bir gömülü yazı tipi dosyaları, dahil tüm şemalar).

Yani dosyalar aslında sıkıştırılmış ve zip dosyasına dahil, ancak .epub olarak değiştirildi ve Sigil ile açıldı beri dosyasına content.opf içine dahil edilmedi, çünkü SVG görüntüleri göstermemiştir ödendi.

İlgili konular