Files
telfax/test/test_conversion.py
Warren bf1ca90a9c Add PDF to fax conversion support
- pdf.rs: Ghostscript-based PDF to TIFF-F conversion
- tiff_to_fax_document: Parse TIFF and convert to 1-bit fax format
- CLI: Add 'convert' subcommand for dry testing
- CLI: Add resolution option for send command
- Test files for PDF/TIFF conversion validation
2026-07-01 17:17:49 +08:00

76 lines
2.8 KiB
Python

#!/usr/bin/env python3
import subprocess
import os
# Test PDF to TIFF-F conversion
pdf_path = "/Users/accusys/telfax/test/testfax.pdf"
tiff_path = "/Users/accusys/telfax/test/testfax_converted.tif"
print("=== Testing PDF → TIFF-F Conversion ===")
# Run ghostscript
result = subprocess.run([
"gs", "-dBATCH", "-dNOPAUSE", "-q",
"-sDEVICE=tiffg3",
"-r204x196", # Fine resolution
"-sOutputFile", tiff_path,
pdf_path
], capture_output=True, text=True)
if result.returncode != 0:
print(f"Ghostscript failed: {result.stderr}")
exit(1)
# Check output
if os.path.exists(tiff_path):
size = os.path.getsize(tiff_path)
print(f"✓ TIFF-F created: {tiff_path}")
print(f" Size: {size} bytes")
# Get TIFF info
import struct
with open(tiff_path, 'rb') as f:
header = f.read(8)
if header[:2] == b'II':
print(" Byte order: Little-endian")
elif header[:2] == b'MM':
print(" Byte order: Big-endian")
# Read IFD offset
if header[:2] == b'II':
ifd_offset = struct.unpack('<I', header[4:8])[0]
else:
ifd_offset = struct.unpack('>I', header[4:8])[0]
f.seek(ifd_offset)
num_entries = struct.unpack('<H' if header[:2] == b'II' else '>H', f.read(2))[0]
print(f" IFD entries: {num_entries}")
# Read key tags
for i in range(num_entries):
tag = struct.unpack('<H' if header[:2] == b'II' else '>H', f.read(2))[0]
type_ = struct.unpack('<H' if header[:2] == b'II' else '>H', f.read(2))[0]
count = struct.unpack('<I' if header[:2] == b'II' else '>I', f.read(4))[0]
value_offset = f.read(4)
# Tags of interest: 256=width, 257=height, 259=compression, 262=photometric
if tag == 256: # Width
val = struct.unpack('<I' if header[:2] == b'II' else '>I', value_offset)[0]
print(f" Width: {val} pixels")
elif tag == 257: # Height
val = struct.unpack('<I' if header[:2] == b'II' else '>I', value_offset)[0]
print(f" Height: {val} lines")
elif tag == 259: # Compression
val = struct.unpack('<H' if header[:2] == b'II' else '>H', value_offset[:2])[0]
comp_names = {1: "None", 3: "Group 3 MH", 4: "Group 4 MMR"}
print(f" Compression: {comp_names.get(val, val)}")
elif tag == 262: # PhotometricInterpretation
val = struct.unpack('<H' if header[:2] == b'II' else '>H', value_offset[:2])[0]
photo_names = {0: "WhiteIsZero", 1: "BlackIsZero"}
print(f" Photometric: {photo_names.get(val, val)}")
else:
print("✗ TIFF-F not created")
exit(1)
print("\n=== Conversion Test Passed ===")