{{header}}
{{object 1 0}} <<
  /Type /Catalog
  /Pages 2 0 R
  /OpenAction 10 0 R
>>
endobj
{{object 2 0}} <<
  /Type /Pages
  /Count 4
  /Kids [
    3 0 R
    4 0 R
    5 0 R
    6 0 R
  ]
>>
endobj
% Page number 0.
{{object 3 0}} <<
  /Type /Page
  /Parent 2 0 R
  /Resources <<
    /Font <</F1 15 0 R>>
  >>
  /MediaBox [0 0 612 792]
>>
endobj
% Page number 1.
{{object 4 0}} <<
  /Type /Page
  /Parent 2 0 R
  /Resources <<
    /Font <</F1 15 0 R>>
  >>
  /MediaBox [0 0 612 792]
>>
endobj
% Page number 2.
{{object 5 0}} <<
  /Type /Page
  /Parent 2 0 R
  /Resources <<
    /Font <</F1 15 0 R>>
  >>
  /MediaBox [0 0 612 792]
>>
endobj
% Page number 3.
{{object 6 0}} <<
  /Type /Page
  /Parent 2 0 R
  /Resources <<
    /Font <</F1 15 0 R>>
  >>
  /MediaBox [0 0 612 792]
>>
endobj

% Info
{{object 9 0}} <<
  /Author (Joe Random Author)
  /Creator (Joe Random Creator)
>>
endobj
% OpenAction action
{{object 10 0}} <<
  /Type /Action
  /S /JavaScript
  /JS 11 0 R
>>
endobj
% JS program to execute
{{object 11 0}} <<
  {{streamlen}}
>>
stream
var document_props = [
  'ADBE',
  'author',
  'baseURL',
  'bookmarkRoot',
  'calculate',
  'Collab',
  'creationDate',
  'creator',
  'delay',
  'dirty',
  'documentFileName',
  'external',
  'filesize',
  'icons',
  'info',
  'keywords',
  'layout',
  'media',
  'modDate',
  'mouseX',
  'mouseY',
  'numFields',
  'numPages',
  'pageNum',
  'pageWindowRect',
  'path',
  'producer',
  'subject',
  'title',
  'URL',
  'zoom',
  'zoomType',
];

function testGetProps(props) {
  app.alert('*** Getting properties ***');
  for (var i = 0; i < props.length; ++i) {
    try {
      var expr1 = "this." + props[i];
      var expr2 = "typeof " + expr1;
      app.alert(expr1 + " is " + eval(expr2) + ' ' + eval(expr1));
    } catch (e) {
      app.alert("ERROR: " + e.toString());
    }
  }
}

function testSetProps(props, value) {
  app.alert('*** Setting properties to ' + value + ' ***');
  for (var i = 0; i < props.length; ++i) {
    try {
      var expr1 = "this." + props[i] + ' = ' + value + ';'
      app.alert(expr1 + " yields " + eval(expr1));
    } catch (e) {
      app.alert("ERROR: " + e.toString());
    }
  }
}

testGetProps(document_props);
testSetProps(document_props, 'true');
testSetProps(document_props, 'false');
testSetProps(document_props, '["red", 0, "blue", 42]');
testSetProps(document_props, '{"red": 0, "blue": 42}');
testSetProps(document_props, '"red"');
testSetProps(document_props, '3');
testGetProps(document_props);
endstream
endobj
{{xref}}
trailer <<
  /Root 1 0 R
  /Info 9 0 R
>>
{{startxref}}
%%EOF
