⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 countriespdfview.java

📁 spring的源代码
💻 JAVA
字号:
package org.springframework.samples.countries.web;

import java.awt.*;
import java.io.IOException;
import java.text.DateFormat;
import java.util.Iterator;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.lowagie.text.Document;
import com.lowagie.text.DocumentException;
import com.lowagie.text.Element;
import com.lowagie.text.Font;
import com.lowagie.text.Paragraph;
import com.lowagie.text.Phrase;
import com.lowagie.text.pdf.BaseFont;
import com.lowagie.text.pdf.PdfContentByte;
import com.lowagie.text.pdf.PdfPCell;
import com.lowagie.text.pdf.PdfPTable;
import com.lowagie.text.pdf.PdfPageEventHelper;
import com.lowagie.text.pdf.PdfTemplate;
import com.lowagie.text.pdf.PdfWriter;

import org.springframework.beans.support.RefreshablePagedListHolder;
import org.springframework.beans.support.SortDefinition;
import org.springframework.context.NoSuchMessageException;
import org.springframework.context.support.MessageSourceAccessor;
import org.springframework.samples.countries.Country;
import org.springframework.web.servlet.view.document.AbstractPdfView;

/**
 * This view demonstrates how to send a PDF file with the Spring Framework
 * using the iText PDF library.
 *
 * @author Jean-Pierre Pawlak
 * @author Juergen Hoeller
 */
public class CountriesPdfView extends AbstractPdfView {

	private static final Font HEADLINE_FONT = new Font( Font.HELVETICA, 18, Font.BOLD, Color.blue );
	private static final Font HEADING_FONT = new Font( Font.HELVETICA, 12, Font.ITALIC, Color.black );
	private static final Font HEADING_DATA_FONT = new Font( Font.HELVETICA, 12, Font.ITALIC, Color.blue );
	private static final Font DATA_HEAD_FONT = new Font( Font.HELVETICA, 10, Font.ITALIC, Color.black );
	private static final Font TEXT_FONT = new Font( Font.TIMES_ROMAN, 8, Font.NORMAL, Color.black );
	private static final Font BOLD_FONT = new Font( Font.TIMES_ROMAN, 8, Font.BOLD, Color.black );
	private static final int MARGIN = 32;

	protected void buildPdfMetadata(Map model, Document document, HttpServletRequest request) {
		document.addTitle("Countries List");
		document.addCreator("Spring Countries");
	}

	protected void buildPdfDocument(Map model, Document document,	PdfWriter writer,
			HttpServletRequest request, HttpServletResponse response)
			throws DocumentException, NoSuchMessageException {

		// We search the data to insert.
		RefreshablePagedListHolder pgHolder = (RefreshablePagedListHolder) model.get("countries");
		DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT, pgHolder.getLocale());

		// We prepare some data.
		SortDefinition sort = pgHolder.getSort();
		CountriesFilter filter = (CountriesFilter) pgHolder.getFilter();

		// We create and add the event handler.
		// So we can well paging, ensuring that only entire cells are printed
		// at end of pages (the latter is useless in this example as records
		// keep in one row, but in your own developpment it's not always the case).
		MyPageEvents events = new MyPageEvents(getMessageSourceAccessor());
		writer.setPageEvent(events);
		events.onOpenDocument(writer, document);
		
		String title = getMessageSourceAccessor().getMessage("app.name");
		document.add(new Paragraph(title, HEADLINE_FONT));
		document.add(new Paragraph(" "));
		document.add(new Paragraph(" "));
		document.add(new Paragraph(" "));
	
		// We create a table for used criteria and extracting information
		PdfPTable table = new PdfPTable(2);
		table.setWidthPercentage(50);
		table.getDefaultCell().setBorderWidth(1);
		table.getDefaultCell().setBorderColor(Color.black);
		table.getDefaultCell().setPadding(4);
		table.getDefaultCell().setHorizontalAlignment(Element.ALIGN_CENTER);
		table.getDefaultCell().setVerticalAlignment( Element.ALIGN_MIDDLE);

		PdfPCell cell = new PdfPCell(new Phrase(getMessageSourceAccessor().getMessage("criteria"), HEADING_FONT));
		cell.setColspan(2);
		cell.setHorizontalAlignment(Element.ALIGN_CENTER);
		cell.setGrayFill(0.7f);
		table.addCell(cell);
		cell = new PdfPCell(new Phrase(getMessageSourceAccessor().getMessage("property"), HEADING_FONT));
		cell.setHorizontalAlignment(Element.ALIGN_CENTER);
		cell.setGrayFill(0.9f);
		table.addCell(cell);
		cell = new PdfPCell(new Phrase(getMessageSourceAccessor().getMessage( "value"), HEADING_FONT));
		cell.setHorizontalAlignment(Element.ALIGN_CENTER);
		cell.setGrayFill(0.9f);
		table.addCell(cell);

		// We put the used criteria and extracting information	
		cell = new PdfPCell(new Phrase(getMessageSourceAccessor().getMessage( "date.extraction"), HEADING_FONT));
		table.addCell(cell);
		cell = new PdfPCell(new Phrase(df.format(pgHolder.getRefreshDate()), HEADING_DATA_FONT));
		table.addCell(cell);

		cell = new PdfPCell(new Phrase(getMessageSourceAccessor().getMessage( "nbRecords"), HEADING_FONT));
		table.addCell(cell);
		cell = new PdfPCell(new Phrase(String.valueOf(pgHolder.getNrOfElements()), HEADING_DATA_FONT));
		table.addCell(cell);

		cell = new PdfPCell(new Phrase(getMessageSourceAccessor().getMessage( "sort.name"), HEADING_FONT));
		table.addCell(cell);
		cell = new PdfPCell(new Phrase(sort.getProperty(), HEADING_DATA_FONT));
		table.addCell(cell);

		cell = new PdfPCell(new Phrase(getMessageSourceAccessor().getMessage( "sort.asc"), HEADING_FONT));
		table.addCell(cell);
		cell = new PdfPCell(new Phrase(getMessageSourceAccessor().getMessage(new Boolean(sort.isAscending()).toString()),
				HEADING_DATA_FONT));
		table.addCell(cell);

		cell = new PdfPCell(new Phrase(getMessageSourceAccessor().getMessage( "sort.igncase"), HEADING_FONT));
		table.addCell(cell);
		cell = new PdfPCell(new Phrase(getMessageSourceAccessor().getMessage(new Boolean(sort.isIgnoreCase()).toString()),
				HEADING_DATA_FONT));
		table.addCell(cell);

		cell = new PdfPCell(new Phrase(getMessageSourceAccessor().getMessage( "filter.name"), HEADING_FONT));
		table.addCell(cell);
		cell = new PdfPCell(new Phrase(null == filter.getName() ? "" : filter.getName(), HEADING_DATA_FONT));
		table.addCell(cell);

		cell = new PdfPCell(new Phrase(getMessageSourceAccessor().getMessage( "filter.code"), HEADING_FONT));
		table.addCell(cell);
		cell = new PdfPCell(new Phrase(null == filter.getCode() ? "" : filter.getCode(), HEADING_DATA_FONT));
		table.addCell(cell);

		document.add(table);
		document.newPage();

		// We can go now on the countries list
		table = new PdfPTable(2);
		int headerwidths[] = {20, 80};
		table.setWidths(headerwidths);
		table.setWidthPercentage(60);
		table.getDefaultCell().setBorderWidth(2);
		table.getDefaultCell().setBorderColor(Color.black);
		table.getDefaultCell().setGrayFill(0.75f);
		table.getDefaultCell().setPadding(3);
		table.getDefaultCell().setHorizontalAlignment(Element.ALIGN_CENTER);
		table.getDefaultCell().setVerticalAlignment(Element.ALIGN_MIDDLE);

		table.addCell(new Phrase(getMessageSourceAccessor().getMessage( "code"), DATA_HEAD_FONT));
		table.addCell(new Phrase(getMessageSourceAccessor().getMessage( "name"), DATA_HEAD_FONT));

		// We set the above row as remaining title
		// and adjust properties for normal cells
		table.setHeaderRows(1);
		table.getDefaultCell().setBorderWidth(1);
		table.getDefaultCell().setHorizontalAlignment(Element.ALIGN_LEFT);
		table.getDefaultCell().setVerticalAlignment(Element.ALIGN_TOP);
	
		// We iterate now on the countries list	
		boolean even = false;
		Iterator it = pgHolder.getSource().iterator();  
		while(it.hasNext()) {
			if (even) {
				table.getDefaultCell().setGrayFill(0.95f);
				even = false;
			} else {
				table.getDefaultCell().setGrayFill(1.00f);
				even = true;
			}
			Country country = (Country)it.next();
			table.getDefaultCell().setHorizontalAlignment(Element.ALIGN_CENTER);
			table.addCell(new Phrase(country.getCode(), BOLD_FONT));
			table.getDefaultCell().setHorizontalAlignment(Element.ALIGN_LEFT);
			table.addCell(new Phrase(country.getName(), TEXT_FONT));
		}
		document.add(table);
	}


	//~ Inner Classes ----------------------------------------------------------

	private static class MyPageEvents extends PdfPageEventHelper {

		private MessageSourceAccessor messageSourceAccessor;

		// This is the PdfContentByte object of the writer
		private PdfContentByte cb;

		// We will put the final number of pages in a template
		private PdfTemplate template;

		// This is the BaseFont we are going to use for the header / footer
		private BaseFont bf = null;
		
		public MyPageEvents(MessageSourceAccessor messageSourceAccessor) {
			this.messageSourceAccessor = messageSourceAccessor;
		}

		// we override the onOpenDocument method
		public void onOpenDocument(PdfWriter writer, Document document) {
			try	{
				bf = BaseFont.createFont( BaseFont.HELVETICA, BaseFont.CP1252, BaseFont.NOT_EMBEDDED );
				cb = writer.getDirectContent();
				template = cb.createTemplate(50, 50);
			} catch (DocumentException de) {
			} catch (IOException ioe) {}
		}

		// we override the onEndPage method
		public void onEndPage(PdfWriter writer, Document document) {
			int pageN = writer.getPageNumber();
			String text = messageSourceAccessor.getMessage("page", "page") + " " + pageN + " " +
			    messageSourceAccessor.getMessage("on", "on") + " ";
			float  len = bf.getWidthPoint( text, 8 );
			cb.beginText();
			cb.setFontAndSize(bf, 8);

			cb.setTextMatrix(MARGIN, 16);
			cb.showText(text);
			cb.endText();

			cb.addTemplate(template, MARGIN + len, 16);
			cb.beginText();
			cb.setFontAndSize(bf, 8);

			cb.endText();
		}

		// we override the onCloseDocument method
		public void onCloseDocument(PdfWriter writer, Document document) {
			template.beginText();
			template.setFontAndSize(bf, 8);
			template.showText(String.valueOf( writer.getPageNumber() - 1 ));
			template.endText();
		}
	}

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -