Hi,
the printing feature for listGrids seems to have a bug which appears in latest Chrome. It does not appear everytime... maybe out of 15 times printing 1 or 3 times. You can use my test code to reproduce this issue
The print export does not contain any data (see Screenshot - Print preview of chrome pop up).
The listGrid contains the following data:
Version: 6.1d from 29 may
used Browser: Chrome 58
the printing feature for listGrids seems to have a bug which appears in latest Chrome. It does not appear everytime... maybe out of 15 times printing 1 or 3 times. You can use my test code to reproduce this issue
The print export does not contain any data (see Screenshot - Print preview of chrome pop up).
The listGrid contains the following data:
Version: 6.1d from 29 may
used Browser: Chrome 58
Code:
import java.util.Date; import java.util.LinkedHashMap; import com.google.gwt.user.datepicker.client.CalendarUtil; import com.smartgwt.client.data.Criteria; import com.smartgwt.client.data.DataSource; import com.smartgwt.client.data.Record; import com.smartgwt.client.data.RecordList; import com.smartgwt.client.data.fields.DataSourceBooleanField; import com.smartgwt.client.data.fields.DataSourceDateField; import com.smartgwt.client.data.fields.DataSourceFloatField; import com.smartgwt.client.data.fields.DataSourceSequenceField; import com.smartgwt.client.data.fields.DataSourceTextField; import com.smartgwt.client.types.Alignment; import com.smartgwt.client.types.AutoFitWidthApproach; import com.smartgwt.client.types.FetchMode; import com.smartgwt.client.types.FieldType; import com.smartgwt.client.types.GroupStartOpen; import com.smartgwt.client.types.Overflow; import com.smartgwt.client.types.RecordDropAppearance; import com.smartgwt.client.types.SummaryFunctionType; import com.smartgwt.client.util.PrintHTMLCallback; import com.smartgwt.client.util.PrintProperties; import com.smartgwt.client.widgets.Canvas; import com.smartgwt.client.widgets.HTMLPane; import com.smartgwt.client.widgets.PrintCanvas; import com.smartgwt.client.widgets.Window; import com.smartgwt.client.widgets.events.ClickEvent; import com.smartgwt.client.widgets.events.ClickHandler; import com.smartgwt.client.widgets.form.DynamicForm; import com.smartgwt.client.widgets.grid.ListGrid; import com.smartgwt.client.widgets.grid.ListGridField; import com.smartgwt.client.widgets.grid.ListGridRecord; import com.smartgwt.client.widgets.layout.VLayout; import com.smartgwt.client.widgets.toolbar.ToolStrip; import com.smartgwt.client.widgets.toolbar.ToolStripButton; import com.smartgwt.client.widgets.viewer.DetailViewer; public class GTestGrid { private ListGrid listGrid; private DynamicForm editorForm; public GTestGrid() { initPopUp(); } private void initPopUp() { initListGrid(); initEditorForm(); VLayout layout = new VLayout(); layout.setSize( "100%", "100%" ); layout.setMembers( editorForm, getToolBar(), listGrid ); layout.setOverflow( Overflow.HIDDEN ); Window window = new Window(); window.setOverflow( Overflow.HIDDEN ); window.setSize( "100%", "100%" ); window.setCanDragResize( true ); window.setShowMaximizeButton( true ); window.setShowMinimizeButton( true ); window.setShowCloseButton( false ); window.setAnimateMinimize( true ); window.setShowCloseButton( true ); window.setModalMaskOpacity( 50 ); window.setIsModal( true ); window.setShowModalMask( true ); window.centerInPage(); window.addItem( layout ); window.draw(); // listGrid.getResultSet().addDataChangedHandler( new DataChangedHandler() // { // // @Override // public void onDataChanged( DataChangedEvent event ) // { // double totalAmount = 0; // // // Gets all records of the listGrid // Record[] records = getAssignments(); // // for ( int i = 0; i < records.length; i++ ) // { // totalAmount = totalAmount + records[i].getAttributeAsDouble( CAssignedPaymentsRec.total_amount ); // } // } // } ); // add Records addRecords( 2 ); } private void initListGrid() { final DataSource dataSource = getDataSource(); listGrid = new ListGrid() { @Override protected Canvas getCellHoverComponent( Record record, Integer rowNum, Integer colNum ) { Criteria criteria = new Criteria(); criteria.addCriteria( dataSource.getPrimaryKeyFieldName(), record.getAttribute( dataSource.getPrimaryKeyFieldName() ) ); DetailViewer viewer = new DetailViewer(); viewer.setEmptyCellValue( "---" ); viewer.setDataSource( dataSource ); viewer.setWrapValues( false ); viewer.setWrapLabel( false ); viewer.setShowShadow( true ); viewer.setShowEmptyField( false ); viewer.setShowHiddenFields( true ); viewer.setShowEmptyField( false ); viewer.setShowDetailFields( true ); viewer.fetchData( criteria ); return viewer; } }; listGrid.setMargin( 25 ); listGrid.setDataSource( dataSource ); listGrid.setAutoFetchData( true ); listGrid.setShowFilterEditor( true ); listGrid.setAllowFilterExpressions( true ); listGrid.setShowRowNumbers( true ); listGrid.setFastCellUpdates( true ); listGrid.setEmptyCellValue( "---" ); listGrid.setAllowFilterExpressions( true ); listGrid.setDataFetchMode( FetchMode.BASIC ); listGrid.setWrapHeaderTitles( true ); listGrid.setCanResizeFields( true ); listGrid.setCellPadding( 4 ); listGrid.setFixedRecordHeights( false ); listGrid.setGroupByMaxRecords( 1000 ); listGrid.setBodyOverflow( Overflow.AUTO ); listGrid.setOverflow( Overflow.AUTO ); listGrid.setLeaveScrollbarGap( false ); listGrid.setAutoFitWidthApproach( AutoFitWidthApproach.BOTH ); listGrid.setAutoFitHeaderHeights( true ); listGrid.setAutoSizeHeaderSpans( true ); listGrid.setCanAutoFitFields( false ); listGrid.setRecordDropAppearance( RecordDropAppearance.BOTH ); listGrid.setCanHover( true ); listGrid.setShowHover( true ); listGrid.setShowHoverComponents( true ); listGrid.setHoverDelay( 100 ); listGrid.setCanAddFormulaFields( true ); listGrid.setCanAddSummaryFields( true ); // Sets Columns setColumns( listGrid ); } private void setColumns( ListGrid listGrid ) { ListGridField idField = new ListGridField( "id" ); idField.setWidth( "10%" ); idField.setAlign( Alignment.CENTER ); idField.setShowGroupSummary( false ); idField.setHidden( true ); idField.setCanEdit( false ); ListGridField descriptionField = new ListGridField( "description" ); descriptionField.setWidth( "60%" ); descriptionField.setCanEdit( false ); ListGridField netField = new ListGridField( "netAmount" ); netField.setSummaryFunction( SummaryFunctionType.SUM ); netField.setShowGroupSummary( true ); netField.setShowGridSummary( true ); netField.setWidth( "10%" ); netField.setAlign( Alignment.CENTER ); netField.setFormat( "#,###,##0.00" ); ListGridField taxField = new ListGridField( "taxAmount" ); taxField.setWidth( "10%" ); taxField.setSummaryFunction( SummaryFunctionType.SUM ); taxField.setShowGroupSummary( true ); taxField.setShowGridSummary( true ); taxField.setAlign( Alignment.CENTER ); taxField.setFormat( "#,###,##0.00" ); ListGridField grossField = new ListGridField( "grossAmoumnt" ); grossField.setSummaryFunction( SummaryFunctionType.SUM ); grossField.setShowGroupSummary( true ); grossField.setShowGridSummary( true ); grossField.setAlign( Alignment.CENTER ); grossField.setWidth( "10%" ); grossField.setFormat( "#,###,##0.00" ); ListGridField currencyField = new ListGridField( "currency" ); currencyField.setAlign( Alignment.CENTER ); currencyField.setWidth( "8%" ); currencyField.setCanEdit( false ); ListGridField dateField = new ListGridField( "date" ); dateField.setWidth( "15%" ); dateField.setAlign( Alignment.LEFT ); ListGridField paidField = new ListGridField( "paid", "Paid" ); listGrid.setFields( idField, descriptionField, netField, taxField, grossField, paidField, dateField ); // Group ListGrid listGrid.setGroupByField( "currency" ); listGrid.setGroupStartOpen( GroupStartOpen.ALL ); listGrid.setShowGroupSummary( true ); listGrid.setShowGridSummary( true ); } private DataSource getDataSource() { DataSource ds = new DataSource(); ds.setID( "payments" ); ds.setClientOnly( true ); DataSourceSequenceField idField = new DataSourceSequenceField( "id", "ID" ); idField.setPrimaryKey( true ); idField.setHidden( true ); DataSourceTextField descriptionField = new DataSourceTextField( "description", "Description" ); descriptionField.setRequired( true ); DataSourceFloatField netField = new DataSourceFloatField( "netAmount", "Net Amount" ); netField.setRequired( true ); netField.setDecimalPrecision( 2 ); netField.setDecimalPad( 2 ); netField.setType( FieldType.LOCALEFLOAT ); DataSourceFloatField taxField = new DataSourceFloatField( "taxAmount", "Tax Amount" ); taxField.setRequired( true ); taxField.setDecimalPrecision( 2 ); taxField.setDecimalPad( 2 ); taxField.setType( FieldType.LOCALEFLOAT ); DataSourceFloatField grossField = new DataSourceFloatField( "grossAmoumnt", "Gross Amount" ); grossField.setRequired( true ); grossField.setDecimalPrecision( 2 ); grossField.setDecimalPad( 2 ); grossField.setType( FieldType.LOCALEFLOAT ); DataSourceTextField currencyField = new DataSourceTextField( "currency", "Currency" ); currencyField.setValueMap( getCurrencys() ); currencyField.setRequired( true ); DataSourceBooleanField paidField = new DataSourceBooleanField( "paid", "Paid" ); DataSourceDateField dateField = new DataSourceDateField( "date", "Date" ); ds.setFields( idField, descriptionField, netField, taxField, grossField, currencyField, paidField, dateField ); return ds; } private void initEditorForm() { editorForm = new DynamicForm(); editorForm.setDataSource( listGrid.getDataSource() ); editorForm.setAutoFocus( true ); editorForm.setWidth100(); editorForm.setMargin( 25 ); editorForm.setUseAllDataSourceFields( true ); editorForm.editNewRecord(); } private ToolStrip getToolBar() { ToolStrip toolbar = new ToolStrip(); toolbar.setWidth100(); ToolStripButton buttonAddToGrid = new ToolStripButton( "Add To Grid" ); buttonAddToGrid.addClickHandler( new ClickHandler() { public void onClick( ClickEvent event ) { if ( editorForm.validate() == true ) { editorForm.submit(); } } } ); ToolStripButton buttonNewRecord = new ToolStripButton( "New Record" ); buttonNewRecord.addClickHandler( new ClickHandler() { public void onClick( ClickEvent event ) { editorForm.editNewRecord(); } } ); ToolStripButton buttonPrint = new ToolStripButton( "<font color=\"red\">Print</font>" ); buttonPrint.addClickHandler( new ClickHandler() { @Override public void onClick( ClickEvent event ) { // Direct Print PrintProperties prop = new PrintProperties(); prop.setPrintForExport( true ); String html = listGrid.getPrintHTML( prop, new PrintHTMLCallback() { @Override public void setHTML( String html ) { // workaround fix check boxes html = html.replace( "Ebis/images/DynamicForm/unchecked.png", "Ebis/images/DynamicForm/cb-uncheck-normal_Disabled.png" ); html = html.replace( "Ebis/images/DynamicForm/unchecked_Disabled.png", "Ebis/images/DynamicForm/cb-uncheck-normal_Disabled.png" ); final HTMLPane htmlPane = new HTMLPane(); htmlPane.setContents( html ); PrintCanvas.printComponents( new Object[] { htmlPane } ); } } ); System.out.println( html ); } } ); toolbar.addButton( buttonNewRecord ); toolbar.addButton( buttonAddToGrid ); toolbar.addButton( buttonPrint ); return toolbar; } public Record[] getAssignments() { RecordList recordList = null; if ( listGrid.isGrouped() ) { recordList = listGrid.getOriginalRecordList(); } else { recordList = listGrid.getResultSet(); } Record[] result = (Record[]) recordList.toArray(); return result; } public LinkedHashMap<String, String> getCurrencys() { LinkedHashMap<String, String> items = new LinkedHashMap<String, String>(); items.put( "1", "EUR" ); items.put( "2", "GBP" ); items.put( "3", "CHF" ); items.put( "4", "SEK" ); items.put( "5", "DKK" ); items.put( "6", "PLN" ); items.put( "7", "BGN" ); items.put( "8", "CZK" ); items.put( "9", "HUF" ); items.put( "10", "HRK" ); items.put( "11", "RUB" ); items.put( "12", "RON" ); return items; } private void addRecords( int counter ) { Date date = getFirstDayOfMonth( new Date() ); Date date2 = getFirstDayOfMonth( new Date() ); for ( int i = 0; i < counter; i++ ) { ListGridRecord record = new ListGridRecord(); record.setAttribute( "id", 1 + i ); record.setAttribute( "description", "Test " + 1 + i ); record.setAttribute( "netAmount", new Double( 1000 + i ) ); record.setAttribute( "taxAmount", new Double( 0 ) ); record.setAttribute( "grossAmoumnt", new Double( 1000 + i ) ); record.setAttribute( "currency", "1" ); record.setAttribute( "paid", "true" ); CalendarUtil.addDaysToDate( date, 1 ); record.setAttribute( "date", date ); listGrid.addData( record ); } for ( int i = 0; i < counter; i++ ) { ListGridRecord record = new ListGridRecord(); record.setAttribute( "id", ( ( counter + 1 ) + i ) ); record.setAttribute( "description", "Test " + 1 + i ); record.setAttribute( "netAmount", new Double( 1 + i ) ); record.setAttribute( "taxAmount", new Double( 0 ) ); record.setAttribute( "grossAmoumnt", new Double( 1 + i ) ); record.setAttribute( "currency", "1" ); CalendarUtil.addDaysToDate( date2, 1 ); record.setAttribute( "date", date2 ); listGrid.addData( record ); } } // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ /** * Returns the first day of the current month */ // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ public static Date getFirstDayOfMonth( Date date ) { CalendarUtil.resetTime( date ); CalendarUtil.setToFirstDayOfMonth( date ); return date; } }
Comment