215 lines
7.8 KiB
Bash
Executable File
215 lines
7.8 KiB
Bash
Executable File
#!/bin/bash
|
||
|
||
# Poster PDF Quality Check Script
|
||
# Usage: ./review_poster.sh poster.pdf
|
||
|
||
# Colors for output
|
||
RED='\033[0;31m'
|
||
GREEN='\033[0;32m'
|
||
YELLOW='\033[1;33m'
|
||
BLUE='\033[0;34m'
|
||
NC='\033[0m' # No Color
|
||
|
||
# Check if file argument provided
|
||
if [ $# -eq 0 ]; then
|
||
echo -e "${RED}Error: No file specified${NC}"
|
||
echo "Usage: $0 <poster.pdf>"
|
||
exit 1
|
||
fi
|
||
|
||
POSTER_FILE="$1"
|
||
|
||
# Check if file exists
|
||
if [ ! -f "$POSTER_FILE" ]; then
|
||
echo -e "${RED}Error: File '$POSTER_FILE' not found${NC}"
|
||
exit 1
|
||
fi
|
||
|
||
echo -e "${BLUE}═══════════════════════════════════════════════${NC}"
|
||
echo -e "${BLUE} Poster PDF Quality Check${NC}"
|
||
echo -e "${BLUE}═══════════════════════════════════════════════${NC}"
|
||
echo ""
|
||
echo -e "${GREEN}File:${NC} $POSTER_FILE"
|
||
echo ""
|
||
|
||
# Function to check if command exists
|
||
command_exists() {
|
||
command -v "$1" >/dev/null 2>&1
|
||
}
|
||
|
||
# 1. Page Size Check
|
||
echo -e "${YELLOW}[1] Page Dimensions:${NC}"
|
||
if command_exists pdfinfo; then
|
||
PAGE_SIZE=$(pdfinfo "$POSTER_FILE" 2>/dev/null | grep "Page size")
|
||
if [ -n "$PAGE_SIZE" ]; then
|
||
echo " $PAGE_SIZE"
|
||
|
||
# Extract dimensions and check common sizes
|
||
WIDTH=$(echo "$PAGE_SIZE" | awk '{print $3}')
|
||
HEIGHT=$(echo "$PAGE_SIZE" | awk '{print $5}')
|
||
|
||
# Check against common poster sizes (approximate)
|
||
if [ "$WIDTH" = "2384" ] && [ "$HEIGHT" = "3370" ]; then
|
||
echo -e " ${GREEN}✓ Detected: A0 Portrait${NC}"
|
||
elif [ "$WIDTH" = "3370" ] && [ "$HEIGHT" = "2384" ]; then
|
||
echo -e " ${GREEN}✓ Detected: A0 Landscape${NC}"
|
||
elif [ "$WIDTH" = "1684" ] && [ "$HEIGHT" = "2384" ]; then
|
||
echo -e " ${GREEN}✓ Detected: A1 Portrait${NC}"
|
||
elif [ "$WIDTH" = "2592" ] && [ "$HEIGHT" = "3456" ]; then
|
||
echo -e " ${GREEN}✓ Detected: 36×48 inches Portrait${NC}"
|
||
else
|
||
echo -e " ${YELLOW}⚠ Non-standard size detected${NC}"
|
||
fi
|
||
else
|
||
echo -e " ${RED}✗ Could not extract page size${NC}"
|
||
fi
|
||
else
|
||
echo -e " ${YELLOW}⚠ pdfinfo not installed (install: brew install poppler or apt-get install poppler-utils)${NC}"
|
||
fi
|
||
echo ""
|
||
|
||
# 2. Page Count
|
||
echo -e "${YELLOW}[2] Page Count:${NC}"
|
||
if command_exists pdfinfo; then
|
||
PAGE_COUNT=$(pdfinfo "$POSTER_FILE" 2>/dev/null | grep "Pages" | awk '{print $2}')
|
||
if [ "$PAGE_COUNT" = "1" ]; then
|
||
echo -e " ${GREEN}✓ Single page (correct for poster)${NC}"
|
||
else
|
||
echo -e " ${RED}✗ Multiple pages detected: $PAGE_COUNT${NC}"
|
||
echo -e " ${YELLOW} Posters should be single page${NC}"
|
||
fi
|
||
else
|
||
echo -e " ${YELLOW}⚠ pdfinfo not installed${NC}"
|
||
fi
|
||
echo ""
|
||
|
||
# 3. File Size
|
||
echo -e "${YELLOW}[3] File Size:${NC}"
|
||
if command_exists ls; then
|
||
FILE_SIZE=$(ls -lh "$POSTER_FILE" | awk '{print $5}')
|
||
FILE_SIZE_BYTES=$(ls -l "$POSTER_FILE" | awk '{print $5}')
|
||
echo " Size: $FILE_SIZE"
|
||
|
||
# Check if file is too large for email
|
||
if [ "$FILE_SIZE_BYTES" -gt 52428800 ]; then # 50MB
|
||
echo -e " ${YELLOW}⚠ Large file (>50MB) - may need compression for email${NC}"
|
||
echo -e " ${BLUE} Compress with: gs -sDEVICE=pdfwrite -dPDFSETTINGS=/printer -dNOPAUSE -dQUIET -dBATCH -sOutputFile=compressed.pdf $POSTER_FILE${NC}"
|
||
elif [ "$FILE_SIZE_BYTES" -lt 1048576 ]; then # 1MB
|
||
echo -e " ${YELLOW}⚠ Small file - check image quality${NC}"
|
||
else
|
||
echo -e " ${GREEN}✓ Reasonable file size${NC}"
|
||
fi
|
||
fi
|
||
echo ""
|
||
|
||
# 4. Font Embedding Check
|
||
echo -e "${YELLOW}[4] Font Embedding:${NC}"
|
||
if command_exists pdffonts; then
|
||
echo " Checking first 20 fonts..."
|
||
FONT_OUTPUT=$(pdffonts "$POSTER_FILE" 2>/dev/null | head -21)
|
||
echo "$FONT_OUTPUT" | tail -20 | while IFS= read -r line; do
|
||
echo " $line"
|
||
done
|
||
|
||
# Check for non-embedded fonts
|
||
NON_EMBEDDED=$(echo "$FONT_OUTPUT" | tail -n +3 | awk '{if ($4 == "no") print $0}')
|
||
if [ -n "$NON_EMBEDDED" ]; then
|
||
echo -e " ${RED}✗ Some fonts are NOT embedded (printing may fail)${NC}"
|
||
echo -e " ${BLUE} Fix: Recompile with 'pdflatex -dEmbedAllFonts=true poster.tex'${NC}"
|
||
else
|
||
echo -e " ${GREEN}✓ All fonts appear to be embedded${NC}"
|
||
fi
|
||
else
|
||
echo -e " ${YELLOW}⚠ pdffonts not installed (install: brew install poppler or apt-get install poppler-utils)${NC}"
|
||
fi
|
||
echo ""
|
||
|
||
# 5. Image Quality Check
|
||
echo -e "${YELLOW}[5] Image Quality:${NC}"
|
||
if command_exists pdfimages; then
|
||
IMAGE_COUNT=$(pdfimages -list "$POSTER_FILE" 2>/dev/null | tail -n +3 | wc -l | tr -d ' ')
|
||
if [ "$IMAGE_COUNT" -gt 0 ]; then
|
||
echo " Found $IMAGE_COUNT image(s)"
|
||
echo " Image details:"
|
||
pdfimages -list "$POSTER_FILE" 2>/dev/null | head -20
|
||
|
||
# Note: DPI calculation would require page size knowledge
|
||
echo -e " ${BLUE} Verify images are at least 300 DPI for printing${NC}"
|
||
echo -e " ${BLUE} Formula: DPI = pixels / (inches in poster)${NC}"
|
||
else
|
||
echo -e " ${YELLOW}⚠ No images found${NC}"
|
||
fi
|
||
else
|
||
echo -e " ${YELLOW}⚠ pdfimages not installed (install: brew install poppler or apt-get install poppler-utils)${NC}"
|
||
fi
|
||
echo ""
|
||
|
||
# 6. Manual Checks Required
|
||
echo -e "${YELLOW}[6] Manual Visual Inspection Required:${NC}"
|
||
echo ""
|
||
echo -e "${BLUE}Layout and Spacing:${NC}"
|
||
echo " [ ] Content fills entire page (no large white margins)"
|
||
echo " [ ] Consistent spacing between columns"
|
||
echo " [ ] Consistent spacing between blocks/sections"
|
||
echo " [ ] All elements aligned properly"
|
||
echo " [ ] No overlapping text or figures"
|
||
echo ""
|
||
|
||
echo -e "${BLUE}Typography:${NC}"
|
||
echo " [ ] Title visible and large (72pt+)"
|
||
echo " [ ] Section headers readable (48-72pt)"
|
||
echo " [ ] Body text readable (24-36pt minimum)"
|
||
echo " [ ] No text cutoff or running off edges"
|
||
echo " [ ] Consistent font usage"
|
||
echo ""
|
||
|
||
echo -e "${BLUE}Visual Elements:${NC}"
|
||
echo " [ ] All figures display correctly"
|
||
echo " [ ] No pixelated or blurry images"
|
||
echo " [ ] Figure captions present and readable"
|
||
echo " [ ] Colors render as expected"
|
||
echo " [ ] Logos display clearly"
|
||
echo " [ ] QR codes visible and scannable"
|
||
echo ""
|
||
|
||
echo -e "${BLUE}Content:${NC}"
|
||
echo " [ ] All sections present (Intro, Methods, Results, Conclusions)"
|
||
echo " [ ] References included"
|
||
echo " [ ] Contact information visible"
|
||
echo " [ ] No placeholder text (Lorem ipsum, TODO, etc.)"
|
||
echo ""
|
||
|
||
# 7. Recommended Tests
|
||
echo -e "${YELLOW}[7] Recommended Next Steps:${NC}"
|
||
echo ""
|
||
echo -e "${BLUE}Test Print:${NC}"
|
||
echo " • Print at 25% scale (A0→A4, 36×48→Letter)"
|
||
echo " • Check readability from 2-3 feet"
|
||
echo " • Verify colors printed accurately"
|
||
echo ""
|
||
|
||
echo -e "${BLUE}Digital Checks:${NC}"
|
||
echo " • View at 100% zoom in PDF viewer"
|
||
echo " • Test on different screens/devices"
|
||
echo " • Verify QR codes work with scanner app"
|
||
echo ""
|
||
|
||
echo -e "${BLUE}Proofreading:${NC}"
|
||
echo " • Spell-check all text"
|
||
echo " • Verify author names and affiliations"
|
||
echo " • Confirm all statistics and numbers"
|
||
echo " • Ask colleague to review"
|
||
echo ""
|
||
|
||
# 8. Summary
|
||
echo -e "${BLUE}═══════════════════════════════════════════════${NC}"
|
||
echo -e "${BLUE} Quality Check Complete${NC}"
|
||
echo -e "${BLUE}═══════════════════════════════════════════════${NC}"
|
||
echo ""
|
||
echo -e "Review the checks above and complete manual verification."
|
||
echo -e "For full checklist, see: ${BLUE}assets/poster_quality_checklist.md${NC}"
|
||
echo ""
|
||
|
||
exit 0
|
||
|