text: /*
  PDFPage - represents a single page in the PDF document
  By Devon Govett
  */
  
  const DEFAULT_MARGINS = { 
    top: 72,
    left: 72,
    bottom: 72,
    right: 72
  };
  
  const SIZES = {
    '4A0': [4767.87, 6740.79],
    '2A0': [3370.39, 4767.87],
    A0: [2383.94, 3370.39],
    A1: [1683.78, 2383.94],
    A2: [1190.55, 1683.78],
    A3: [841.89, 1190.55],
    A4: [595.28, 841.89],
    A5: [419.53, 595.28],
    A6: [297.64, 419.53],
    A7: [209.76, 297.64],
    A8: [147.40, 209.76],
    A9: [104.88, 147.40],
    A10: [73.70, 104.88],
    B0: [2834.65, 4008.19],
    B1: [2004.09, 2834.65],
    B2: [1417.32, 2004.09],
    B3: [1000.63, 1417.32],
    B4: [708.66, 1000.63],
    B5: [498.90, 708.66],
    B6: [354.33, 498.90],
    B7: [249.45, 354.33],
    B8: [175.75, 249.45],
    B9: [124.72, 175.75],
    B10: [87.87, 124.72],
    C0: [2599.37, 3676.54],
    C1: [1836.85, 2599.37],
    C2: [1298.27, 1836.85],
    C3: [918.43, 1298.27],
    C4: [649.13, 918.43],
    C5: [459.21, 649.13],
    C6: [323.15, 459.21],
    C7: [229.61, 323.15],
    C8: [161.57, 229.61],
    C9: [113.39, 161.57],
    C10: [79.37, 113.39],
    RA0: [2437.80, 3458.27],
    RA1: [1729.13, 2437.80],
    RA2: [1218.90, 1729.13],
    RA3: [864.57, 1218.90],
    RA4: [609.45, 864.57],
    SRA0: [2551.18, 3628.35],
    SRA1: [1814.17, 2551.18],
    SRA2: [1275.59, 1814.17],
    SRA3: [907.09, 1275.59],
    SRA4: [637.80, 907.09],
    EXECUTIVE: [521.86, 756.00],
    FOLIO: [612.00, 936.00],
    LEGAL: [612.00, 1008.00],
    LETTER: [612.00, 792.00],
    TABLOID: [792.00, 1224.00]
  };
  
  class PDFPage {
    constructor(document, options) {
      this.document = document;
      if (options == null) { options = {}; }
      this.size = options.size || 'letter';
      this.layout = options.layout || 'portrait';
    
      // process margins
      if (typeof options.margin === 'number') {
        this.margins = { 
          top: options.margin,
          left: options.margin,
          bottom: options.margin,
          right: options.margin
        };
    
      // default to 1 inch margins
      } else {
        this.margins = options.margins || DEFAULT_MARGINS;
      }
      
      // calculate page dimensions
      const dimensions = Array.isArray(this.size) ? this.size : SIZES[this.size.toUpperCase()];
      this.width = dimensions[this.layout === 'portrait' ? 0 : 1];
      this.height = dimensions[this.layout === 'portrait' ? 1 : 0];
    
      this.content = this.document.ref();
    
      // Initialize the Font, XObject, and ExtGState dictionaries
      this.resources = this.document.ref({
        ProcSet: ['PDF', 'Text', 'ImageB', 'ImageC', 'ImageI']});
    
      // The page dictionary
      this.dictionary = this.document.ref({
        Type: 'Page',
        Parent: this.document._root.data.Pages,
        MediaBox: [0, 0, this.width, this.height],
        Contents: this.content,
        Resources: this.resources
      });
    }
  
    // Lazily create these dictionaries
    get fonts() {
      const data = this.resources.data;
      return data.Font != null ? data.Font : (data.Font = {});
    }
  
    get xobjects() {
      const data = this.resources.data;
      return data.XObject != null ? data.XObject : (data.XObject = {});
    }
  
    get ext_gstates() {
      const data = this.resources.data;
      return data.ExtGState != null ? data.ExtGState : (data.ExtGState = {});
    }
  
    get patterns() {
      const data = this.resources.data;
      return data.Pattern != null ? data.Pattern : (data.Pattern = {});
    }
  
    get annotations() {
      const data = this.dictionary.data;
      return data.Annots != null ? data.Annots : (data.Annots = []);
    }
      
    maxY() {
      return this.height - this.margins.bottom;
    }
        
    write(chunk) {
      return this.content.write(chunk);
    }
  
    end() {
      this.dictionary.end();
      this.resources.end();
      return this.content.end();
    }
  };
    
  export default PDFPage;