]> git.lizzy.rs Git - nhentai.git/commitdiff
Add PDF support
authoruser <user@devuan>
Sun, 7 Jun 2020 16:07:40 +0000 (19:07 +0300)
committeruser <user@devuan>
Sun, 7 Jun 2020 16:07:40 +0000 (19:07 +0300)
README.rst
nhentai/cmdline.py
nhentai/command.py
nhentai/utils.py
requirements.txt

index 7dfc26ba42bb948367bbd455abdb3a42c26d4013..cf0497ab2e143152a72481c3410573226eb9aa38 100644 (file)
@@ -154,8 +154,9 @@ Other options:
       --no-html             don't generate HTML after downloading
       --gen-main            generate a main viewer contain all the doujin in the folder
       -C, --cbz             generate Comic Book CBZ File
+      -P --pdf              generate PDF file
       --rm-origin-dir       remove downloaded doujinshi dir when generated CBZ
-                            file.
+                            or PDF file.
 
       # nHentai options
       --cookie=COOKIE       set cookie of nhentai to bypass Google recaptcha
index 8e06bfe9eddc6d617d79a16a2b2c4d555f346330..849ebc97629ca6d2eb6c193f925f066c55baca2e 100644 (file)
@@ -38,7 +38,7 @@ def banner():
 def cmd_parser():
     parser = OptionParser('\n  nhentai --search [keyword] --download'
                           '\n  NHENTAI=http://h.loli.club nhentai --id [ID ...]'
-                          '\n  nhentai --file [filename]'    
+                          '\n  nhentai --file [filename]'
                           '\n\nEnvironment Variable:\n'
                           '  NHENTAI                 nhentai mirror url')
     # operation options
@@ -87,8 +87,10 @@ def cmd_parser():
                       help='generate a main viewer contain all the doujin in the folder')
     parser.add_option('--cbz', '-C', dest='is_cbz', action='store_true',
                       help='generate Comic Book CBZ File')
+    parser.add_option('--pdf', '-P', dest='is_pdf', action='store_true',
+                      help='generate PDF file')
     parser.add_option('--rm-origin-dir', dest='rm_origin_dir', action='store_true', default=False,
-                      help='remove downloaded doujinshi dir when generated CBZ file.')
+                      help='remove downloaded doujinshi dir when generated CBZ or PDF file.')
 
     # nhentai options
     parser.add_option('--cookie', type='str', dest='cookie', action='store',
index 40e412cab8cd32657445479783b28c1fbc854a88..f6c48559a30d29baa4285491d6039a089b674e29 100644 (file)
@@ -11,7 +11,7 @@ from nhentai.doujinshi import Doujinshi
 from nhentai.downloader import Downloader
 from nhentai.logger import logger
 from nhentai.constant import BASE_URL
-from nhentai.utils import generate_html, generate_cbz, generate_main_html, check_cookie, signal_handler, DB
+from nhentai.utils import generate_html, generate_cbz, generate_main_html, generate_pdf, check_cookie, signal_handler, DB
 
 
 def main():
@@ -82,10 +82,12 @@ def main():
                 with DB() as db:
                     db.add_one(doujinshi.id)
 
-            if not options.is_nohtml and not options.is_cbz:
+            if not options.is_nohtml and not options.is_cbz and not options.is_pdf:
                 generate_html(options.output_dir, doujinshi)
             elif options.is_cbz:
                 generate_cbz(options.output_dir, doujinshi, options.rm_origin_dir)
+            elif options.is_pdf:
+                generate_pdf(options.output_dir, doujinshi, options.rm_origin_dir)
 
         if options.main_viewer:
             generate_main_html(options.output_dir)
index 6a22d659ea996f8b199d2f9bf80e068de9bd67bc..779ce2d0b25dfa7ec9d236cb62d8e04f0796bf12 100644 (file)
@@ -9,6 +9,7 @@ import zipfile
 import shutil
 import requests
 import sqlite3
+import img2pdf
 
 from nhentai import constant
 from nhentai.logger import logger
@@ -193,6 +194,34 @@ def generate_cbz(output_dir='.', doujinshi_obj=None, rm_origin_dir=False, write_
     logger.log(15, 'Comic Book CBZ file has been written to \'{0}\''.format(doujinshi_dir))
 
 
+def generate_pdf(output_dir='.', doujinshi_obj=None, rm_origin_dir=False):
+    """Write images to a PDF file using img2pdf."""
+    if doujinshi_obj is not None:
+        doujinshi_dir = os.path.join(output_dir, doujinshi_obj.filename)
+        pdf_filename = os.path.join(
+            os.path.join(doujinshi_dir, '..'),
+            '{}.pdf'.format(doujinshi_obj.filename)
+        )
+    else:
+        pdf_filename = './doujinshi.pdf'
+        doujinshi_dir = '.'
+
+    file_list = os.listdir(doujinshi_dir)
+    file_list.sort()
+
+    logger.info('Writing PDF file to path: {}'.format(pdf_filename))
+    with open(pdf_filename, 'wb') as pdf_f:
+        full_path_list = (
+            [os.path.join(doujinshi_dir, image) for image in file_list]
+        )
+        pdf_f.write(img2pdf.convert(full_path_list))
+
+    if rm_origin_dir:
+        shutil.rmtree(doujinshi_dir, ignore_errors=True)
+
+    logger.log(15, 'PDF file has been written to \'{0}\''.format(doujinshi_dir))
+
+
 def format_filename(s):
     """Take a string and return a valid filename constructed from the string.
 Uses a whitelist approach: any characters not present in valid_chars are
index 3fbad9d9ea794df26a0fbbcbbb242627aaf566e8..e34829d59dcefc76fee5e2a7129426fdc0f43424 100644 (file)
@@ -4,4 +4,5 @@ BeautifulSoup4>=4.0.0
 threadpool>=1.2.7
 tabulate>=0.7.5
 future>=0.15.2
+img2pdf>=0.3.6
 iso8601 >= 0.1