Package org.zkoss.zss.app.file

Source Code of org.zkoss.zss.app.file.ExportToPdfWindowCtrl

/* ExportToPdfWindowCtrl.java

{{IS_NOTE
  Purpose:
   
  Description:
   
  History:
    Sep 20, 2010 3:20:39 PM , Created by Sam
}}IS_NOTE

Copyright (C) 2009 Potix Corporation. All Rights Reserved.

*/
package org.zkoss.zss.app.file;

import static org.zkoss.zss.app.base.Preconditions.checkNotNull;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStream;

import org.zkoss.poi.openxml4j.exceptions.InvalidFormatException;
import org.zkoss.poi.ss.usermodel.PrintSetup;
import org.zkoss.poi.ss.usermodel.Sheet;
import org.zkoss.poi.ss.util.AreaReference;
import org.zkoss.util.media.AMedia;
import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.event.ForwardEvent;
import org.zkoss.zk.ui.util.GenericForwardComposer;
import org.zkoss.zss.app.zul.Dialog;
import org.zkoss.zss.app.zul.Zssapps;
import org.zkoss.zss.model.Book;
import org.zkoss.zss.model.Exporter;
import org.zkoss.zss.model.Exporters;
import org.zkoss.zss.model.impl.Headings;
import org.zkoss.zss.ui.Rect;
import org.zkoss.zss.ui.Spreadsheet;
import org.zkoss.zul.Button;
import org.zkoss.zul.Checkbox;
import org.zkoss.zul.Filedownload;
import org.zkoss.zul.Radio;
import org.zkoss.zul.Radiogroup;
import org.zkoss.zul.Window;

/**
* @author Sam
*
*/
public class ExportToPdfWindowCtrl extends GenericForwardComposer {
 
  private Dialog _exportToPdfDialog;
  /**
   * The range to export. All sheets, current sheet or selection range
   * <p> Default: Selected sheet
   */
  Radiogroup range;
  Radio currSelection;
  Radio currSheet;
  Radio allSheet;
 
  /**
   * The document's orientation. Landscape or Portrait
   */
  Radiogroup orientation;
  /**
   * Original orientation setting
   */
  boolean orgOrientation;
  Radio landscape;
  Radio portrait;
 
  /**
   * Indicate whether include header or not
   * <p> Default: Include header
   */
  Checkbox noHeader;
 
  /**
   * Indicate whether include gridlines or not.
   */
  Checkbox noGridlines;
 
  Button export;
 
  Rect selection;
  Spreadsheet ss;
 
  public void onOpen$_exportToPdfDialog(ForwardEvent event) {
    loadPrintSetting();
    selection = (Rect) event.getOrigin().getData();
    currSelection.setDisabled(selection == null);
    noHeader.setChecked(true);
    _exportToPdfDialog.setMode(Window.MODAL);
  }
 
  @Override
  public void doAfterCompose(Component comp) throws Exception {
    super.doAfterCompose(comp);
    //TODO: use event, don't send arg
    ss = checkNotNull(Zssapps.getSpreadsheetFromArg(), "Spreadsheet is null");
  }
 
  private void loadPrintSetting() {
    noGridlines.setChecked(!ss.getSelectedSheet().isPrintGridlines());
    range.setSelectedItem(currSheet);
    loadOrientationSetting();
  }
 
  private void loadOrientationSetting() {
    //TODO: move to sheet context
    orgOrientation = ss.getSelectedSheet().getPrintSetup().getLandscape();
    if (ss.getSelectedSheet().getPrintSetup().getLandscape()) {
      orientation.setSelectedItem(landscape);
    }
    else
      orientation.setSelectedItem(portrait);
  }
 
  /**
   * Apply the print setting to each page
   */
  private void applyPrintSetting() {
    //TODO: move to sheet context
    ss.getSelectedSheet().getPrintSetup().setLandscape(orientation.getSelectedItem() == landscape);
    ss.getSelectedSheet().setPrintGridlines(includeGridlines());
    boolean isLandscape = orientation.getSelectedItem() == landscape;
    final Book book = ss.getBook();
    if (book == null) {
      return;
    }
    int numSheet = book.getNumberOfSheets();
    for (int i = 0; i < numSheet; i++) {
      Sheet sheet = ss.getSheet(i);
      PrintSetup setup = sheet.getPrintSetup();
      setup.setLandscape(isLandscape);
    }
  }
 
  private void revertPrintSetting() {
    final Book book = ss.getBook();
    if (book == null) {
      return;
    }
    int numSheet = book.getNumberOfSheets();
    for (int i = 0; i < numSheet; i++) {
      Sheet sheet = ss.getSheet(i);
      PrintSetup setup = sheet.getPrintSetup();
      setup.setLandscape(orgOrientation);
    }
  }

  public void onClick$export()
    throws InvalidFormatException, IOException, InterruptedException {
   
    applyPrintSetting();
   
    Exporter c = Exporters.getExporter("pdf");
    if (c instanceof Headings) {
      ((Headings)c).enableHeadings(includeHeadings());
    }
   
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    export(c, baos);
   
    final AMedia amedia = new AMedia("generatedReport.pdf", "pdf", "application/pdf", baos.toByteArray());

    Filedownload.save(amedia);
   
    revertPrintSetting();

    _exportToPdfDialog.fireOnClose(null);
  }
 
  private void export(Exporter exporter, OutputStream outputStream) {
    final Book book = ss.getBook();
    if (book == null) {
      return;
    }
    Radio seld = range.getSelectedItem();
    if (seld == allSheet) {
      exporter.export(book, outputStream);
    } else if (seld == currSelection){
      Rect rect = selection;
      String area = ss.getColumntitle(rect.getLeft()) + ss.getRowtitle(rect.getTop()) + ":" +
        ss.getColumntitle(rect.getRight()) + ss.getRowtitle(rect.getBottom());
      exporter.exportSelection(ss.getSelectedSheet(), new AreaReference(area), outputStream);
    } else
      exporter.export(ss.getSelectedSheet(), outputStream);
  }
 
  private boolean includeHeadings () {
    return !noHeader.isChecked();
  }
 
  private boolean includeGridlines(){
    return !noGridlines.isChecked();
  }
}
TOP

Related Classes of org.zkoss.zss.app.file.ExportToPdfWindowCtrl

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.