48 lines
1.3 KiB
Python
48 lines
1.3 KiB
Python
import os
|
|
import subprocess
|
|
from pathlib import Path
|
|
|
|
import logging
|
|
logger = logging.getLogger(__name__)
|
|
import configuration
|
|
config = configuration.main_config["DOWNLOADS"]
|
|
|
|
shrink_sizes = []
|
|
|
|
def shrink_pdf(article):
|
|
article_loc = Path(article.save_path) / article.file_name
|
|
initial_size = article_loc.stat().st_size
|
|
compressed_tmp = Path(config['default_download_path']) / "compressed.pdf"
|
|
|
|
if article_loc.suffix != "pdf":
|
|
return article # it probably was a youtube video
|
|
|
|
c = subprocess.run(
|
|
[
|
|
"gs",
|
|
"-sDEVICE=pdfwrite",
|
|
"-dPDFSETTINGS=/screen",
|
|
"-dNOPAUSE",
|
|
"-dBATCH",
|
|
f"-sOutputFile={compressed_tmp}",
|
|
f"{article_loc}"
|
|
],
|
|
stdout=subprocess.PIPE, stderr=subprocess.PIPE
|
|
)
|
|
|
|
if c.returncode == 0:
|
|
try:
|
|
os.replace(compressed_tmp, article_loc)
|
|
except OSError as e:
|
|
logger.error(f"Compression ran but I could not copy back the file {e}")
|
|
|
|
final_size = article_loc.stat().st_size
|
|
shrink_sizes.append(initial_size - final_size)
|
|
logger.info(f"Compression worked. Avg shrinkage: {int(sum(shrink_sizes)/len(shrink_sizes) / 1000)} KB")
|
|
|
|
|
|
else:
|
|
logger.error(f"Could not run the compression! {c.stderr.decode()} - {c.stdout.decode()}")
|
|
|
|
return article
|