darkred06 commited on
Commit
44af7ed
verified
1 Parent(s): 7aa49b3

Update pdf_compressor_app.py

Browse files
Files changed (1) hide show
  1. pdf_compressor_app.py +17 -13
pdf_compressor_app.py CHANGED
@@ -5,24 +5,29 @@ from flask import Flask, render_template, request, send_file, Response
5
 
6
  app = Flask(__name__)
7
 
8
- # --- CONFIGURACI脫N DE GHOSTSCRIPT ---
9
- # Definici贸n del tama帽o objetivo en Bytes (18 MB, solo como referencia de la agresividad)
10
- TARGET_SIZE_BYTES = 18 * 1024 * 1024
11
-
12
  def compress_pdf_with_ghostscript(input_stream: io.BytesIO, quality: str) -> io.BytesIO:
13
  """
14
- Comprime un PDF usando Ghostscript.
15
- Aplica una compresi贸n agresiva de im谩genes y metadatos del PDF.
16
  """
17
  output_stream = io.BytesIO()
18
  input_stream.seek(0)
19
 
20
- # Argumentos de Ghostscript para compresi贸n
21
  gs_command = [
22
  "gs",
23
  "-sDEVICE=pdfwrite",
24
  "-dCompatibilityLevel=1.4",
25
- "-dPDFSETTINGS=/" + quality, # Usar谩 'screen', 'ebook', etc.
 
 
 
 
 
 
 
 
26
  "-dNOPAUSE", "-dBATCH", "-dQUIET",
27
  "-sOutputFile=-", # Salida a stdout
28
  "-" # Entrada desde stdin
@@ -50,7 +55,7 @@ def compress_pdf_with_ghostscript(input_stream: io.BytesIO, quality: str) -> io.
50
  @app.route('/')
51
  def index():
52
  """Muestra la interfaz del compresor."""
53
- # Aseg煤rate de crear la carpeta templates/ y poner el HTML dentro
54
  return render_template('compressor_index.html')
55
 
56
  @app.route('/compress', methods=['POST'])
@@ -60,16 +65,15 @@ def compress_pdf_file():
60
  return Response('No se seleccion贸 ning煤n archivo PDF', status=400)
61
 
62
  pdf_file = request.files['pdf_file']
63
- quality_setting = request.form.get('quality', 'screen')
64
 
65
  try:
66
  input_stream = io.BytesIO(pdf_file.read())
67
- original_size = len(input_stream.getvalue())
68
 
69
- # 1. Comprimir el PDF subido
70
  compressed_stream = compress_pdf_with_ghostscript(input_stream, quality_setting)
71
 
72
- # 2. Devolver el archivo comprimido
73
  return send_file(
74
  compressed_stream,
75
  as_attachment=True,
 
5
 
6
  app = Flask(__name__)
7
 
8
+ # --- FUNCI脫N DE COMPRESI脫N (USANDO GHOSTSCRIPT) ---
 
 
 
9
  def compress_pdf_with_ghostscript(input_stream: io.BytesIO, quality: str) -> io.BytesIO:
10
  """
11
+ Comprime un PDF usando Ghostscript, forzando un perfil agresivo y baja resoluci贸n
12
+ (100 DPI) para las im谩genes internas.
13
  """
14
  output_stream = io.BytesIO()
15
  input_stream.seek(0)
16
 
17
+ # Par谩metros para forzar la compresi贸n m谩xima
18
  gs_command = [
19
  "gs",
20
  "-sDEVICE=pdfwrite",
21
  "-dCompatibilityLevel=1.4",
22
+ # Usamos el perfil 'ebook' como base agresiva
23
+ "-dPDFSETTINGS=/ebook",
24
+
25
+ # Opciones para forzar el reescalado de im谩genes a 100 DPI
26
+ "-dDownsampleColorImages=true",
27
+ "-dColorImageResolution=100",
28
+ "-dDownsampleGrayImages=true",
29
+ "-dGrayImageResolution=100",
30
+
31
  "-dNOPAUSE", "-dBATCH", "-dQUIET",
32
  "-sOutputFile=-", # Salida a stdout
33
  "-" # Entrada desde stdin
 
55
  @app.route('/')
56
  def index():
57
  """Muestra la interfaz del compresor."""
58
+ # Aseg煤rate de que compressor_index.html est茅 en la carpeta templates/
59
  return render_template('compressor_index.html')
60
 
61
  @app.route('/compress', methods=['POST'])
 
65
  return Response('No se seleccion贸 ning煤n archivo PDF', status=400)
66
 
67
  pdf_file = request.files['pdf_file']
68
+ quality_setting = request.form.get('quality', 'screen') # Recibe el perfil seleccionado
69
 
70
  try:
71
  input_stream = io.BytesIO(pdf_file.read())
 
72
 
73
+ # Comprimir el PDF subido
74
  compressed_stream = compress_pdf_with_ghostscript(input_stream, quality_setting)
75
 
76
+ # Devolver el archivo comprimido
77
  return send_file(
78
  compressed_stream,
79
  as_attachment=True,