private void breakPage(PDDocument document, PrintCursor cursor, PrintData printData)
      throws IOException {
    if (cursor.currentStream != null) {
      cursor.currentStream.close();
    }

    if (printData.templateResource == null) {
      document.addPage(new PDPage(printData.pageConfig.getPageSize()));
    } else {
      PDDocument templateDoc = PDDocument.load(printData.templateResource.getInputStream());
      cursor.cacheTempalte(templateDoc);
      PDPage templatePage = templateDoc.getDocumentCatalog().getPages().get(0);
      document.importPage(templatePage);
    }
    PDPage currPage = document.getDocumentCatalog().getPages().get(++cursor.currentPageNumber);
    cursor.currentStream =
        new PDPageContentStream(document, currPage, PDPageContentStream.AppendMode.APPEND, false);
    cursor.yPos = printData.pageConfig.getStartY(cursor.currentPageNumber);
    cursor.xPos = printData.pageConfig.getStartX();
  }