Page layout in COBOL refers to the design and structure of printed report pages, including the arrangement of headers, footers, margins, spacing, and content positioning. Good page layout ensures reports are professional, readable, and consistent across all pages. Understanding page layout is essential for creating well-formatted reports that are easy to read, properly paginated, and suitable for business use in mainframe COBOL applications.
Page layout encompasses the visual design and organization of report pages:
Effective page layout creates visual hierarchy, improves readability, and provides consistent structure throughout the report.
Understanding standard page dimensions helps design appropriate layouts:
| Aspect | Standard Value | Description |
|---|---|---|
| Lines per page | 66 lines | Standard for 11-inch paper at 6 lines per inch |
| Characters per line | 132 characters | Standard for wide carriage printers |
| Alternative lines | 60 lines | Common for letter-size paper |
| Header area | 5-10 lines | Typical space reserved for headers |
| Footer area | 3-5 lines | Typical space reserved for footers |
| Body area | 50-58 lines | Remaining space for detail lines |
Page headers appear at the top of each page and provide context and identification:
Effective headers typically include:
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081WORKING-STORAGE SECTION. 01 WS-PAGE-HEADER. 05 WS-HEADER-LINE-1. 10 FILLER PIC X(51) VALUE SPACES. 10 FILLER PIC X(30) VALUE 'EMPLOYEE COMPENSATION REPORT'. 10 FILLER PIC X(51) VALUE SPACES. 05 WS-HEADER-LINE-2. 10 FILLER PIC X(10) VALUE 'DATE: '. 10 WS-REPORT-DATE PIC X(10). 10 FILLER PIC X(15) VALUE SPACES. 10 FILLER PIC X(10) VALUE 'TIME: '. 10 WS-REPORT-TIME PIC X(8). 10 FILLER PIC X(15) VALUE SPACES. 10 FILLER PIC X(6) VALUE 'PAGE: '. 10 WS-PAGE-NUM PIC ZZZ9. 10 FILLER PIC X(4) VALUE ' OF '. 10 WS-TOTAL-PAGES PIC ZZZ9. 10 FILLER PIC X(40) VALUE SPACES. 05 WS-HEADER-LINE-3. 10 FILLER PIC X(132) VALUE SPACES. 05 WS-COLUMN-HEADER-1. 10 FILLER PIC X(8) VALUE 'EMP ID'. 10 FILLER PIC X(2) VALUE SPACES. 10 FILLER PIC X(20) VALUE 'EMPLOYEE NAME'. 10 FILLER PIC X(2) VALUE SPACES. 10 FILLER PIC X(15) VALUE 'DEPARTMENT'. 10 FILLER PIC X(2) VALUE SPACES. 10 FILLER PIC X(12) VALUE 'SALARY'. 10 FILLER PIC X(71) VALUE SPACES. 05 WS-COLUMN-HEADER-2. 10 FILLER PIC X(132) VALUE ALL '-'. PROCEDURE DIVISION. WRITE-PAGE-HEADER. *> Get current date and time ACCEPT WS-REPORT-DATE FROM DATE YYYYMMDD ACCEPT WS-REPORT-TIME FROM TIME *> Format date MOVE WS-REPORT-DATE(5:2) TO WS-FORMATTED-DATE(1:2) MOVE '/' TO WS-FORMATTED-DATE(3:1) MOVE WS-REPORT-DATE(7:2) TO WS-FORMATTED-DATE(4:2) MOVE '/' TO WS-FORMATTED-DATE(6:1) MOVE WS-REPORT-DATE(1:4) TO WS-FORMATTED-DATE(7:4) *> Format time MOVE WS-REPORT-TIME(1:2) TO WS-FORMATTED-TIME(1:2) MOVE ':' TO WS-FORMATTED-TIME(3:1) MOVE WS-REPORT-TIME(3:2) TO WS-FORMATTED-TIME(4:2) MOVE ':' TO WS-FORMATTED-TIME(6:1) MOVE WS-REPORT-TIME(5:2) TO WS-FORMATTED-TIME(7:2) *> Set page numbers MOVE WS-CURRENT-PAGE TO WS-PAGE-NUM MOVE WS-TOTAL-PAGES TO WS-TOTAL-PAGES *> Write header lines WRITE REPORT-LINE FROM WS-HEADER-LINE-1 AFTER ADVANCING PAGE WRITE REPORT-LINE FROM WS-HEADER-LINE-2 AFTER ADVANCING 1 LINE WRITE REPORT-LINE FROM WS-HEADER-LINE-3 AFTER ADVANCING 1 LINE WRITE REPORT-LINE FROM WS-COLUMN-HEADER-1 AFTER ADVANCING 1 LINE WRITE REPORT-LINE FROM WS-COLUMN-HEADER-2 AFTER ADVANCING 1 LINE WRITE REPORT-LINE FROM SPACES AFTER ADVANCING 1 LINE *> Reset line counter MOVE 6 TO WS-LINE-COUNT.
This header design includes:
Page footers appear at the bottom of each page and provide summary information or page identification:
Common footer elements include:
12345678910111213141516171819202122232425262728293031323334WORKING-STORAGE SECTION. 01 WS-PAGE-FOOTER. 05 WS-FOOTER-LINE-1. 10 FILLER PIC X(132) VALUE ALL '-'. 05 WS-FOOTER-LINE-2. 10 FILLER PIC X(50) VALUE SPACES. 10 FILLER PIC X(6) VALUE 'PAGE: '. 10 WS-FOOTER-PAGE PIC ZZZ9. 10 FILLER PIC X(4) VALUE ' OF '. 10 WS-FOOTER-TOTAL PIC ZZZ9. 10 FILLER PIC X(20) VALUE SPACES. 10 FILLER PIC X(20) VALUE 'CONFIDENTIAL REPORT'. 10 FILLER PIC X(22) VALUE SPACES. PROCEDURE DIVISION. WRITE-PAGE-FOOTER. *> Position to footer area (if not using LINAGE) COMPUTE WS-LINES-TO-FOOTER = WS-MAX-LINES - WS-LINE-COUNT IF WS-LINES-TO-FOOTER > 0 WRITE REPORT-LINE FROM SPACES AFTER ADVANCING WS-LINES-TO-FOOTER LINES END-IF *> Write footer lines MOVE WS-CURRENT-PAGE TO WS-FOOTER-PAGE MOVE WS-TOTAL-PAGES TO WS-FOOTER-TOTAL WRITE REPORT-LINE FROM WS-FOOTER-LINE-1 AFTER ADVANCING 1 LINE WRITE REPORT-LINE FROM WS-FOOTER-LINE-2 AFTER ADVANCING 1 LINE.
Margins provide space around page content and are controlled using LINAGE:
123456789101112FD REPORT-FILE LINAGE IS 66 LINES WITH FOOTING AT 60 LINES AT TOP 6 LINES AT BOTTOM 4. *> This defines: *> - Total page: 66 lines *> - Top margin (header area): 6 lines (lines 1-6) *> - Body area: Lines 7-59 (53 lines available) *> - Footer area starts: Line 60 *> - Bottom margin: 4 lines (lines 60-63, plus 3 lines buffer)
LINAGE parameters:
Left and right margins are controlled by positioning data within the record:
1234567891011*> Left margin: Start data after initial spaces 01 WS-DETAIL-LINE. 05 FILLER PIC X(5) VALUE SPACES. *> Left margin 05 WS-DATA-FIELD PIC X(30). 05 FILLER PIC X(97) VALUE SPACES. *> Right margin *> Or center data with equal margins: 01 WS-CENTERED-LINE. 05 FILLER PIC X(51) VALUE SPACES. *> Left padding 05 WS-CENTERED-TEXT PIC X(30). 05 FILLER PIC X(51) VALUE SPACES. *> Right padding
Proper spacing and alignment improve readability:
Control vertical spacing between sections:
1234567891011121314151617*> Single line spacing WRITE REPORT-LINE FROM DETAIL-LINE AFTER ADVANCING 1 LINE *> Double line spacing WRITE REPORT-LINE FROM DETAIL-LINE AFTER ADVANCING 2 LINES *> Blank line for separation WRITE REPORT-LINE FROM SPACES AFTER ADVANCING 1 LINE *> Multiple blank lines PERFORM 3 TIMES WRITE REPORT-LINE FROM SPACES AFTER ADVANCING 1 LINE END-PERFORM
Align data within columns:
12345678910111213141516*> Left-aligned text 01 WS-LEFT-ALIGNED. 05 WS-TEXT PIC X(20). 05 FILLER PIC X(112) VALUE SPACES. *> Right-aligned numbers 01 WS-RIGHT-ALIGNED. 05 FILLER PIC X(100) VALUE SPACES. 05 WS-AMOUNT PIC $ZZ,ZZZ,ZZ9.99. 05 FILLER PIC X(20) VALUE SPACES. *> Centered text 01 WS-CENTERED. 05 FILLER PIC X(51) VALUE SPACES. 05 WS-TITLE PIC X(30). 05 FILLER PIC X(51) VALUE SPACES.
Proper page break control ensures content doesn't overflow and pages break at appropriate points:
1234567891011121314151617181920212223242526WORKING-STORAGE SECTION. 01 WS-PAGE-CONTROL. 05 WS-LINE-COUNT PIC 9(3) VALUE 0. 05 WS-MAX-LINES PIC 9(3) VALUE 55. 05 WS-HEADER-LINES PIC 9(2) VALUE 6. 05 WS-FOOTER-LINES PIC 9(2) VALUE 3. PROCEDURE DIVISION. CHECK-PAGE-BREAK. *> Check if we need a new page IF WS-LINE-COUNT >= WS-MAX-LINES PERFORM WRITE-PAGE-FOOTER ADD 1 TO WS-CURRENT-PAGE PERFORM WRITE-PAGE-HEADER MOVE WS-HEADER-LINES TO WS-LINE-COUNT END-IF. WRITE-DETAIL-LINE. PERFORM CHECK-PAGE-BREAK *> Format and write detail line MOVE DATA-FIELDS TO WS-DETAIL-LINE WRITE REPORT-LINE FROM WS-DETAIL-LINE AFTER ADVANCING 1 LINE ADD 1 TO WS-LINE-COUNT.
1234567891011121314151617181920FD REPORT-FILE LINAGE IS 66 LINES WITH FOOTING AT 60 LINES AT TOP 6 LINES AT BOTTOM 4. PROCEDURE DIVISION. WRITE-DETAIL-LINE. WRITE REPORT-LINE FROM WS-DETAIL-LINE AT END-OF-PAGE PERFORM HANDLE-PAGE-OVERFLOW END-WRITE. HANDLE-PAGE-OVERFLOW. *> Write footer for completed page PERFORM WRITE-PAGE-FOOTER *> Start new page with header ADD 1 TO WS-CURRENT-PAGE PERFORM WRITE-PAGE-HEADER.
Here's a complete example demonstrating professional page layout:
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144IDENTIFICATION DIVISION. PROGRAM-ID. PAGE-LAYOUT-DEMO. ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT REPORT-FILE ASSIGN TO PRINTER ORGANIZATION IS SEQUENTIAL. DATA DIVISION. FILE SECTION. FD REPORT-FILE LINAGE IS 66 LINES WITH FOOTING AT 60 LINES AT TOP 6 LINES AT BOTTOM 4. 01 REPORT-LINE PIC X(132). WORKING-STORAGE SECTION. 01 WS-PAGE-CONTROL. 05 WS-CURRENT-PAGE PIC 9(4) VALUE 1. 05 WS-LINE-COUNT PIC 9(3) VALUE 0. 05 WS-MAX-BODY-LINES PIC 9(3) VALUE 54. 01 WS-HEADER. 05 WS-HEADER-1. 10 FILLER PIC X(46) VALUE SPACES. 10 FILLER PIC X(40) VALUE 'EMPLOYEE COMPENSATION ANALYSIS'. 10 FILLER PIC X(46) VALUE SPACES. 05 WS-HEADER-2. 10 FILLER PIC X(10) VALUE 'DATE: '. 10 WS-DATE PIC X(10). 10 FILLER PIC X(15) VALUE SPACES. 10 FILLER PIC X(6) VALUE 'PAGE: '. 10 WS-PAGE PIC ZZZ9. 10 FILLER PIC X(87) VALUE SPACES. 05 WS-HEADER-3. 10 FILLER PIC X(132) VALUE SPACES. 05 WS-COL-HEADER. 10 FILLER PIC X(8) VALUE 'EMP ID'. 10 FILLER PIC X(2) VALUE SPACES. 10 FILLER PIC X(20) VALUE 'NAME'. 10 FILLER PIC X(2) VALUE SPACES. 10 FILLER PIC X(15) VALUE 'DEPARTMENT'. 10 FILLER PIC X(2) VALUE SPACES. 10 FILLER PIC X(12) VALUE 'SALARY'. 10 FILLER PIC X(71) VALUE SPACES. 05 WS-UNDERLINE. 10 FILLER PIC X(132) VALUE ALL '-'. 01 WS-FOOTER. 05 WS-FOOTER-1. 10 FILLER PIC X(132) VALUE ALL '-'. 05 WS-FOOTER-2. 10 FILLER PIC X(60) VALUE SPACES. 10 FILLER PIC X(6) VALUE 'PAGE: '. 10 WS-FOOT-PAGE PIC ZZZ9. 10 FILLER PIC X(4) VALUE ' OF '. 10 WS-FOOT-TOTAL PIC ZZZ9. 10 FILLER PIC X(50) VALUE SPACES. 01 WS-DETAIL-LINE. 05 WS-EMP-ID PIC X(8). 05 FILLER PIC X(2) VALUE SPACES. 05 WS-EMP-NAME PIC X(20). 05 FILLER PIC X(2) VALUE SPACES. 05 WS-DEPT PIC X(15). 05 FILLER PIC X(2) VALUE SPACES. 05 WS-SALARY PIC $ZZ,ZZZ,ZZ9.99. 05 FILLER PIC X(83) VALUE SPACES. PROCEDURE DIVISION. MAIN-PARA. OPEN OUTPUT REPORT-FILE PERFORM WRITE-PAGE-HEADER PERFORM PROCESS-DATA PERFORM WRITE-PAGE-FOOTER CLOSE REPORT-FILE STOP RUN. WRITE-PAGE-HEADER. *> Get current date ACCEPT WS-DATE FROM DATE YYYYMMDD *> Format date (simplified) MOVE WS-DATE TO WS-FORMATTED-DATE *> Set page number MOVE WS-CURRENT-PAGE TO WS-PAGE *> Write header WRITE REPORT-LINE FROM WS-HEADER-1 AFTER ADVANCING PAGE WRITE REPORT-LINE FROM WS-HEADER-2 AFTER ADVANCING 1 LINE WRITE REPORT-LINE FROM WS-HEADER-3 AFTER ADVANCING 1 LINE WRITE REPORT-LINE FROM WS-COL-HEADER AFTER ADVANCING 1 LINE WRITE REPORT-LINE FROM WS-UNDERLINE AFTER ADVANCING 1 LINE WRITE REPORT-LINE FROM SPACES AFTER ADVANCING 1 LINE MOVE 6 TO WS-LINE-COUNT. CHECK-PAGE-BREAK. IF WS-LINE-COUNT >= WS-MAX-BODY-LINES PERFORM WRITE-PAGE-FOOTER ADD 1 TO WS-CURRENT-PAGE PERFORM WRITE-PAGE-HEADER END-IF. WRITE-PAGE-FOOTER. *> Position to footer COMPUTE WS-LINES-TO-SKIP = WS-MAX-BODY-LINES - WS-LINE-COUNT IF WS-LINES-TO-SKIP > 0 WRITE REPORT-LINE FROM SPACES AFTER ADVANCING WS-LINES-TO-SKIP LINES END-IF MOVE WS-CURRENT-PAGE TO WS-FOOT-PAGE MOVE WS-TOTAL-PAGES TO WS-FOOT-TOTAL WRITE REPORT-LINE FROM WS-FOOTER-1 AFTER ADVANCING 1 LINE WRITE REPORT-LINE FROM WS-FOOTER-2 AFTER ADVANCING 1 LINE. PROCESS-DATA. *> Process and write detail lines PERFORM UNTIL END-OF-DATA PERFORM CHECK-PAGE-BREAK *> Get data and format MOVE EMP-ID TO WS-EMP-ID MOVE EMP-NAME TO WS-EMP-NAME MOVE EMP-DEPT TO WS-DEPT MOVE EMP-SALARY TO WS-SALARY WRITE REPORT-LINE FROM WS-DETAIL-LINE AFTER ADVANCING 1 LINE ADD 1 TO WS-LINE-COUNT *> Read next record... END-PERFORM.
Follow these best practices for effective page layout:
1234*> Header: 3 lines (title, date/page, underline) *> Body: 50 lines available *> Footer: 2 lines (separator, page number) *> Total: 55 lines per page
12345*> Header: 8 lines (title, subtitle, date/time, *> page info, blank, column headers, underline, blank) *> Body: 48 lines available *> Footer: 4 lines (blank, separator, page info, blank) *> Total: 60 lines per page
1234567*> Header: 10 lines (company info, report title, *> period info, date/time, page, blank, *> column headers, underline, blank) *> Body: 50 lines available *> Footer: 6 lines (blank, totals, separator, *> page info, confidentiality, blank) *> Total: 66 lines per page
Think of page layout like setting up a picture frame:
So page layout is like arranging everything on a page so it looks nice, fits properly, and is easy to read - just like framing a picture!
Complete these exercises to reinforce your understanding:
Create a program that writes a simple page header with a centered title, current date, and page number. Use appropriate spacing and formatting.
Design a complete page layout with headers (6 lines), body area (50 lines), and footers (4 lines). Include proper margins, column headers, and page break control.
Write a program that centers a report title in a 132-character line. Calculate the padding needed and demonstrate left, center, and right alignment.
Create a program that processes 200 detail records with proper page break control. Each page should have 50 detail lines, and the program should handle page breaks correctly.
Design a professional footer that includes page numbers (current and total), a separator line, and a confidentiality notice. Position it correctly at the bottom of each page.
1. What does page layout in COBOL refer to?
2. What is the standard number of lines per page in COBOL?
3. How do you control top and bottom margins in COBOL?
4. What should page headers typically include?
5. How do you center text in a COBOL report line?
6. When should you trigger a page break?