?? document.java
字號:
/* * $Id: Document.java,v 1.42 2002/11/19 08:58:02 blowagie Exp $ * $Name: $ * * Copyright 1999, 2000, 2001, 2002 by Bruno Lowagie. * * The contents of this file are subject to the Mozilla Public License Version 1.1 * (the "License"); you may not use this file except in compliance with the License. * You may obtain a copy of the License at http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" basis, * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License * for the specific language governing rights and limitations under the License. * * The Original Code is 'iText, a free JAVA-PDF library'. * * The Initial Developer of the Original Code is Bruno Lowagie. Portions created by * the Initial Developer are Copyright (C) 1999, 2000, 2001, 2002 by Bruno Lowagie. * All Rights Reserved. * Co-Developer of the code is Paulo Soares. Portions created by the Co-Developer * are Copyright (C) 2000, 2001, 2002 by Paulo Soares. All Rights Reserved. * * Contributor(s): all the names of the contributors are added in the source code * where applicable. * * Alternatively, the contents of this file may be used under the terms of the * LGPL license (the "GNU LIBRARY GENERAL PUBLIC LICENSE"), in which case the * provisions of LGPL are applicable instead of those above. If you wish to * allow use of your version of this file only under the terms of the LGPL * License and not to allow others to use your version of this file under * the MPL, indicate your decision by deleting the provisions above and * replace them with the notice and other provisions required by the LGPL. * If you do not delete the provisions above, a recipient may use your version * of this file under either the MPL or the GNU LIBRARY GENERAL PUBLIC LICENSE. * * This library is free software; you can redistribute it and/or modify it * under the terms of the MPL as stated above or under the terms of the GNU * Library General Public License as published by the Free Software Foundation; * either version 2 of the License, or any later version. * * This library is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Library general Public License for more * details. * * If you didn't download this code from the following link, you should check if * you aren't using an obsolete version: * http://www.lowagie.com/iText/ */package com.lowagie.text;import java.util.ArrayList;import java.util.Iterator;import java.util.Date;/** * A generic Document class. * <P> * All kinds of Text-elements can be added to a <CODE>HTMLDocument</CODE>. * The <CODE>Document</CODE> signals all the listeners when an element * has been added. * <P> * Remark: * <OL> * <LI>Once a document is created you can add some meta information. * <LI>You can also set the headers/footers. * <LI>You have to open the document before you can write content. * <LI>You can only write content (no more meta-formation!) once a document is opened. * <LI>When you change the header/footer on a certain page, this will be effective starting on the next page. * <LI>Ater closing the document, every listener (as well as its <CODE>OutputStream</CODE>) is closed too. * </OL> * Example: * <BLOCKQUOTE><PRE> * // creation of the document with a certain size and certain margins * <STRONG>Document document = new Document(PageSize.A4, 50, 50, 50, 50);</STRONG> * try { * // creation of the different writers * HtmlWriter.getInstance(<STRONG>document</STRONG>, System.out); * PdfWriter.getInstance(<STRONG>document</STRONG>, new FileOutputStream("text.pdf")); * * // we add some meta information to the document * <STRONG>document.addAuthor("Bruno Lowagie");</STRONG> * <STRONG>document.addSubject("This is the result of a Test.");</STRONG> * * // we define a header and a footer * HeaderFooter header = new HeaderFooter(new Phrase("This is a header."), false); * HeaderFooter footer = new HeaderFooter(new Phrase("This is page "), new Phrase(".")); * footer.setAlignment(Element.ALIGN_CENTER); * <STRONG>document.setHeader(header);</STRONG> * <STRONG>document.setFooter(footer);</STRONG> * // we open the document for writing * <STRONG>document.open();</STRONG> * <STRONG>document.add(new Paragraph("Hello world"));</STRONG> * } * catch(DocumentException de) { * System.err.println(de.getMessage()); * } * <STRONG>document.close();</CODE> * </PRE></BLOCKQUOTE> */public class Document implements DocListener { // membervariables/** This constant may only be changed by Paulo Soares and/or Bruno Lowagie. */ private static final String ITEXT_VERSION = "iText by lowagie.com (r0.96 - p106)";/** Allows the pdf documents to be produced without compression for debugging purposes. */ public static boolean compress = true;/** The DocListener. */ private ArrayList listeners = new ArrayList();/** Is the document open or not? */ protected boolean open;/** Has the document already been closed? */ protected boolean close; // membervariables concerning the layout/** The size of the page. */ protected Rectangle pageSize;/** The watermark on the pages. */ protected Watermark watermark = null;/** margin in x direction starting from the left */ protected float marginLeft = 0;/** margin in x direction starting from the right */ protected float marginRight = 0;/** margin in y direction starting from the top */ protected float marginTop = 0;/** margin in y direction starting from the bottom */ protected float marginBottom = 0;/** Content of JavaScript onLoad function */ protected String javaScript_onLoad = null;/** Content of JavaScript onUnLoad function */ protected String javaScript_onUnLoad = null;/** Style class in HTML body tag */ protected String htmlStyleClass = null; // headers, footers/** Current pagenumber */ protected int pageN = 0;/** This is the textual part of a Page; it can contain a header */ protected HeaderFooter header = null;/** This is the textual part of the footer */ protected HeaderFooter footer = null; // constructor/** * Constructs a new <CODE>Document</CODE>-object. */ public Document() { this(PageSize.A4); }/** * Constructs a new <CODE>Document</CODE>-object. * * @param pageSize the pageSize */ public Document(Rectangle pageSize) { this(pageSize, 36, 36, 36, 36); }/** * Constructs a new <CODE>Document</CODE>-object. * * @param pageSize the pageSize * @param marginLeft the margin on the left * @param marginRight the margin on the right * @param marginTop the margin on the top * @param marginBottom the margin on the bottom */ public Document(Rectangle pageSize, float marginLeft, float marginRight, float marginTop, float marginBottom) { this.pageSize = pageSize; this.marginLeft = marginLeft; this.marginRight = marginRight; this.marginTop = marginTop; this.marginBottom = marginBottom; } // listener methods/** * Adds a <CODE>DocListener</CODE> to the <CODE>Document</CODE>. * * @param listener the new DocListener. */ public void addDocListener(DocListener listener) { listeners.add(listener); }/** * Removes a <CODE>DocListener</CODE> from the <CODE>Document</CODE>. * * @param listener the DocListener that has to be removed. */ public void removeDocListener(DocListener listener) { listeners.remove(listener); } // methods implementing the DocListener interface/** Adds an <CODE>Element</CODE> to the <CODE>Document</CODE>. * * @param element the <CODE>Element</CODE> to add * @return <CODE>true</CODE> if the element was added, <CODE>false</CODE> if not * @throws DocumentException when a document isn't open yet, or has been closed */ public boolean add(Element element) throws DocumentException { if (close) { throw new DocumentException("The document has been closed. You can't add any Elements."); } int type = element.type(); if (open) { if (! (type == Element.CHUNK || type == Element.PHRASE || type == Element.PARAGRAPH || type == Element.TABLE || type == Element.PTABLE || type == Element.ANCHOR || type == Element.ANNOTATION || type == Element.CHAPTER || type == Element.SECTION || type == Element.LIST || type == Element.LISTITEM || type == Element.RECTANGLE || type == Element.PNG || type == Element.JPEG || type == Element.GIF || type == Element.IMGRAW || type == Element.IMGTEMPLATE || type == Element.GRAPHIC)) { throw new DocumentException("The document is open; you can only add Elements with content."); } } else { if (! (type == Element.HEADER || type == Element.TITLE || type == Element.SUBJECT || type == Element.KEYWORDS || type == Element.AUTHOR || type == Element.PRODUCER || type == Element.CREATOR || type == Element.CREATIONDATE)) { throw new DocumentException("The document is not open yet; you can only add Meta information."); } } boolean success = false; DocListener listener; for (Iterator iterator = listeners.iterator(); iterator.hasNext(); ) { listener = (DocListener) iterator.next(); success |= listener.add(element); } return success; }/** * Opens the document. * <P> * Once the document is opened, you can't write any Header- or Meta-information * anymore. You have to open the document before you can begin to add content * to the body of the document. */ public void open() { if (! close) { open = true; } DocListener listener; for (Iterator iterator = listeners.iterator(); iterator.hasNext(); ) { listener = (DocListener) iterator.next(); listener.setPageSize(pageSize); listener.setMargins(marginLeft, marginRight, marginTop, marginBottom); listener.open(); } }/** * Sets the pagesize. * * @param pageSize the new pagesize * @return a <CODE>boolean</CODE> */ public boolean setPageSize(Rectangle pageSize) { this.pageSize = pageSize; DocListener listener; for (Iterator iterator = listeners.iterator(); iterator.hasNext(); ) { listener = (DocListener) iterator.next(); listener.setPageSize(pageSize); } return true; }/** * Sets the <CODE>Watermark</CODE>. * * @param watermark the watermark to add * @return <CODE>true</CODE> if the element was added, <CODE>false</CODE> if not. */ public boolean add(Watermark watermark) { this.watermark = watermark; DocListener listener; for (Iterator iterator = listeners.iterator(); iterator.hasNext(); ) { listener = (DocListener) iterator.next(); listener.add(watermark); } return true; }/** * Removes the <CODE>Watermark</CODE>. */ public void removeWatermark() { this.watermark = null; DocListener listener; for (Iterator iterator = listeners.iterator(); iterator.hasNext(); ) { listener = (DocListener) iterator.next(); listener.removeWatermark(); } }/** * Sets the margins. * * @param marginLeft the margin on the left * @param marginRight the margin on the right * @param marginTop the margin on the top * @param marginBottom the margin on the bottom * @return a <CODE>boolean</CODE> */ public boolean setMargins(float marginLeft,float marginRight,float marginTop,float marginBottom) { this.marginLeft = marginLeft; this.marginRight = marginRight; this.marginTop = marginTop; this.marginBottom = marginBottom; DocListener listener; for (Iterator iterator = listeners.iterator(); iterator.hasNext(); ) { listener = (DocListener) iterator.next(); listener.setMargins(marginLeft, marginRight, marginTop, marginBottom); } return true; }/** * Signals that an new page has to be started. * * @return <CODE>true</CODE> if the page was added, <CODE>false</CODE> if not. * @throws DocumentException when a document isn't open yet, or has been closed */ public boolean newPage() throws DocumentException { if (!open || close) { return false; } DocListener listener; for (Iterator iterator = listeners.iterator(); iterator.hasNext(); ) { listener = (DocListener) iterator.next(); listener.newPage(); } return true; }/** * Changes the header of this document. * * @param header the new header */ public void setHeader(HeaderFooter header) { this.header = header; DocListener listener; for (Iterator iterator = listeners.iterator(); iterator.hasNext(); ) { listener = (DocListener) iterator.next(); listener.setHeader(header); } }/** * Resets the header of this document. */ public void resetHeader() { this.header = null; DocListener listener; for (Iterator iterator = listeners.iterator(); iterator.hasNext(); ) { listener = (DocListener) iterator.next(); listener.resetHeader(); } }/** * Changes the footer of this document. *
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -