Mercurial > hg > digilib-old
diff servlet/src/digilib/pdf/PDFTitlePage.java @ 557:0885f5ca5b24 digilibPDF
more refactoring and rearranging
pdf and image generation works now
author | robcast |
---|---|
date | Thu, 16 Dec 2010 21:19:11 +0100 |
parents | servlet/src/digilib/servlet/PDFTitlePage.java@bc9196347188 |
children | 95417c4615b8 85e465e6a642 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/servlet/src/digilib/pdf/PDFTitlePage.java Thu Dec 16 21:19:11 2010 +0100 @@ -0,0 +1,184 @@ +package digilib.pdf; + +import java.io.IOException; +import java.net.MalformedURLException; +import java.net.URL; + +import org.apache.log4j.Logger; + +import com.itextpdf.text.Anchor; +import com.itextpdf.text.BadElementException; +import com.itextpdf.text.Chunk; +import com.itextpdf.text.Element; +import com.itextpdf.text.FontFactory; +import com.itextpdf.text.Image; +import com.itextpdf.text.Paragraph; + + +import digilib.io.DigilibInfoReader; +import digilib.io.DocuDirCache; +import digilib.servlet.PDFCache; +import digilib.servlet.PDFRequest; + +/** A class for the generation of title pages for the generated pdf documents. + * + * + */ +public class PDFTitlePage { + + private PDFRequest job_info = null; + private DigilibInfoReader info_reader= null; + private DocuDirCache dirCache = null; + protected static Logger logger = Logger.getLogger("digilib.servlet"); + + + /** + * Initialize a TitlePage + * @param pdfji + */ + public PDFTitlePage(PDFRequest pdfji){ + job_info = pdfji; + dirCache = (DocuDirCache) job_info.getDlConfig().getValue("servlet.dir.cache"); + + String fn = getBase(dirCache.getDirectory(pdfji.getImageJobInformation().getAsString("fn")).getDir().getPath()) + "presentation/info.xml"; + + info_reader = new DigilibInfoReader(fn); + } + + /** + * generate iText-PDF-Contents for the title page + * + * @return + */ + public Element getPageContents(){ + Paragraph content = new Paragraph(); + content.setAlignment(Element.ALIGN_CENTER); + + // add vertical whitespace + for(int i=0; i<8; i++){ + content.add(Chunk.NEWLINE); + } + + + // add logo + content.add(getLogo()); + content.add(Chunk.NEWLINE); + content.add(Chunk.NEWLINE); + + // add title + Anchor title = new Anchor(new Paragraph(getTitle(),FontFactory.getFont(FontFactory.HELVETICA,16))); + String burl = job_info.getImageJobInformation().getAsString("base.url"); + + title.setReference(burl+"digilib.jsp?fn="+job_info.getImageJobInformation().getAsString("fn")); + content.add(title); + content.add(Chunk.NEWLINE); + + // add author + if(getDate()!=" ") + content.add(new Paragraph(getAuthor()+" ("+getDate()+")",FontFactory.getFont(FontFactory.HELVETICA,14))); + else + content.add(new Paragraph(getAuthor(),FontFactory.getFont(FontFactory.HELVETICA,14))); + + content.add(Chunk.NEWLINE); + + // add page numbers + content.add(new Paragraph(getPages(), FontFactory.getFont(FontFactory.HELVETICA, 12))); + + + content.add(Chunk.NEWLINE); + content.add(Chunk.NEWLINE); + content.add(Chunk.NEWLINE); + + // add credits + content.add(new Paragraph("MPIWG Berlin 2009", FontFactory.getFont(FontFactory.HELVETICA,10))); + + // add digilib version + content.add(new Paragraph(getDigilibVersion(),FontFactory.getFont(FontFactory.HELVETICA,10))); + + for(int i=0; i<8; i++){ + content.add(Chunk.NEWLINE); + } + Anchor address = new Anchor( + new Paragraph(burl+"digilib.jsp?fn="+job_info.getImageJobInformation().getAsString("fn"), FontFactory.getFont(FontFactory.COURIER, 9)) + ); + address.setReference(burl+"digilib.jsp?fn="+job_info.getImageJobInformation().getAsString("fn")); + + content.add(address); + + + return content; + } + + /** + * return base directory of an image directory + * + * @param path + * @return + */ + private String getBase(String path){ + if(path.contains("/")){ + String[] x = path.split("/"); + String newpath = ""; + for(int i=0; i<x.length-1; i++){ + newpath += x[i]+"/"; + } + return newpath; + } + else + return ""; + } + + + /** + * Methods for the different attributes. + * + */ + + + private Image getLogo(){ + try { + URL url = new URL(job_info.getDlConfig().getAsString("pdf-logo")); + if(url!=null && !url.equals("")){ + Image logo = Image.getInstance(url); + logo.setAlignment(Element.ALIGN_CENTER); + return logo; + } + } catch (BadElementException e) { + logger.error(e.getMessage()); + e.printStackTrace(); + } catch (MalformedURLException e) { + logger.error(e.getMessage()); + e.printStackTrace(); + } catch (IOException e) { + logger.error(e.getMessage()); + e.printStackTrace(); + } + return null; + } + private String getTitle(){ + if(info_reader.hasInfo()) + return info_reader.getAsString("title"); + else + return job_info.getImageJobInformation().getAsString("fn"); + } + private String getAuthor(){ + if(info_reader.hasInfo()) + return info_reader.getAsString("author"); + else + return " "; + } + private String getDate(){ + if(info_reader.hasInfo()) + return info_reader.getAsString("date"); + else + return " "; + } + private String getPages(){ + return "Pages "+job_info.getAsString("pgs") + " (scan page numbers)"; + } + + private String getDigilibVersion(){ + return "Digilib PDFMaker v."+PDFCache.version; + } + +}