larxius commited on
Commit
d8b826e
·
verified ·
1 Parent(s): 1d0a4fb

Update backend/utils/pdf_generator.py

Browse files
Files changed (1) hide show
  1. backend/utils/pdf_generator.py +43 -8
backend/utils/pdf_generator.py CHANGED
@@ -1110,21 +1110,56 @@ def generate_scan_pdf(scan, vulnerabilities):
1110
  from datetime import datetime
1111
 
1112
  # --- Header ---
 
1113
  if has_local_logo:
1114
  try:
1115
- canvas_obj.drawImage(ImageReader(logo_path), 40, letter[1] - 55, width=120, height=40, preserveAspectRatio=True, mask='auto')
1116
- except Exception:
1117
- pass
 
 
 
 
 
 
 
 
 
 
 
 
 
1118
 
1119
- canvas_obj.setFont('Helvetica-Bold', 12)
1120
- canvas_obj.drawCentredString(letter[0] / 2.0, letter[1] - 35, "Web Application VAPT Report")
 
 
1121
 
 
1122
  hdr_logo_stream = get_org_logo_stream()
1123
  if hdr_logo_stream:
1124
  try:
1125
- canvas_obj.drawImage(ImageReader(hdr_logo_stream), letter[0] - 160, letter[1] - 55, width=120, height=40, preserveAspectRatio=True, mask='auto')
1126
- except Exception:
1127
- pass
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1128
 
1129
  # --- Footer ---
1130
  canvas_obj.setFont('Helvetica', 9)
 
1110
  from datetime import datetime
1111
 
1112
  # --- Header ---
1113
+ # 1. Left Logo (LarShield Brand)
1114
  if has_local_logo:
1115
  try:
1116
+ img_reader_l = ImageReader(logo_path)
1117
+ lw, lh = img_reader_l.getSize()
1118
+ l_aspect = lw / float(lh) if lh > 0 else 1.0
1119
+ l_target_h = 32
1120
+ l_target_w = min(110, l_target_h * l_aspect)
1121
+ l_target_h = l_target_w / l_aspect
1122
+ canvas_obj.drawImage(
1123
+ img_reader_l,
1124
+ 40,
1125
+ letter[1] - 16 - l_target_h,
1126
+ width=l_target_w,
1127
+ height=l_target_h,
1128
+ mask='auto'
1129
+ )
1130
+ except Exception as e:
1131
+ print(f"[PDF Header] Left logo error: {e}")
1132
 
1133
+ # 2. Center Header Text
1134
+ canvas_obj.setFont('Helvetica-Bold', 11)
1135
+ canvas_obj.setFillColor(colors.HexColor("#0F172A"))
1136
+ canvas_obj.drawCentredString(letter[0] / 2.0, letter[1] - 34, "Web Application VAPT Report")
1137
 
1138
+ # 3. Right Logo (Client Organization)
1139
  hdr_logo_stream = get_org_logo_stream()
1140
  if hdr_logo_stream:
1141
  try:
1142
+ img_reader_r = ImageReader(hdr_logo_stream)
1143
+ rw, rh = img_reader_r.getSize()
1144
+ r_aspect = rw / float(rh) if rh > 0 else 1.0
1145
+ r_target_h = 32
1146
+ r_target_w = min(120, r_target_h * r_aspect)
1147
+ r_target_h = r_target_w / r_aspect
1148
+ canvas_obj.drawImage(
1149
+ img_reader_r,
1150
+ letter[0] - 40 - r_target_w,
1151
+ letter[1] - 16 - r_target_h,
1152
+ width=r_target_w,
1153
+ height=r_target_h,
1154
+ mask='auto'
1155
+ )
1156
+ except Exception as e:
1157
+ print(f"[PDF Header] Right logo error: {e}")
1158
+
1159
+ # 4. Clean Header Horizontal Line
1160
+ canvas_obj.setStrokeColor(colors.HexColor("#CBD5E1"))
1161
+ canvas_obj.setLineWidth(0.75)
1162
+ canvas_obj.line(40, letter[1] - 52, letter[0] - 40, letter[1] - 52)
1163
 
1164
  # --- Footer ---
1165
  canvas_obj.setFont('Helvetica', 9)