1. Cleaned up paths in the freemarker templates to not refer old visualization urls.

2. Changed web.xml url-pattern mapping from old visualization servlet TO freemarkerized version.
3. Updated style for temporal graph vis.
4. Changed freemarkerized code snippets to not refer old visualization servlets.
This commit is contained in:
cdtank 2011-01-12 17:18:16 +00:00
parent f84cc726ac
commit dea26c9527
8 changed files with 330 additions and 255 deletions

View file

@ -25,7 +25,7 @@ import edu.cornell.mannlib.vitro.webapp.visualization.freemarker.visutils.AllPro
import edu.cornell.mannlib.vitro.webapp.visualization.freemarker.visutils.GenericQueryRunner;
import edu.cornell.mannlib.vitro.webapp.visualization.freemarker.visutils.QueryRunner;
import edu.cornell.mannlib.vitro.webapp.visualization.freemarker.visutils.VisualizationRequestHandler;
import edu.cornell.mannlib.vitro.webapp.visualization.valueobjects.GenericQueryMap;
import edu.cornell.mannlib.vitro.webapp.visualization.freemarker.valueobjects.GenericQueryMap;
/**
* This request handler is used when you need helpful information to add more context

View file

@ -21,7 +21,7 @@ import com.hp.hpl.jena.rdf.model.RDFNode;
import edu.cornell.mannlib.vitro.webapp.visualization.constants.QueryConstants;
import edu.cornell.mannlib.vitro.webapp.visualization.constants.QueryFieldLabels;
import edu.cornell.mannlib.vitro.webapp.visualization.exceptions.MalformedQueryParametersException;
import edu.cornell.mannlib.vitro.webapp.visualization.valueobjects.GenericQueryMap;
import edu.cornell.mannlib.vitro.webapp.visualization.freemarker.valueobjects.GenericQueryMap;

View file

@ -0,0 +1,297 @@
/* $This file is distributed under the terms of the license in /doc/license.txt$ */
package edu.cornell.mannlib.vitro.webapp.visualization.freemarker.visutils;
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Stroke;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Map;
import java.util.Map.Entry;
import com.itextpdf.text.BadElementException;
import com.itextpdf.text.BaseColor;
import com.itextpdf.text.Chunk;
import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Element;
import com.itextpdf.text.Font;
import com.itextpdf.text.FontFactory;
import com.itextpdf.text.Image;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.Phrase;
import com.itextpdf.text.pdf.ColumnText;
import com.itextpdf.text.pdf.PdfContentByte;
import com.itextpdf.text.pdf.PdfGState;
import com.itextpdf.text.pdf.PdfPCell;
import com.itextpdf.text.pdf.PdfPTable;
import com.itextpdf.text.pdf.PdfWriter;
public class PDFDocument {
static Stroke stroke = new BasicStroke(5.f, BasicStroke.CAP_ROUND,
BasicStroke.JOIN_ROUND);
final static Color bg = Color.green;
final static Color fg = Color.black;
public PDFDocument(String authorName,
Map<String, Integer> yearToPublicationCount,
Document document,
PdfWriter pdfWriter) {
// setPreferredSize(new Dimension(600,400));
try {
document.addTitle("PDF Pipeline iText Prototype");
document.addAuthor(authorName);
document.addSubject("This example tests text, color, image, transparency & table functionality.");
document.addKeywords("text, color, image, transparency, table");
document.addCreator("Standalone PDF Renderer using iText");
Paragraph header = new Paragraph();
Font pageHeaderStyle = FontFactory.getFont(FontFactory.TIMES_ROMAN, 15, Font.BOLDITALIC | Font.UNDERLINE);
Font featureHeaderStyle = FontFactory.getFont(FontFactory.TIMES_ROMAN, 10, new BaseColor(Color.red));
header.add(new Chunk("PDF Pipeline Prototype v2 using iText\n",
pageHeaderStyle));
header.setSpacingAfter(15f);
document.add(header);
Paragraph content = new Paragraph();
content.add(new Chunk("Publication Count - Author Name - " + authorName,
featureHeaderStyle));
content.setSpacingAfter(15f);
document.add(content);
// step4
PdfPTable publicationCount = createTable(yearToPublicationCount);
document.add(publicationCount);
content = new Paragraph();
content.add(new Chunk("Transparency of Shapes",
featureHeaderStyle));
content.setSpacingAfter(15f);
document.add(content);
createTransparencyShapes(document, pdfWriter);
createImage(document, pdfWriter, featureHeaderStyle);
} catch (DocumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
private void createImage(Document document, PdfWriter writer,
Font featureHeaderStyle) throws BadElementException,
MalformedURLException, IOException, DocumentException {
Image imageSprite = Image.getInstance(new URL("http://lh3.ggpht.com/_4msVPAgKJv8/SCRYD-pPVKI/AAAAAAAAAYU/zUN963EPoZc/s1024/102_0609.JPG"));
imageSprite.setAbsolutePosition(400, 500);
imageSprite.scaleAbsolute(171.0f, 250.0f);
float imageSpriteY = document.getPageSize().getHeight() * 0.60f;
float imageSpriteX = document.getPageSize().getWidth() * 0.65f;
imageSprite.setAlignment(Image.UNDERLYING);
document.add(imageSprite);
PdfContentByte cb = writer.getDirectContent();
ColumnText ct = new ColumnText(cb);
Chunk imageHeader = new Chunk("Images",
featureHeaderStyle);
ct.addText(imageHeader);
ct.setAlignment(Element.ALIGN_LEFT);
ct.setSimpleColumn(imageSpriteX, imageSpriteY - imageSprite.getScaledHeight(),
imageSpriteX + imageSprite.getScaledWidth(), imageSpriteY + imageSprite.getScaledHeight() + 20);
ct.go();
ct = new ColumnText(cb);
Chunk imageFooter = new Chunk("Footer to be set for a figure. Similar to 'image cpation'.",
FontFactory.getFont(FontFactory.TIMES_ROMAN, 8));
ct.addText(imageFooter);
ct.setAlignment(Element.ALIGN_CENTER);
ct.setSimpleColumn(imageSpriteX, imageSpriteY - 150, imageSpriteX + imageSprite.getScaledWidth(), imageSpriteY);
ct.go();
}
private void createTransparencyShapes(Document document,
PdfWriter writer) throws Exception {
PdfContentByte cb = writer.getDirectContent();
pictureBackdrop(document.leftMargin(), 350, cb);
cb.saveState();
PdfGState gs1 = new PdfGState();
gs1.setFillOpacity(0.5f);
cb.setGState(gs1);
pictureCircles(document.leftMargin(), 350, cb);
cb.restoreState();
cb.resetRGBColorFill();
}
/**
* Prints a square and fills half of it with a gray rectangle.
* @param x
* @param y
* @param cb
* @throws Exception
*/
public void pictureBackdrop(float x, float y, PdfContentByte cb) throws Exception {
cb.setColorStroke(new BaseColor(Color.black));
cb.setColorFill(new BaseColor(Color.gray));
cb.rectangle(x, y, 100, 200);
cb.fill();
cb.setLineWidth(2);
cb.rectangle(x, y, 200, 200);
cb.stroke();
}
/**
* Prints 3 circles in different colors that intersect with eachother.
* @param x
* @param y
* @param cb
* @throws Exception
*/
public void pictureCircles(float x, float y, PdfContentByte cb) throws Exception {
cb.saveState();
PdfGState gs1 = new PdfGState();
gs1.setFillOpacity(1.0f);
cb.setGState(gs1);
cb.setColorFill(new BaseColor(Color.red));
cb.circle(x + 70, y + 70, 50);
cb.fill();
cb.restoreState();
cb.setColorFill(new BaseColor(Color.yellow));
cb.circle(x + 100, y + 130, 50);
cb.fill();
cb.setColorFill(new BaseColor(Color.blue));
cb.circle(x + 130, y + 70, 50);
cb.fill();
}
private PdfPTable createTable(Map<String, Integer> yearToPublicationCount) {
Font normalContentStyle = FontFactory.getFont(FontFactory.TIMES_ROMAN, 11);
Font summaryContentStyle = FontFactory.getFont(FontFactory.TIMES_ROMAN, 11, Font.BOLDITALIC);
BaseColor summaryBackgroundColor = new BaseColor(0xEE, 0xEE, 0xEE);
BaseColor headerBackgroundColor = new BaseColor(0xC3, 0xD9, 0xFF);
BaseColor bodyBackgroundColor = new BaseColor(Color.white);
PdfPTable table = new PdfPTable(2);
table.setWidthPercentage(36.0f);
table.setHorizontalAlignment(Element.ALIGN_LEFT);
table.getDefaultCell().setBorderWidth(0.0f);
table.setHeaderRows(2);
PdfPCell cell;
cell = new PdfPCell(new Phrase("Publications per year", normalContentStyle));
setTableCaptionStyle(summaryBackgroundColor, cell);
table.addCell(cell);
cell = new PdfPCell(new Phrase("Year", normalContentStyle));
setTableHeaderStyle(headerBackgroundColor, cell);
table.addCell(cell);
cell.setPhrase(new Phrase("Publications", normalContentStyle));
table.addCell(cell);
setTableBodyStyle(bodyBackgroundColor, cell);
int totalPublications = 0;
for (Entry<String, Integer> currentEntry : yearToPublicationCount.entrySet()) {
cell.setPhrase(new Phrase(currentEntry.getKey(), normalContentStyle));
table.addCell(cell);
cell.setPhrase(new Phrase(currentEntry.getValue().toString(), normalContentStyle));
table.addCell(cell);
totalPublications += currentEntry.getValue();
}
setTableFooterStyle(summaryBackgroundColor, cell);
cell.setPhrase(new Phrase("Total", summaryContentStyle));
table.addCell(cell);
cell.setPhrase(new Phrase(String.valueOf(totalPublications), summaryContentStyle));
table.addCell(cell);
return table;
}
private void setTableFooterStyle(BaseColor footerBackgroundColor,
PdfPCell cell) {
cell.setBorderWidth(0.0f);
cell.setBackgroundColor(footerBackgroundColor);
cell.setHorizontalAlignment(Element.ALIGN_CENTER);
cell.setPaddingTop(5f);
cell.setPaddingRight(10f);
cell.setPaddingBottom(5f);
cell.setPaddingLeft(10f);
}
private void setTableBodyStyle(BaseColor bodyBackgroundColor,
PdfPCell cell) {
cell.setBorderWidth(0.0f);
cell.setBackgroundColor(bodyBackgroundColor);
cell.setHorizontalAlignment(Element.ALIGN_CENTER);
cell.setPaddingTop(5f);
cell.setPaddingRight(10f);
cell.setPaddingBottom(5f);
cell.setPaddingLeft(10f);
}
private void setTableHeaderStyle(BaseColor headerBackgroundColor,
PdfPCell cell) {
cell.setBorderWidth(0.0f);
cell.setBackgroundColor(headerBackgroundColor);
cell.setHorizontalAlignment(Element.ALIGN_CENTER);
cell.setPaddingTop(5f);
cell.setPaddingRight(10f);
cell.setPaddingBottom(5f);
cell.setPaddingLeft(10f);
}
private void setTableCaptionStyle(BaseColor summaryBackgroundColor,
PdfPCell cell) {
cell.setBorderWidth(0.0f);
cell.setBackgroundColor(summaryBackgroundColor);
cell.setHorizontalAlignment(Element.ALIGN_CENTER);
cell.setPaddingTop(5.0f);
cell.setPaddingRight(10.0f);
cell.setPaddingBottom(5.0f);
cell.setPaddingLeft(10.0f);
cell.setColspan(2);
}
}