Merge remote-tracking branch 'pdf/XMP_Metadata3' into master
This commit is contained in:
		
						commit
						2be7b6480a
					
				|  | @ -22,11 +22,10 @@ import hashlib | ||||||
| from tempfile import gettempdir | from tempfile import gettempdir | ||||||
| from flask_babel import gettext as _ | from flask_babel import gettext as _ | ||||||
| 
 | 
 | ||||||
| from . import logger, comic | from . import logger, comic, isoLanguages, get_locale | ||||||
| from .constants import BookMeta | from .constants import BookMeta | ||||||
| from .helper import split_authors | from .helper import split_authors | ||||||
| 
 | 
 | ||||||
| 
 |  | ||||||
| log = logger.create() | log = logger.create() | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | @ -82,7 +81,7 @@ def process(tmp_file_path, original_file_name, original_file_extension, rarExecu | ||||||
|                                         original_file_name, |                                         original_file_name, | ||||||
|                                         original_file_extension, |                                         original_file_extension, | ||||||
|                                         rarExecutable) |                                         rarExecutable) | ||||||
|     except Exception as ex: |     except Exception as ex:       | ||||||
|         log.warning('cannot parse metadata, using default: %s', ex) |         log.warning('cannot parse metadata, using default: %s', ex) | ||||||
| 
 | 
 | ||||||
|     if meta and meta.title.strip() and meta.author.strip(): |     if meta and meta.title.strip() and meta.author.strip(): | ||||||
|  | @ -98,7 +97,7 @@ def default_meta(tmp_file_path, original_file_name, original_file_extension): | ||||||
|         extension=original_file_extension, |         extension=original_file_extension, | ||||||
|         title=original_file_name, |         title=original_file_name, | ||||||
|         author=_(u'Unknown'), |         author=_(u'Unknown'), | ||||||
|         cover=None, |         cover=pdf_preview(tmp_file_path, original_file_name), | ||||||
|         description="", |         description="", | ||||||
|         tags="", |         tags="", | ||||||
|         series="", |         series="", | ||||||
|  | @ -106,31 +105,95 @@ def default_meta(tmp_file_path, original_file_name, original_file_extension): | ||||||
|         languages="") |         languages="") | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | def parse_xmp(pdf_file): | ||||||
|  |     """ | ||||||
|  |     Parse XMP Metadata and prepare for BookMeta object  | ||||||
|  |     """ | ||||||
|  |     try: | ||||||
|  |         xmp_info = pdf_file.getXmpMetadata() | ||||||
|  |     except Exception as e: | ||||||
|  |         log.debug('Can not read XMP metadata', e) | ||||||
|  |         return None | ||||||
|  | 
 | ||||||
|  |     if xmp_info: | ||||||
|  |         try: | ||||||
|  |             xmp_author = xmp_info.dc_creator # list | ||||||
|  |         except: | ||||||
|  |             xmp_author = ['Unknown'] | ||||||
|  |          | ||||||
|  |         if xmp_info.dc_title:  | ||||||
|  |             xmp_title = xmp_info.dc_title['x-default'] | ||||||
|  |         else: | ||||||
|  |             xmp_title = '' | ||||||
|  | 
 | ||||||
|  |         if xmp_info.dc_description: | ||||||
|  |             xmp_description = xmp_info.dc_description['x-default'] | ||||||
|  |         else: | ||||||
|  |             xmp_description = '' | ||||||
|  | 
 | ||||||
|  |         languages = [] | ||||||
|  |         for i in xmp_info.dc_language: | ||||||
|  |             #calibre-web currently only takes one language. | ||||||
|  |             languages.append(isoLanguages.get_lang3(i)) | ||||||
|  |          | ||||||
|  |         xmp_tags = ', '.join(xmp_info.dc_subject) | ||||||
|  |         xmp_publisher = ', '.join(xmp_info.dc_publisher) | ||||||
|  |         xmp_languages = xmp_info.dc_language | ||||||
|  | 
 | ||||||
|  |         return {'author': xmp_author, | ||||||
|  |                     'title': xmp_title, | ||||||
|  |                     'subject': xmp_description, | ||||||
|  |                     'tags': xmp_tags, 'languages': languages, | ||||||
|  |                     'publisher': xmp_publisher | ||||||
|  |                     } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| def pdf_meta(tmp_file_path, original_file_name, original_file_extension): | def pdf_meta(tmp_file_path, original_file_name, original_file_extension): | ||||||
|     doc_info = None |     doc_info = None | ||||||
|  |     xmp_info = None | ||||||
|  | 
 | ||||||
|     if use_pdf_meta: |     if use_pdf_meta: | ||||||
|         with open(tmp_file_path, 'rb') as f: |         with open(tmp_file_path, 'rb') as f: | ||||||
|             doc_info = PdfFileReader(f).getDocumentInfo() |             pdf_file = PdfFileReader(f) | ||||||
|     if doc_info: |             doc_info = pdf_file.getDocumentInfo() | ||||||
|         author = doc_info.author if doc_info.author else u'Unknown' |             xmp_info = parse_xmp(pdf_file) | ||||||
|         title = doc_info.title if doc_info.title else original_file_name | 
 | ||||||
|  |     if xmp_info: | ||||||
|  |         author = ' & '.join(split_authors(xmp_info['author'])) | ||||||
|  |         title = xmp_info['title'] | ||||||
|  |         subject = xmp_info['subject'] | ||||||
|  |         tags = xmp_info['tags'] | ||||||
|  |         languages = xmp_info['languages'] | ||||||
|  |         publisher = xmp_info['publisher'] | ||||||
|  | 
 | ||||||
|  |     elif doc_info: | ||||||
|  |         author = ' & '.join(split_authors([doc_info.author])) | ||||||
|  |         title = doc_info.title | ||||||
|         subject = doc_info.subject |         subject = doc_info.subject | ||||||
|  |         tags = doc_info['/Keywords'] | ||||||
|  |         languages = "" | ||||||
|  |         publisher = "" | ||||||
|  | 
 | ||||||
|     else: |     else: | ||||||
|         author = u'Unknown' |         author= u'Unknown' | ||||||
|         title = original_file_name |         title = original_file_name | ||||||
|         subject = "" |         subject = "" | ||||||
|  |         tags = "" | ||||||
|  |         languages = "" | ||||||
|  |         publisher = "" | ||||||
| 
 | 
 | ||||||
|     return BookMeta( |     return BookMeta( | ||||||
|         file_path=tmp_file_path, |         file_path=tmp_file_path, | ||||||
|         extension=original_file_extension, |         extension=original_file_extension, | ||||||
|         title=title, |         title=title, | ||||||
|         author=' & '.join(split_authors([author])), |         author=author, | ||||||
|         cover=pdf_preview(tmp_file_path, original_file_name), |         cover=pdf_preview(tmp_file_path, original_file_name), | ||||||
|         description=subject, |         description=subject, | ||||||
|         tags="", |         tags=tags, | ||||||
|         series="", |         series="", | ||||||
|         series_id="", |         series_id="", | ||||||
|         languages="") |         languages=', '.join(languages) | ||||||
|  |         ) | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| def pdf_preview(tmp_file_path, tmp_dir): | def pdf_preview(tmp_file_path, tmp_dir): | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	Block a user