--- src/java/org/apache/poi/hssf/record/aggregates/PageSettingsBlock.java (revision 1791876) +++ src/java/org/apache/poi/hssf/record/aggregates/PageSettingsBlock.java (working copy) @@ -401,6 +401,18 @@ } /** + * Returns the PrintSetupRecord, adding one if missing. + * @return PrintSetupRecord for the sheet. (never {@code null}) + */ + public PrintSetupRecord getOrCreatePrintSetup() + { + if (_printSetup == null) { + _printSetup = createPrintSetup(); + } + return _printSetup; + } + + /** * Sets the PrintSetupRecord. * @param newPrintSetup The new PrintSetupRecord for the sheet. */ --- src/java/org/apache/poi/hssf/usermodel/HSSFSheet.java (revision 1791876) +++ src/java/org/apache/poi/hssf/usermodel/HSSFSheet.java (working copy) @@ -1237,12 +1237,13 @@ /** * Gets the print setup object. + * Adds a Print Setup Record to the workbook if one is not present * * @return The user model for the print setup object. */ @Override public HSSFPrintSetup getPrintSetup() { - return new HSSFPrintSetup(_sheet.getPageSettings().getPrintSetup()); + return new HSSFPrintSetup(_sheet.getPageSettings().getOrCreatePrintSetup()); } @Override @@ -1300,6 +1301,8 @@ @Override public double getMargin(short margin) { switch (margin) { + // FIXME: should this getter return a default margin, -1, or raise an NPE if there is no PrintSetupRecord? + // should it create a print setup record if missing, and if so, return default margin or -1? case FooterMargin: return _sheet.getPageSettings().getPrintSetup().getFooterMargin(); case HeaderMargin: @@ -1319,10 +1322,10 @@ public void setMargin(short margin, double size) { switch (margin) { case FooterMargin: - _sheet.getPageSettings().getPrintSetup().setFooterMargin(size); + _sheet.getPageSettings().getOrCreatePrintSetup().setFooterMargin(size); break; case HeaderMargin: - _sheet.getPageSettings().getPrintSetup().setHeaderMargin(size); + _sheet.getPageSettings().getOrCreatePrintSetup().setHeaderMargin(size); break; default: _sheet.getPageSettings().setMargin(margin, size);