asp.net c# pdf viewer : Break a pdf into separate pages SDK Library API .net asp.net web page sharepoint O%27Reilly%20-%20C++%20Cookbook%20(2007)29-part406

Page 291
ABC Amber CHM Converter Trial version, http://www.processtext.com/abcchm.html
Break a pdf into separate pages - Split, seperate PDF into multiple files in C#.net, ASP.NET, MVC, Ajax, WinForms, WPF
Explain How to Split PDF Document in Visual C#.NET Application
acrobat separate pdf pages; c# print pdf to specific printer
Break a pdf into separate pages - VB.NET PDF File Split Library: Split, seperate PDF into multiple files in vb.net, ASP.NET, MVC, Ajax, WinForms, WPF
VB.NET PDF Document Splitter Control to Disassemble PDF Document
split pdf into individual pages; break pdf into multiple pages
Page 292
ABC Amber CHM Converter Trial version, http://www.processtext.com/abcchm.html
Recipe 7.7. Partitioning a Range
Problem
You have a range of elements that you need to partition in some well-defined way. For example, you
may want all elements less than a particular value moved to the front of the range.
Solution
Use the partition standard algorithm with a predicate functor to move the elements around however you
like. See Example 7-7
.
Example 7-7. Partitioning a range
#include <iostream>
#include <istream>
#include <string>
#include <vector>
#include <algorithm>
#include <functional>
#include <iterator>
#include "utils.h" // For printContainer( ): see Recipe 7.10
using namespace std;
int main( ) {
cout << "Enter a series of strings: ";
istream_iterator<string> start(cin);
istream_iterator<string> end; // This creates a "marker"
vector<string> v(start, end);
// Rearrange the elements in v so that those that are less
// than "foo" occur before the rest.
vector<string>::iterator p = 
partition(v.begin( ), v.end( ),
bind2nd(less<string>( ), "foo"));
printContainer(v);
cout << "*p = " << *p << endl;
}
The output for Example 7-7
would look like the following:
Enter a series of strings: a d f j k l
^Z
-----
a d f j k l
*p = j
After the partition, the iterator p refers to the first element for which less(*p, "foo") is not true.
Discussion
partition takes the beginning and end of a range and a predicate, and moves all elements for which the
predicate is true to the beginning of the range. It returns an iterator to the first element where the
predicate is not TRue, or the end of the range if all elements satisfy the predicate. Its declaration looks
like this:
Bi partition(Bi first, Bi last, Pred pred);
pred is a functor that takes one argument and returns TRue or false. There is no default predicate; you
Page 293
ABC Amber CHM Converter Trial version, http://www.processtext.com/abcchm.html
Page 294
ABC Amber CHM Converter Trial version, http://www.processtext.com/abcchm.html
Page 295
ABC Amber CHM Converter Trial version, http://www.processtext.com/abcchm.html
Recipe 7.8. Performing Set Operations on Sequences
Problem
You have sequences that you want to rearrange using set operations like union, difference, or
intersection.
Solution
Use the standard library functions built for exactly this purpose: set_union , set_dif-ference , and
set_intersection . Each of these performs its respective set operation and places the results in an output
range. See how to do this in Example 7-8
.
Example 7-8. Using set operations
#include <iostream>
#include <algorithm>
#include <string>
#include <set>
#include <iterator>
#include "utils.h" // For printContainer( ): see 7.10
using namespace std;
int main( ) {
cout << "Enter some strings: ";
istream_iterator<string> start(cin);
istream_iterator<string> end;
set<string> s1(start, end);
cin.clear( );
cout << "Enter some more strings: ";
set<string> s2(++start, end);
set<string> setUnion;
set<string> setInter;
set<string> setDiff;
set_union(s1.begin( ), s1.end( ),
s2.begin( ), s2.end( ),
inserter(setUnion, setUnion.begin( )));
set_difference(s1.begin( ), s1.end( ),
s2.begin( ), s2.end( ),
inserter(setDiff, setDiff.begin( )));
set_intersection(s1.begin( ), s1.end( ),
s2.begin( ), s2.end( ),
inserter(setInter, setInter.begin( )));
cout << "Union:\n";
printContainer(setUnion);
cout << "Difference:\n";
printContainer(setDiff);
cout << "Intersection:\n";
printContainer(setInter);
}
The output to this program looks like this (printContainer just prints the contents of a container):
Enter some strings: a b c d
Page 296
ABC Amber CHM Converter Trial version, http://www.processtext.com/abcchm.html
Page 297
ABC Amber CHM Converter Trial version, http://www.processtext.com/abcchm.html
Page 298
ABC Amber CHM Converter Trial version, http://www.processtext.com/abcchm.html
Recipe 7.9. Transforming Elements in a Sequence
Problem
You have a sequence of elements and you have to do something to each one, either in place or as it is
copied to another sequence.
Solution
Use the transform or for_each standard algorithms. Both are simple, but allow you to do almost anything
you want to the elements in your sequence. See Example 7-9
for an illustration.
Example 7-9. Transforming data
#include <iostream>
#include <istream>
#include <string>
#include <list>
#include <algorithm>
#include <iterator>
#include <cctype>
#include "utils.h" // For printContainer( ): see 7.10
using namespace std;
// Convert a string to upper case
string strToUpper(const string& s) {
string tmp;
for (string::const_iterator p = s.begin( ); p != s.end( ); ++p)
tmp += toupper(*p);
return(tmp);
}
string strAppend(const string& s1, const string& s2) {
return(s1 + s2);
}
int main( ) {
cout << "Enter a series of strings: ";
istream_iterator<string> start(cin);
istream_iterator<string> end;
list<string> lst(start, end), out;
// Use transform with an unary function...
transform(lst.begin( ), lst.end( ),
back_inserter(out),
strToUpper);
printContainer(out);
cin.clear( );
cout << "Enter another series of strings: ";
list<string> lst2(++start, end);
out.clear( );
// ...or a binary function and another input sequence.
transform(lst.begin( ), lst.end( ), lst2.begin( ),
back_inserter(out),
strAppend);
printContainer(out);
Page 299
ABC Amber CHM Converter Trial version, http://www.processtext.com/abcchm.html
Page 300
ABC Amber CHM Converter Trial version, http://www.processtext.com/abcchm.html
Documents you may be interested
Documents you may be interested