55 lines
1.8 KiB
Python
55 lines
1.8 KiB
Python
# Crop a single page PDF document.
|
|
# This is specifically designed for the letter size UPS shipping label that needs to be cropped for printing.
|
|
|
|
import base64
|
|
import io
|
|
from cropper import AutoSettings, ManualSettings, argument_default, auto_crop, manual_crop, messages
|
|
from typing import Dict, Any
|
|
|
|
|
|
def lambda_handler(event: Dict[str, Any], context: Any) -> Dict[str, Any]:
|
|
messages.clear()
|
|
content = io.BytesIO(base64.b64decode(event['b64_content']))
|
|
mode = argument_default(event, 'mode', 'manual', 'string')
|
|
messages.append(f"Log stream name is {context.log_stream_name}")
|
|
|
|
if mode == 'auto':
|
|
settings = AutoSettings()
|
|
settings.event_argument(event, 'width')
|
|
settings.event_argument(event, 'height')
|
|
settings.event_argument(event, 'margin')
|
|
|
|
try:
|
|
buffer = auto_crop(content, settings)
|
|
except Exception as e:
|
|
return {
|
|
'statusCode': 400,
|
|
'error': str(e),
|
|
'messages': messages,
|
|
}
|
|
elif mode == 'manual':
|
|
settings = ManualSettings()
|
|
settings.event_argument(event, 'start_x')
|
|
settings.event_argument(event, 'start_y')
|
|
settings.event_argument(event, 'width')
|
|
settings.event_argument(event, 'height')
|
|
settings.event_argument(event, 'scale_x')
|
|
settings.event_argument(event, 'scale_y')
|
|
settings.event_argument(event, 'rotate')
|
|
|
|
buffer = manual_crop(content, settings)
|
|
else:
|
|
return {
|
|
'statusCode': 400,
|
|
'error': 'Invalid mode: (manual|auto)',
|
|
'messages': messages,
|
|
}
|
|
|
|
data = base64.b64encode(buffer.getvalue())
|
|
|
|
return {
|
|
'statusCode': 200,
|
|
'body': data,
|
|
'messages': messages,
|
|
}
|