557
|
1 package digilib.pdf;
|
509
|
2
|
594
|
3 import java.io.File;
|
509
|
4 import java.io.IOException;
|
|
5 import java.net.MalformedURLException;
|
|
6 import java.net.URL;
|
|
7
|
|
8 import org.apache.log4j.Logger;
|
|
9
|
526
|
10 import com.itextpdf.text.Anchor;
|
|
11 import com.itextpdf.text.BadElementException;
|
|
12 import com.itextpdf.text.Chunk;
|
|
13 import com.itextpdf.text.Element;
|
|
14 import com.itextpdf.text.FontFactory;
|
|
15 import com.itextpdf.text.Image;
|
|
16 import com.itextpdf.text.Paragraph;
|
|
17
|
594
|
18 import digilib.io.FileOpException;
|
557
|
19 import digilib.servlet.PDFCache;
|
|
20 import digilib.servlet.PDFRequest;
|
509
|
21
|
|
22 /** A class for the generation of title pages for the generated pdf documents.
|
|
23 *
|
|
24 *
|
|
25 */
|
|
26 public class PDFTitlePage {
|
|
27
|
557
|
28 private PDFRequest job_info = null;
|
509
|
29 private DigilibInfoReader info_reader= null;
|
|
30 protected static Logger logger = Logger.getLogger("digilib.servlet");
|
|
31
|
|
32
|
511
|
33 /**
|
|
34 * Initialize a TitlePage
|
|
35 * @param pdfji
|
|
36 */
|
557
|
37 public PDFTitlePage(PDFRequest pdfji){
|
509
|
38 job_info = pdfji;
|
594
|
39
|
|
40 // use MPIWG-style info.xml
|
|
41 info_reader = getInfoXmlReader(pdfji);
|
|
42 }
|
509
|
43
|
594
|
44 /**
|
|
45 * @param pdfji
|
|
46 * @return
|
|
47 */
|
|
48 protected DigilibInfoReader getInfoXmlReader(PDFRequest pdfji) {
|
|
49 try {
|
|
50 // try to load ../presentation/info.xml
|
|
51 File imgDir = pdfji.getImageJobInformation().getFileDirectory().getDir();
|
|
52 File docDir = imgDir.getParentFile();
|
|
53 File infoFn = new File(new File(docDir, "presentation"), "info.xml");
|
|
54 return new DigilibInfoReader(infoFn.getAbsolutePath());
|
|
55 } catch (FileOpException e) {
|
|
56 logger.warn("info.xml not found");
|
|
57 }
|
|
58 return null;
|
|
59 }
|
509
|
60
|
511
|
61 /**
|
|
62 * generate iText-PDF-Contents for the title page
|
|
63 *
|
|
64 * @return
|
|
65 */
|
509
|
66 public Element getPageContents(){
|
|
67 Paragraph content = new Paragraph();
|
|
68 content.setAlignment(Element.ALIGN_CENTER);
|
|
69
|
|
70 // add vertical whitespace
|
|
71 for(int i=0; i<8; i++){
|
|
72 content.add(Chunk.NEWLINE);
|
|
73 }
|
|
74
|
|
75 // add logo
|
|
76 content.add(getLogo());
|
|
77 content.add(Chunk.NEWLINE);
|
|
78 content.add(Chunk.NEWLINE);
|
|
79
|
|
80 // add title
|
|
81 Anchor title = new Anchor(new Paragraph(getTitle(),FontFactory.getFont(FontFactory.HELVETICA,16)));
|
|
82 String burl = job_info.getImageJobInformation().getAsString("base.url");
|
|
83
|
|
84 title.setReference(burl+"digilib.jsp?fn="+job_info.getImageJobInformation().getAsString("fn"));
|
|
85 content.add(title);
|
|
86 content.add(Chunk.NEWLINE);
|
|
87
|
|
88 // add author
|
|
89 if(getDate()!=" ")
|
|
90 content.add(new Paragraph(getAuthor()+" ("+getDate()+")",FontFactory.getFont(FontFactory.HELVETICA,14)));
|
|
91 else
|
|
92 content.add(new Paragraph(getAuthor(),FontFactory.getFont(FontFactory.HELVETICA,14)));
|
|
93
|
|
94 content.add(Chunk.NEWLINE);
|
|
95
|
|
96 // add page numbers
|
|
97 content.add(new Paragraph(getPages(), FontFactory.getFont(FontFactory.HELVETICA, 12)));
|
|
98
|
|
99
|
|
100 content.add(Chunk.NEWLINE);
|
|
101 content.add(Chunk.NEWLINE);
|
|
102 content.add(Chunk.NEWLINE);
|
|
103
|
|
104 // add digilib version
|
|
105 content.add(new Paragraph(getDigilibVersion(),FontFactory.getFont(FontFactory.HELVETICA,10)));
|
|
106
|
|
107 for(int i=0; i<8; i++){
|
|
108 content.add(Chunk.NEWLINE);
|
|
109 }
|
|
110 Anchor address = new Anchor(
|
|
111 new Paragraph(burl+"digilib.jsp?fn="+job_info.getImageJobInformation().getAsString("fn"), FontFactory.getFont(FontFactory.COURIER, 9))
|
|
112 );
|
|
113 address.setReference(burl+"digilib.jsp?fn="+job_info.getImageJobInformation().getAsString("fn"));
|
|
114
|
|
115 content.add(address);
|
|
116
|
|
117
|
|
118 return content;
|
|
119 }
|
|
120
|
594
|
121 /*
|
511
|
122 * Methods for the different attributes.
|
|
123 *
|
|
124 */
|
|
125
|
509
|
126 private Image getLogo(){
|
|
127 try {
|
|
128 URL url = new URL(job_info.getDlConfig().getAsString("pdf-logo"));
|
|
129 if(url!=null && !url.equals("")){
|
|
130 Image logo = Image.getInstance(url);
|
|
131 logo.setAlignment(Element.ALIGN_CENTER);
|
|
132 return logo;
|
|
133 }
|
|
134 } catch (BadElementException e) {
|
|
135 logger.error(e.getMessage());
|
|
136 } catch (MalformedURLException e) {
|
|
137 logger.error(e.getMessage());
|
|
138 } catch (IOException e) {
|
|
139 logger.error(e.getMessage());
|
|
140 }
|
|
141 return null;
|
|
142 }
|
594
|
143
|
509
|
144 private String getTitle(){
|
|
145 if(info_reader.hasInfo())
|
|
146 return info_reader.getAsString("title");
|
|
147 else
|
|
148 return job_info.getImageJobInformation().getAsString("fn");
|
|
149 }
|
594
|
150
|
509
|
151 private String getAuthor(){
|
|
152 if(info_reader.hasInfo())
|
|
153 return info_reader.getAsString("author");
|
|
154 else
|
|
155 return " ";
|
|
156 }
|
594
|
157
|
509
|
158 private String getDate(){
|
|
159 if(info_reader.hasInfo())
|
|
160 return info_reader.getAsString("date");
|
|
161 else
|
|
162 return " ";
|
|
163 }
|
594
|
164
|
509
|
165 private String getPages(){
|
|
166 return "Pages "+job_info.getAsString("pgs") + " (scan page numbers)";
|
|
167 }
|
|
168
|
|
169 private String getDigilibVersion(){
|
557
|
170 return "Digilib PDFMaker v."+PDFCache.version;
|
509
|
171 }
|
|
172
|
|
173 }
|