文档并将其以正确的内容类型返回给客户机。
首先必须定义一个控制器以从数据库表中获取电话本条目的列表并将其传递给 PDF 视图类,从而开始 开发 PDF 控制器。
定义 PhonebookPDFController 类
此类将使用 Spring ApplicationContext 的 bean 定义读取 phonebookEntries 类,然后将其传递给 PhonebookPdfView 类所表示的 PDF 视图。清单 11 显示了此控制器的代码。
清单 11. PhonebookPDFController 类读取电话本条目并将其传递给 PhonebookPdfView 类
public class PhonebookPDFController extends
MultiActionController {
private static final String PDF_VIEW = "phonebook_pdfView";
private String pdfView = PDF_VIEW;
/** Creates a new instance of PbPDFController */
public PhonebookPDFController() {
}
public void setPdfView(String view) {
this.pdfView = view;
}
/**
* Custom handler for phonebook PDF document.
* @param request current HTTP request
* @param response current HTTP response
* @return a ModelAndView to render the response
*/
public ModelAndView handlePdf(HttpServletRequest request,
HttpServletResponse response) throws ServletException, Exception {
WebApplicationContext ctx =
WebApplicationContextUtils.getWebApplicationContext(request.getSession().
getServletContext());
IPhonebookDataProvider pb = (IPhonebookDataProvider)
ctx.getBean("phonebook");
List phonebookEntries = pb.getPhonebookEntries();
return new ModelAndView(this.pdfView, "phonebook",
phonebookEntries);
}
}
下一个逻辑步骤是定义 View 类,该类将通过模型输出实际生成 PDF。
Apache Geronimo和Spring框架,第6部分:Spring MVC:使用Web视图技术(13)
时间:2011-10-13 IBM Arun Chhatpar
定义 PDF View 类
PhonebookPdfView 是 AbstractPdfView 类的子类,用于实现特定于 Web 视图的 PDF 文档的自定义 生成。在此类中最值得注意的方法是 buildPdfDocument。这是所有魔术变幻的关键位置所在。清单 12 显示了为电话本应用程序生成 PDF 的完整代码。
清单 12. PDF 视图类将创建 PDF 文档
public class PhonebookPdfView extends AbstractPdfView {
private static final Font HEADLINE_FONT = new Font( Font.TIMES_ROMAN , 18,
Font.BOLD, Color.black );
private static final Font DATA_HEAD_FONT = new Font( Font.TIMES_ROMAN, 10,
Font.BOLD, Color.black );
private static final Font TEXT_FONT = new Font( Font.TIMES_ROMAN, 8,
Font.NORMAL,
Color.black );
private static final Font FOOTER_FONT = new Font( Font.TIMES_ROMAN, 5,
Font.NORMAL,
Color.black );
private static final int NO_OF_COLUMNS = 5;
/** Creates a new instance of PhonebookPdfView */
public PhonebookPdfView() {
}
protected void buildPdfMetadata(Map model, Document document,
HttpServletRequest request) {
document.addTitle("Phone Book");
document.addCreator("Arun Chhatpar");
}
protected void bui
|