public static void step(Page page, int step) {

		StyledDocument doc = page.getStyledDocument();
		AbstractDocument.BranchElement section = (AbstractDocument.BranchElement) doc.getDefaultRootElement();

		if (step < 0 && isSmallest(section))
			return;

		Enumeration enum1 = section.children();
		AbstractDocument.BranchElement paragraph = null;
		AbstractDocument.LeafElement content = null;
		Enumeration enum2 = null, enum3 = null;
		Object name = null, attr = null;
		int fontSize = 0;
		boolean fontSizeSet = false;
		MutableAttributeSet mas = null;

		while (enum1.hasMoreElements()) {

			paragraph = (AbstractDocument.BranchElement) enum1.nextElement();
			enum2 = paragraph.children();

			while (enum2.hasMoreElements()) {

				content = (AbstractDocument.LeafElement) enum2.nextElement();
				enum3 = content.getAttributeNames();
				mas = new SimpleAttributeSet(content.getAttributes());

				fontSizeSet = false;

				while (enum3.hasMoreElements()) {

					name = enum3.nextElement();
					attr = content.getAttribute(name);

					if (name.toString().equals(StyleConstants.FontSize.toString())) {
						fontSize = ((Integer) attr).intValue() + step;
						if (fontSize < 8)
							fontSize = 8;
						StyleConstants.setFontSize(mas, fontSize);
						doc.setCharacterAttributes(content.getStartOffset(), content.getEndOffset()
								- content.getStartOffset(), mas, false);
						fontSizeSet = true;
					}

				}

				/* if font size of this content element is not set, it takes the default value 12. */
				if (!fontSizeSet) {
					fontSize = 12 + step;
					if (fontSize < 8)
						fontSize = 8;
					StyleConstants.setFontSize(mas, fontSize);
					doc.setCharacterAttributes(content.getStartOffset(), content.getEndOffset()
							- content.getStartOffset(), mas, false);
				}

			}

		}

		page.setFontIncrement(page.getFontIncrement() + step);

	}