1 /* 2 * $Id$ 3 * 4 * Copyright 2003, 2004 by Mark Hall 5 * 6 * The contents of this file are subject to the Mozilla Public License Version 1.1 7 * (the "License"); you may not use this file except in compliance with the License. 8 * You may obtain a copy of the License at http://www.mozilla.org/MPL/ 9 * 10 * Software distributed under the License is distributed on an "AS IS" basis, 11 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License 12 * for the specific language governing rights and limitations under the License. 13 * 14 * The Original Code is 'iText, a free JAVA-PDF library'. 15 * 16 * The Initial Developer of the Original Code is Bruno Lowagie. Portions created by 17 * the Initial Developer are Copyright (C) 1999, 2000, 2001, 2002 by Bruno Lowagie. 18 * All Rights Reserved. 19 * Co-Developer of the code is Paulo Soares. Portions created by the Co-Developer 20 * are Copyright (C) 2000, 2001, 2002 by Paulo Soares. All Rights Reserved. 21 * 22 * Contributor(s): all the names of the contributors are added in the source code 23 * where applicable. 24 * 25 * Alternatively, the contents of this file may be used under the terms of the 26 * LGPL license (the "GNU LIBRARY GENERAL PUBLIC LICENSE"), in which case the 27 * provisions of LGPL are applicable instead of those above. If you wish to 28 * allow use of your version of this file only under the terms of the LGPL 29 * License and not to allow others to use your version of this file under 30 * the MPL, indicate your decision by deleting the provisions above and 31 * replace them with the notice and other provisions required by the LGPL. 32 * If you do not delete the provisions above, a recipient may use your version 33 * of this file under either the MPL or the GNU LIBRARY GENERAL PUBLIC LICENSE. 34 * 35 * This library is free software; you can redistribute it and/or modify it 36 * under the terms of the MPL as stated above or under the terms of the GNU 37 * Library General Public License as published by the Free Software Foundation; 38 * either version 2 of the License, or any later version. 39 * 40 * This library is distributed in the hope that it will be useful, but WITHOUT 41 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 42 * FOR A PARTICULAR PURPOSE. See the GNU Library general Public License for more 43 * details. 44 * 45 * If you didn't download this code from the following link, you should check if 46 * you aren't using an obsolete version: 47 * http://www.lowagie.com/iText/ 48 */ 49 50 package com.lowagie.text.rtf.document; 51 52 import java.io.IOException; 53 import java.io.OutputStream; 54 import java.text.ParseException; 55 import java.text.SimpleDateFormat; 56 import java.util.Date; 57 58 import com.lowagie.text.DocWriter; 59 import com.lowagie.text.Meta; 60 import com.lowagie.text.rtf.RtfElement; 61 62 63 /** 64 * Stores one information group element. Valid elements are 65 * author, title, subject, keywords, producer and creationdate. 66 * 67 * @version $Id$ 68 * @author Mark Hall (Mark.Hall@mail.room3b.eu) 69 * @author Thomas Bickel (tmb99@inode.at) 70 */ 71 public class RtfInfoElement extends RtfElement { 72 73 /** 74 * Constant for the author element 75 */ 76 private static final byte[] INFO_AUTHOR = DocWriter.getISOBytes("\\author"); 77 /** 78 * Constant for the subject element 79 */ 80 private static final byte[] INFO_SUBJECT = DocWriter.getISOBytes("\\subject"); 81 /** 82 * Constant for the keywords element 83 */ 84 private static final byte[] INFO_KEYWORDS = DocWriter.getISOBytes("\\keywords"); 85 /** 86 * Constant for the title element 87 */ 88 private static final byte[] INFO_TITLE = DocWriter.getISOBytes("\\title"); 89 /** 90 * Constant for the producer element 91 */ 92 private static final byte[] INFO_PRODUCER = DocWriter.getISOBytes("\\operator"); 93 /** 94 * Constant for the creationdate element 95 */ 96 private static final byte[] INFO_CREATION_DATE =DocWriter.getISOBytes( "\\creationdate"); 97 98 /** 99 * The type of this RtfInfoElement. The values from Element.INFO_ELEMENT_NAME are used. 100 */ 101 private int infoType = -1; 102 /** 103 * The content of this RtfInfoElement 104 */ 105 private String content = ""; 106 107 /** 108 * Constructs a RtfInfoElement based on the given Meta object 109 * 110 * @param doc The RtfDocument this RtfInfoElement belongs to 111 * @param meta The Meta object this RtfInfoElement is based on 112 */ RtfInfoElement(RtfDocument doc, Meta meta)113 public RtfInfoElement(RtfDocument doc, Meta meta) { 114 super(doc); 115 infoType = meta.type(); 116 content = meta.getContent(); 117 } 118 119 /** 120 * Writes the content of one RTF information element. 121 */ writeContent(final OutputStream result)122 public void writeContent(final OutputStream result) throws IOException 123 { 124 result.write(OPEN_GROUP); 125 switch(infoType) { 126 case Meta.AUTHOR: 127 result.write(INFO_AUTHOR); 128 break; 129 case Meta.SUBJECT: 130 result.write(INFO_SUBJECT); 131 break; 132 case Meta.KEYWORDS: 133 result.write(INFO_KEYWORDS); 134 break; 135 case Meta.TITLE: 136 result.write(INFO_TITLE); 137 break; 138 case Meta.PRODUCER: 139 result.write(INFO_PRODUCER); 140 break; 141 case Meta.CREATIONDATE: 142 result.write(INFO_CREATION_DATE); 143 break; 144 default: 145 result.write(INFO_AUTHOR); 146 break; 147 } 148 result.write(DELIMITER); 149 if(infoType == Meta.CREATIONDATE) { 150 result.write(DocWriter.getISOBytes(convertDate(content))); 151 } else { 152 document.filterSpecialChar(result, content, false, false); 153 } 154 result.write(CLOSE_GROUP); 155 } 156 157 /** 158 * Converts a date from the format used by iText to the format required by 159 * rtf.<br>iText: EEE MMM dd HH:mm:ss zzz yyyy - rtf: \\'yr'yyyy\\'mo'MM\\'dy'dd\\'hr'HH\\'min'mm\\'sec'ss 160 * 161 * @param date The date formated by iText 162 * @return The date formated for rtf 163 */ convertDate(String date)164 private String convertDate(String date) { 165 SimpleDateFormat sdf = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy"); 166 try { 167 Date creationDate = sdf.parse(date); 168 sdf = new SimpleDateFormat("\\'yr'yyyy\\'mo'MM\\'dy'dd\\'hr'HH\\'min'mm\\'sec'ss"); 169 return sdf.format(creationDate); 170 } catch(ParseException pe) { 171 pe.printStackTrace(); 172 return ""; 173 } 174 } 175 } 176