c# pdf viewer itextsharp : Change pdf page order SDK Library API .net asp.net web page sharepoint winforms.reportdesigner3-part1641

25 
Next 
w.WriteEndElement() 
Cursor = Cursors.Default 
' close the file 
w.Close() 
' and be done 
_fileName = dlg.FileName 
_dirty = False 
UpdateUI() 
End Sub  
C# 
public void SaveFile() 
// get name of file to save 
SaveFileDialog dlg = new SaveFileDialog(); 
dlg.FileName = _fileName; 
dlg.Title = "Save Report Definition File"; 
if (dlg.ShowDialog() != DialogResult.OK) 
return; 
// save file 
XmlTextWriter w = new XmlTextWriter(dlg.FileName, 
System.Text.Encoding.Default); 
w.Formatting = Formatting.Indented; 
w.Indentation = 2; 
w.WriteStartDocument(); 
// write all reports to it 
Cursor = Cursors.WaitCursor; 
w.WriteStartElement("Reports"); 
foreach (ReportHolder rh in _list.Items) 
rh.Report.Save(w); //rh.Report.ReportName; 
w.WriteEndElement(); 
Cursor = Cursors.Default; 
// close the file 
w.Close(); 
// and be done 
_fileName = dlg.FileName; 
_dirty = false; 
UpdateUI(); 
Step 7 of 9: Hook Up the Controls 
The next step is to add the event handlers that hook up all the controls together. 
Here is the handler for the SelectedIndexChanged event of the _list control. Add the following code so that when 
the user selects a new report from the list, the code displays it in design mode: 
Visual Basic 
' a new report was selected: switch to design mode and show it 
Private Sub _list_SelectedIndexChanged(ByVal sender As System.Object, 
ByVal e As System.EventArgs) Handles _list.SelectedIndexChanged 
Change pdf page order - re-order PDF pages in C#.net, ASP.NET, MVC, Ajax, WinForms, WPF
Support Customizing Page Order of PDF Document in C# Project
how to rearrange pages in pdf using reader; rearrange pages in pdf document
Change pdf page order - VB.NET PDF Page Move Library: re-order PDF pages in vb.net, ASP.NET, MVC, Ajax, WinForms, WPF
Sort PDF Document Pages Using VB.NET Demo Code
move pages in pdf online; rearrange pages in pdf
26  
' switch to design mode 
SetDesignMode(True) 
' attach selected report to designer and preview controls 
_c1rd.Report = Nothing 
_c1ppv.Document = Nothing 
If _list.SelectedIndex > -1 Then 
_c1rd.Report = _list.SelectedItem.Report 
End If 
End Sub  
C# 
// a new report was selected: switch to design mode and show it 
private void _list_SelectedIndexChanged(object sender, System.EventArgs e) 
// switch to design mode 
SetDesignMode(true); 
// attach selected report to designer and preview controls 
_c1rd.Report = null; 
_c1ppv.Document = null; 
if (_list.SelectedItem != null) 
_c1rd.Report = ((ReportHolder)_list.SelectedItem).Report; 
The designer uses a property grid control (_ppg) to expose the properties of the report elements selected in the 
designer. This is done by setting the SelectedObject property of the property grid control; in response the control 
fires a SelectionChanged event. 
When the user selects a report section or a field in the designer control, it fires the SelectionChanged event. The 
event handler inspects the new selection and assigns it to the property grid control. This is a powerful mechanism. 
The selection can be a single report field, a group of fields, a section, or the whole report.  
Add the following code to implement the SelectionChanged event: 
Visual Basic 
' the selection changed, need to update property grid and show the 
' properties of the selected object  
Private Sub _c1rd_SelectionChanged(ByVal sender As ObjectByVal e As 
System.EventArgs) Handles _c1rd.SelectionChanged 
Dim sel As Object() = _c1rd.SelectedFields 
If (sel.Length > 0) Then 
_lblPropGrid.Text = "Field Properties" 
_ppg.SelectedObjects = sel 
ElseIf Not IsNothing(_c1rd.SelectedSection) Then 
_lblPropGrid.Text = "Section Properties" 
_ppg.SelectedObject = _c1rd.SelectedSection 
ElseIf Not IsNothing(_c1rd.Report) Then 
_lblPropGrid.Text = "Report Properties" 
_ppg.SelectedObject = _c1rd.Report 
' nothing selected 
Else 
_lblPropGrid.Text = "Properties" 
_ppg.SelectedObject = Nothing 
End If 
' done 
UpdateUI() 
End Sub 
C# PDF File & Page Process Library SDK for C#.net, ASP.NET, MVC
Convert Jpeg to PDF; Merge PDF Files; Split PDF Document; Remove Password from PDF; Change PDF Permission Settings. C# File: Split PDF; C# Page: Insert PDF pages
reorder pdf pages; rearrange pages in pdf reader
VB.NET PDF File & Page Process Library SDK for vb.net, ASP.NET
VB.NET PDF - How to Modify PDF Document Page in VB.NET. VB.NET Guide for Processing PDF Document Page and Sorting PDF Pages Order.
how to move pages in pdf converter professional; reorder pdf pages online
27 
C# 
// the selection changed, need to update property grid and show the 
// properties of the selected object  
private void _c1rd_SelectionChanged(object sender, System.EventArgs e) 
object[] sel = _c1rd.SelectedFields; 
if (sel.Length > 0) 
_lblPropGrid.Text = "Field Properties"; 
_ppg.SelectedObjects = sel; 
else if (_c1rd.SelectedSection != null)  
_lblPropGrid.Text = "Section Properties"; 
_ppg.SelectedObject = _c1rd.SelectedSection; 
else if (_c1rd.Report != null) 
_lblPropGrid.Text = "Report Properties"; 
_ppg.SelectedObject = _c1rd.Report; 
else // nothing selected 
_lblPropGrid.Text = "Properties"; 
_ppg.SelectedObject = null; 
// done 
UpdateUI(); 
The property grid (_ppg) displays the properties of the object selected in the designer (_c1rd). When the user 
changes the properties of an object using the grid, the designer needs to be notified so it can update the display. 
Conversely, when the user edits an object using the designer, the grid needs to be notified and update its display.  
Add the following code to implement the handlers for the PropertyValueChanged event of the _ppg control and 
the ValuesChanged event of the _c1rd control: 
Visual Basic 
' when a value changes in the property window, refresh the designer to 
show the changes 
Private Sub _ppg_PropertyValueChanged(ByVal s As ObjectByVal e As 
System.Windows.Forms.PropertyValueChangedEventArgs) Handles 
_ppg.PropertyValueChanged 
_c1rd.Refresh() 
_dirty = True 
UpdateUI() 
End Sub  
' when properties of the selected objects change in the designer, 
' update the property window to show the changes 
Private Sub _c1rd_ValuesChanged(ByVal sender As ObjectByVal e As 
System.EventArgs) Handles _c1rd.ValuesChanged 
_c1rd.Refresh() 
_dirty = True 
UpdateUI() 
End Sub  
C# PowerPoint - Sort PowerPoint Pages Order in C#.NET
control, developers can swap or adjust the order of all or several PowerPoint document pages, or just change the position of certain one PowerPoint page in an
change page order in pdf online; pdf rearrange pages
C# Word - Sort Word Pages Order in C#.NET
library control, developers can swap or adjust the order of all or several Word document pages, or just change the position of certain one Word page in an
move pdf pages online; how to rearrange pages in a pdf file
28  
C# 
// when a value changes in the property window, refresh the designer 
// to show the changes 
private void _ppg_PropertyValueChanged(object s, 
Systems.Windows.Forms.PropertyValueChangedEventArgs e) 
_c1rd.Refresh(); 
_dirty = true; 
UpdateUI(); 
// when properties of the selected objects change in the designer, 
// update the property window to show the changes 
private void _c1rd_ValuesChanged(object sender, System.EventArgs e) 
_ppg.Refresh(); 
_dirty = true; 
UpdateUI(); 
Step 8 of 9: Add Code to Create and Remove Reports 
To remove reports from the list, use the DeleteReport method. The DeleteReport method simply removes the 
selected item from the report list, clears the Report property of the designer control, then makes a new selection if 
the list is not empty. 
Add the following code to remove reports using the DeleteReport method: 
Visual Basic 
' remove current report from the list 
Private Sub DeleteReport() 
' a report must be selected 
Dim index As Integer = _list.SelectedIndex 
If (index < 0) Then Return 
' remove report from the designer and from the list 
_c1rd.Report = Nothing 
_list.Items.RemoveAt(index) 
' select another report if we can 
If (index > _list.Items.Count – 1) Then 
index = _list.Items.Count - 1 
If (index > - 1) Then 
_list.SelectedIndex = index 
End If  
End If 
' done 
_dirty = True 
UpdateUI() 
End Sub  
C# 
// remove current report from the list 
private void DeleteReport() 
// a report must be selected 
int index = _list.SelectedIndex; 
if (index < 0) return; 
C# TIFF: How to Reorder, Rearrange & Sort TIFF Pages Using C# Code
C# users to reorder and rearrange multi-page Tiff file Tiff image management library, you can easily change and move pages or make a totally new order for all
reordering pdf pages; reorder pages in a pdf
C# Word - Process Word Document in C#
various Word document processing implementations using C# demo codes, such as add or delete Word document page, change Word document pages order, merge or
how to move pages in a pdf file; how to move pages in pdf files
29 
// remove report from the designer and from the list 
_c1rd.Report = null; 
_list.Items.RemoveAt(index); 
// select another report if we can 
if (index > _list.Items.Count-1)  
index = _list.Items.Count-1; 
if (index > -1)  
_list.SelectedIndex = index; 
// done 
_dirty = true; 
UpdateUI(); 
The AddReport method is a little more complex. In the full-fledged report designer, this command invokes a 
wizard that allows the user to select a data source, grouping options, layout, and style. When implementing your 
designer, you can use the wizard code as-is or customize it to suit your needs. 
Rather than just creating a blank new report, the simple designer prompts the user for an MDB file, selects the first 
table it can find, then the first five fields, and creates a report based on that. 
Add the following code to create reports using the AddReport method: 
Visual Basic 
Private Sub NewReport() 
' select a data source (just mdb files in this sample) 
Dim dlg As New OpenFileDialog() 
dlg.FileName = "*.mdb" 
dlg.Title = "Select report data source" 
If dlg.ShowDialog() <> Windows.Forms.DialogResult.OK Then Return 
' select first table from data source 
Dim connString As String = 
String.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0}", 
dlg.FileName) 
Dim tableName As String = GetFirstTable(connString) 
If tableName.Length = 0 Then 
MessageBox.Show("Failed to retrieve data from the selected source.") 
Return 
End If 
' create new report 
Dim rpt As New C1Report() 
rpt.ReportName = tableName 
' set data source 
rpt.DataSource.ConnectionString = connString 
rpt.DataSource.RecordSource = tableName 
' add a title field 
Dim s As Section = rpt.Sections(SectionTypeEnum.Header) 
s.Visible = True 
s.Height = 600 
Dim f As Field = s.Fields.Add("TitleField", tableName, 0, 0, 4000, 600) 
C# PDF: C# Code to Process PDF Document Page Using C#.NET PDF
Enable C#.NET developers to change the page order of source PDF document file; Allow C#.NET developers to add image to specified area of source PDF document
change pdf page order online; change page order pdf
C# PDF Page Extract Library: copy, paste, cut PDF pages in C#.net
the robust functionality to copy and paste PDF page(s) in C#.NET document imaging application. C#.NET Project DLLs: Copy and Paste PDF Pages. In order to run
how to rearrange pages in a pdf reader; how to move pages around in pdf file
30  
f.Font.Bold = True 
f.Font.Size = 24 
f.ForeColor = Color.Navy 
' add up to 5 calculated fields 
Dim fieldNames As String() = rpt.DataSource.GetDBFieldList(True) 
Dim cnt As Integer = Math.Min(5, fieldNames.Length) 
' add a page header 
s = rpt.Sections(SectionTypeEnum.PageHeader) 
s.Visible = True 
s.Height = 400 
Dim rc As New Rectangle(0, 0, 1000, s.Height) 
Dim i As Integer 
For i = 0 To cnt - 1 
f = s.Fields.Add("TitleField", fieldNames(i), rc) 
f.Font.Bold = True 
rc.Offset(rc.Width, 0) 
Next 
' add detail section 
s = rpt.Sections(SectionTypeEnum.Detail) 
s.Visible = True 
s.Height = 300 
rc = New Rectangle(0, 0, 1000, s.Height) 
For i = 0 To cnt - 1 
f = s.Fields.Add("TitleField", fieldNames(i), rc) 
f.Calculated = True 
rc.Offset(rc.Width, 0) 
Next 
' add new report to the list and select it 
_list.Items.Add(New ReportHolder(rpt)) 
_list.SelectedIndex = _list.Items.Count - 1 
' done 
_dirty = True 
UpdateUI() 
End Sub  
C# 
private void NewReport() 
// select a data source (just mdb files in this sample) 
OpenFileDialog dlg = new OpenFileDialog(); 
dlg.FileName = "*.mdb"; 
dlg.Title = "Select report data source"; 
if (dlg.ShowDialog() != DialogResult.OK) return; 
// select first table from data source 
string connString = 
string.Format(@"Provider=Microsoft.Jet.OLEDB.4.0;Data 
Source={0};", 
dlg.FileName); 
string tableName = GetFirstTable(connString); 
if (tableName == null || tableName.Length == 0) 
31 
MessageBox.Show("Failed to retrieve data from the selected 
source."); 
return; 
// create new report 
C1Report rpt = new C1Report(); 
rpt.ReportName = tableName; 
// set data source 
rpt.DataSource.ConnectionString = connString; 
rpt.DataSource.RecordSource = tableName; 
// add a title field 
Section s = rpt.Sections[SectionTypeEnum.Header]; 
s.Visible = true; 
s.Height = 600; 
Field f = s.Fields.Add("TitleField", tableName, 0, 0, 4000, 600); 
f.Font.Bold = true; 
f.Font.Size = 24; 
f.ForeColor = Color.Navy; 
// add up to 5 calculated fields 
string[] fieldNames = rpt.DataSource.GetDBFieldList(true); 
int cnt = Math.Min(5, fieldNames.Length); 
// add a page header 
s = rpt.Sections[SectionTypeEnum.PageHeader]; 
s.Visible = true; 
s.Height = 400; 
Rectangle rc = new Rectangle(0, 0, 1000, (int)s.Height); 
for (int i = 0; i < cnt; i++) 
f = s.Fields.Add("TitleField", fieldNames[i], rc); 
f.Font.Bold = true; 
rc.Offset(rc.Width, 0); 
// add detail section 
s = rpt.Sections[SectionTypeEnum.Detail]; 
s.Visible = true; 
s.Height = 300; 
rc = new Rectangle(0, 0, 1000, (int)s.Height); 
for (int i = 0; i < cnt; i++) 
f = s.Fields.Add("TitleField", fieldNames[i], rc); 
f.Calculated = true; 
rc.Offset(rc.Width, 0); 
// add new report to the list and select it 
_list.Items.Add(new ReportHolder(rpt)); 
_list.SelectedIndex = _list.Items.Count-1; 
// done 
_dirty = true; 
32  
UpdateUI(); 
The following code uses a helper function GetFirstTable that opens a connection, retrieves the db schema, and 
returns the name of the first table it finds. Add the following code: 
Visual Basic 
Private Function GetFirstTable(connString As String) As String 
Dim conn As New OleDbConnection(connString) 
Try 
' get schema 
conn.Open() 
Dim dt As DataTable = 
conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, Nothing) 
Dim dr As DataRow 
For Each dr In dt.Rows 
' check the table type 
Dim type As String = dr("TABLE_TYPE").ToString().ToUpper() 
If (type <> "TABLE" AndAlso type <> "VIEW" AndAlso type <> "LINK" 
Then 
'skip this one 
Else 
' get the table name 
tableName = dr("TABLE_NAME").ToString() 
Exit For 
End If 
Next 
' done 
conn.Close() 
Catch 
End Try  
' return the first table we found 
Return tableName 
End Function 
C# 
private string GetFirstTable(string connString) 
string tableName = null; 
OleDbConnection conn = new OleDbConnection(connString); 
try 
// get schema 
conn.Open(); 
DataTable dt = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, 
null); 
foreach (DataRow dr in dt.Rows) 
// check the table type 
string type = dr["TABLE_TYPE"].ToString().ToUpper(); 
if (type != "TABLE" && type != "VIEW" && type != "LINK") 
continue; 
// get the table name 
tableName = dr["TABLE_NAME"].ToString(); 
break; 
33 
// done 
conn.Close(); 
catch {} 
// return the first table we found 
return tableName; 
Step 9 of 9: Add Code to Create Fields 
The simple designer is almost done; it is only missing the code used to create new fields in the report. 
If you look at the code we are using for the toolbar event handler, you will see that it set the CreateFieldInfo 
property on the designer and says to wait for the CreateField event from the designer.  
Add the following code to create new fields in the report: 
Visual Basic 
' handle clicks on toolbar buttons 
Private Sub _tb_ButtonClick(ByVal sender As System.Object, ByVal e As 
System.Windows.Forms.ToolBarButtonClickEventArgs) Handles _tb.ButtonClick 
' … 
' add fields 
' (just set create info and wait for CreateField event from designer) 
If e.Button.Equals(_btnAddField) Then 
_c1rd.CreateFieldInfo = e.Button 
If e.Button.Equals(_btnAddLabel) Then 
_c1rd.CreateFieldInfo = e.Button 
End Sub  
C# 
// handle clicks on toolbar buttons 
private void _tb_ButtonClick(object sender, 
System.Windows.Forms.ToolBarButtonClickEventArgs e) 
// … 
// add fields 
// (just set create info and wait for CreateField event from designer) 
if (e.Button == _btnAddField)    _c1rd.CreateFieldInfo = e.Button; 
if (e.Button == _btnAddLabel)    _c1rd.CreateFieldInfo = e.Button; 
The CreateFieldInfo property can be set to any non-null object to indicate to the designer that you want to create a 
new field. The designer doesn't know what type of field you want to create or how you want to initialize it, so it 
tracks the mouse and allows the user to draw the field outline on a section. It then fires the CreateField event 
passing the information you need to create the field yourself. 
Add the following code to handle the CreateField event: 
Visual Basic 
Dim _ctr As Integer 
Private Sub _c1rd_CreateField(ByVal sender As Object, ByVal e As 
C1.Win.C1ReportDesigner.CreateFieldEventArgs) Handles _c1rd.CreateField 
' save undo info 
34  
_c1rd.UndoStack.SaveState() 
' add label field 
_ctr = _ctr + 1 
Dim fieldName As String = String.Format("NewField{0}", _ctr) 
Dim fieldText As String = fieldName 
Dim f As Field = e.Section.Fields.Add(fieldName, fieldText, 
e.FieldBounds) 
' if this is a calculated field,  
' change the Text and Calculated properties 
If e.CreateFieldInfo.Equals(_btnAddField) Then 
Dim fieldNames As String() = 
_c1rd.Report.DataSource.GetDBFieldList(True) 
If (fieldNames.Length > 0) Then 
f.Text = fieldNames(0) 
f.Calculated = True 
End If 
End If 
End Sub  
C# 
int _ctr = 0; 
private void _c1rd_CreateField(object sender,  
C1.Win.C1ReportDesigner.CreateFieldEventArgs e) 
// save undo info 
_c1rd.UndoStack.SaveState(); 
// add label field 
string fieldName = string.Format("NewField{0}", ++_ctr); 
string fieldText = fieldName; 
Field f = e.Section.Fields.Add(fieldName, fieldText, e.FieldBounds); 
// if this is a calculated field,  
// change the Text and Calculated properties 
if (e.CreateFieldInfo == _btnAddField) 
string[] fieldNames = 
_c1rd.Report.DataSource.GetDBFieldList(true); 
if (fieldNames.Length > 0) 
f.Text = fieldNames[0]; 
f.Calculated = true; 
Note how the code starts by calling the SaveState method on the designer, so the user can undo the field creation. 
After that, the field is created, and the CreateFieldInfo parameter is used to customize the new field and make it 
behave as a label or as a calculated field. 
That concludes the simple designer application: an introduction to the operation of the C1ReportDesigner control. 
Documents you may be interested
Documents you may be interested