upload and view pdf in asp net c# : Copy images from pdf to powerpoint SDK software project wpf winforms windows UWP samplechapter61-part844

163
Accessing an existing PDF with PdfReader
instance, or a 
BadPasswordException
will be thrown. More details about the different
ways you can encrypt a 
PDF
document, and about the different permissions you can
set, will follow in chapter 12.
6.1.2
Reducing the memory use of PdfReader
In most of this book’s examples, you’ll create an instance of 
PdfReader
using a 
String
representing  the  path  to  the  existing 
PDF
file.  Using  this  constructor  will  cause
PdfReader
to load plenty of 
PDF
objects (from the file) into Java objects (in memory).
This can be overkill for large documents, especially if you’re only interested in part of
the document. If that’s the case, you can choose to read the 
PDF
only partially.
PARTIAL READS
Suppose you have a document with 1000 pages. 
PdfReader
will do a full read of these
pages, even if you’re only interested in page 1. You can avoid this by using another
constructor. You can compare the memory used by different 
PdfReader
instances cre-
ated to read the timetable 
PDF
from chapter 3:
public static void main(String[] args) throws IOException {
MovieTemplates.main(args);
PrintWriter writer = new PrintWriter(new FileOutputStream(RESULT));
fullRead(writer, MovieTemplates.RESULT);
partialRead(writer, MovieTemplates.RESULT);
writer.close();
}
public static void fullRead(PrintWriter writer, String filename)
throws IOException {
long before = getMemoryUse();
PdfReader reader = new PdfReader(filename);
reader.getNumberOfPages();
writer.println(String.format("Memory used by full read: %d",
getMemoryUse() - before));
writer.flush();
}
public static void partialRead(PrintWriter writer, String filename)
throws IOException {
long before = getMemoryUse();
PdfReader reader = new PdfReader(
new RandomAccessFileOrArray(filename), null);
reader.getNumberOfPages();
writer.println(String.format("Memory used by partial read: %d",
getMemoryUse() - before));
writer.flush();
}
The file size of the timetable document from chapter 3 is 15 
KB
. The memory used by
a full read is about 35 
KB
, but a partial read needs only 4 
KB
. This is a significant differ-
ence. When reading a file  partially, more memory will be used as soon as you start
working with the reader object, but 
PdfReader
won’t cache unnecessary objects. That
Listing 6.2 MemoryInfo.java
Copy images from pdf to powerpoint - copy, paste, cut PDF images in C#.net, ASP.NET, MVC, Ajax, WinForms, WPF
Detailed tutorial for copying, pasting, and cutting image in PDF page using C# class code
how to cut pdf image; paste picture pdf
Copy images from pdf to powerpoint - VB.NET PDF copy, paste image library: copy, paste, cut PDF images in vb.net, ASP.NET, MVC, Ajax, WinForms, WPF
VB.NET Tutorial for How to Cut or Copy an Image from One Page and Paste to Another
pasting image into pdf; paste picture into pdf
164
C
HAPTER
6
Working with existing PDFs
also makes  a  huge  difference,  so if  you’re dealing with large  documents, consider
using 
PdfReader
with a 
RandomAccessFileOrArray
parameter constructed with a path
to a file.
NOTE
In  part  4,  you’ll  see  how  to  manipulate  a 
PDF
at  the  lowest  level.
You’ll change 
PDF
objects in 
PdfReader
and then save the altered 
PDF
. For
this  to  work,  the  modified  objects  need  to  be  cached.  Depending  on  the
changes you want to apply, using a 
PdfReader
instance created with a 
Ran-
domAccessFileOrArray
may not be an option.
Another way to reduce the memory usage of 
PdfReader
up front is to reduce the num-
ber of pages before you start working with it. 
SELECTING PAGES 
Next, you’ll read the timetable from example 3 once again, but you’ll immediately tell
PdfReader
that you’re only interested in pages 4 to 8.
PdfReader reader = new PdfReader(MovieTemplates.RESULT);
reader.selectPages("4-8");
The general syntax for the range that’s used in the 
selectPages()
method looks like
this:
[!][o][odd][e][even]start[-end]
You can have multiple ranges separated by commas, and the 
!
modifier removes pages
from what is already selected. The range changes are incremental; numbers are added
or deleted as the range appears. The 
start
or the 
end
can be omitted; if you omit
both, you need at least 
o
(
odd
; selects all odd pages) or 
e
(
even
; selects all even pages).
If you ask the reader object for the number of pages before 
selectPages()
in list-
ing 6.3, it will tell you that the document has 8 pages. If you do the same after making
the page selection, it will tell you that there are only 5 pages: pages 4, 5, 6, 7, and 8.
The old page 4 will be the new page 1. Be careful not to try getting information about
pages that are outside the new range. Don’t add the following line to listing 6.3:
reader.getPageSize(6);
This line will throw a 
NullPointerException
because there are no longer 6 pages in
the reader object. 
Now  that  you’ve  had  a  short  introduction  to 
PdfReader
,  you’re  ready  to  start
manipulating existing 
PDF
documents. 
6.2
Copying pages from existing PDF documents
You  probably  remember  the  Superman 
PDF
from  chapter  5.  The 
Hero
example
imported a plain text file containing 
PDF
syntax into the direct content. I explained
that this wasn’t standard practice. If you want to reuse existing content, it’s dangerous
Listing 6.3 SelectPages.java
VB.NET PDF Image Extract Library: Select, copy, paste PDF images
Able to extract images from PDF in both .NET WinForms and ASP.NET project. using RasterEdge.XDoc.PDF; VB.NET: Extract All Images from PDF Document.
how to cut pdf image; how to paste a picture into pdf
C# PDF Image Extract Library: Select, copy, paste PDF images in C#
Able to extract vector images from PDF. Extract all images from whole PDF or a specified PDF page. C#: Extract All Images from PDF Document.
how to copy an image from a pdf in preview; how to copy image from pdf file
165
Copying pages from existing PDF documents
to copy and paste 
PDF
syntax like I did in listing 5.14. There are safer ways to import
existing content, as you’ll find out in the next example.
In this section, you’ll use an object named 
PdfImportedPage
to copy the content from
an existing 
PDF
opened with 
PdfReader
into a new 
Document
written by 
PdfWriter
.
6.2.1
Importing pages
Let’s continue working with the timetable from chapter 3. Suppose you want to reuse
the pages of this document and treat them as if every page were an image. Figure 6.1
shows how you could organize these imported pages into a 
PdfPTable
. The document
in the front of figure 6.1 is created with the code in listing 6.4.   
Document document = new Document();               
PdfWriter writer = PdfWriter.getInstance(  
document, new FileOutputStream(RESULT));     
document.open();                                  
PdfPTable table = new PdfPTable(2);
PdfReader reader = new PdfReader(MovieTemplates.RESULT);
int n = reader.getNumberOfPages();
PdfImportedPage page;
for (int i = 1; i <= n; i++) {
page = writer.getImportedPage(reader, i);
table.addCell(Image.getInstance(page));
}
document.add(table);                      
document.close();              
Listing 6.4 ImportingPages1.java
Figure 6.1 Importing pages from an existing PDF document
Step 1
Step 2
Step 3
Step 4
Step 5
VB.NET PDF Page Extract Library: copy, paste, cut PDF pages in vb.
Please refer to below listed demo codes. VB.NET DLLs: Extract, Copy and Paste PDF Page. VB.NET: Extract All Images from PDF Document.
how to copy and paste image from pdf to word; how to copy pdf image to word document
C# PDF Page Extract Library: copy, paste, cut PDF pages in C#.net
C#.NET PDF Library - Copy and Paste PDF Pages in C#.NET. Easy Ability to copy selected PDF pages and paste into another PDF file. The
how to copy pictures from pdf to word; how to copy pdf image into powerpoint
166
C
HAPTER
6
Working with existing PDFs
You’ll recognize the five steps in the 
PDF
creation process discussed in part 1. Now
you’re also creating a 
PdfReader
object and looping over all the pages, getting 
PdfIm-
portedPage
instances with the 
getImportedPage()
method (as highlighted in bold).
What does this method do?
PAGE CONTENT AND RESOURCES 
If you browse the 
API
of the 
PdfReader
class, you’ll discover the 
getPageContent()
method, which returns the content stream of a page. This content stream is very simi-
lar to what’s inside the hero.txt file. In general, such a content stream contains refer-
ences to external objects, images, and fonts. 
In section 3.4.1, for instance, we examined the 
PDF
syntax needed to draw a raster
image:
q 232 0 0 362 25.5 27 cm /img0 Do Q
In this snippet, 
/img0
referred to a key in the 
/Resources
dictionary of the page. The
corresponding value was a reference to a stream object containing the bits and bytes of
the image. Without the bits and bytes of the image, the 
PDF
syntax referring to 
/img0
is meaningless.
WARNING
It  doesn’t make  sense  to  get the content stream of a page  from
one 
PDF
document, and copy that stream into another 
PDF
without copying
all the resources that are needed.
The 
Hero
example was an exception: the syntax to draw the vector image of Superman
was self-contained, and  this  is  very unusual. As soon as  there’s text  involved, you’ll
have at least a reference to a font. If you don’t copy that font, you’ll get warnings or
errors, such as  “Could not find a font in the  Resources dictionary.” That’s why it’s
never advisable to extract a page from 
PdfReader
directly. Instead, you should pass the
reader object to the writer class, and ask the writer (not the reader!) to import a page.
PdfImportedPage
object is returned. Behind the scenes, all the necessary resources
(such as images and fonts) are retrieved and copied to the writer.
FAQ
Why  are  all my links  lost  when  I  copy a page with 
PdfImportedPage
? It’s
important  to  understand the  difference  between  resources  needed  to  ren-
der the content of a page and the interactive features of a page. In general,
these  features  are  called  annotations.  They  include  links,  text  annotations,
and form fields. Annotations aren’t part of the content stream. They aren’t
listed in the resources dictionary of the page, but in the annotation diction-
ary. These  interactive  features aren’t copied when  using 
PdfImportedPage
,
which means that all interactivity is lost when copying a page with the 
get-
ImportedPage()
method of the 
PdfWriter
class.
The 
PdfImportedPage
class extends 
PdfTemplate
, but you can’t add any new content
to it. It’s a read-only 
XO
bject you can reuse in a document with the method 
addTem-
plate()
; or you can wrap it inside an 
Image
. You’ve already used these techniques in
C# Create PDF from PowerPoint Library to convert pptx, ppt to PDF
Create PDF from PowerPoint. |. Home ›› XDoc.PDF ›› C# PDF: Create PDF from PowerPoint. C#.NET PDF SDK- Create PDF from PowerPoint in C#.
copy a picture from pdf; how to copy pdf image into word
C# Create PDF from images Library to convert Jpeg, png images to
C#.NET Project DLLs for Conversion from Images to PDF in C#.NET Program. C# Example: Convert More than Two Type Images to PDF in C#.NET Application.
cut and paste pdf image; paste image into pdf
167
Copying pages from existing PDF documents
section 3.4. The original dimensions of each imported page are the same as the origi-
nal media box, but in this example, the 
PdfImportedPage
s are scaled to fit inside a
table. Note that the rotation of the original page isn’t taken into account. If that’s a
problem, you’ll have to apply the rotation.
PdfPTable table = new PdfPTable(2);
for (int i = 1; i <= n; i++) {
page = writer.getImportedPage(reader, i);
table.getDefaultCell().setRotation(-reader.getPageRotation(i));
table.addCell(Image.getInstance(page));
}
You can see  the  result in figure 6.1 (the figure in  the  back). Observe that cell and
image rotations go counterclockwise. In the next example, we’ll look at how to apply
more transformations. 
6.2.2
Scaling and superimposing pages
You can transform pages in iText, just like you can transform images. Do you remem-
ber figure 3.2? That was the image I used to explain the different content layers used
by iText. I created this image by generating a document with four pages, and then
importing those pages into a new one; see figure 6.2.
The imported pages are added to the new 
PDF
document using 
addTemplate()
.
The parameters are calculated so that each page is scaled and skewed. 
Listing 6.5 ImportingPages2.java
Figure 6.2 Scaling and skewing pages from an existing PDF
VB.NET PDF Convert to Jpeg SDK: Convert PDF to JPEG images in vb.
& pages edit, C#.NET PDF pages extract, copy, paste, C# Viewer, C# Online Dicom Viewer, C# Online Jpeg images Viewer, C# VB.NET How-to, VB.NET PDF, VB.NET Word
how to copy and paste an image from a pdf; paste picture into pdf preview
VB.NET Create PDF from PowerPoint Library to convert pptx, ppt to
Images. File & Page Process. File: Merge, Append PDF Files. File: Split PDF Document. Page: Replace PDF Pages. Page: Move Page Position. Page: Copy, Paste PDF
copy image from pdf to word; copy image from pdf acrobat
168
C
HAPTER
6
Working with existing PDFs
PdfContentByte canvas = writer.getDirectContent();
PdfImportedPage page;
BaseFont bf = BaseFont.createFont(BaseFont.ZAPFDINGBATS, "", 
BaseFont.EMBEDDED);
for (int i = 0; i < reader.getNumberOfPages(); ) {
page = writer.getImportedPage(reader, ++i);
canvas.addTemplate(page, 1f, 0, 0.4f, 0.4f, 72, 50 * i);
canvas.beginText();
canvas.setFontAndSize(bf, 20);
canvas.showTextAligned(Element.ALIGN_CENTER,
String.valueOf((char)(181 + i)), 496, 150 + 50 * i, 0);
canvas.endText();
}
A common technique used with 
PDF
files is called superimposing.
SUPERIMPOSING PDF PAGES
Superimposing means that you add different 
PDF
pages on top of each other on the
same page. You could do this with the four pages shown to the left in figure 6.2 to
obtain the 
PDF
shown in figure 6.3.   
PdfReader reader = new PdfReader(SOURCE);
Document document = new Document(PageSize.POSTCARD);
PdfWriter writer = PdfWriter.getInstance(document, 
new FileOutputStream(RESULT));
document.open();
PdfContentByte canvas = writer.getDirectContent();
PdfImportedPage page;
Listing 6.6 Layers.java
Listing 6.7 Superimposing.java
Figure 6.3 PDF created by 
superimposing four different pages
169
Copying pages from existing PDF documents
for (int i = 1; i <= reader.getNumberOfPages(); i++) {
page = writer.getImportedPage(reader, i);
canvas.addTemplate(page, 1f, 0, 0, 1, 0, 0);
}
document.close();
Superimposing is often used to create documents with a standard header and footer.
IMPORTING COMPANY STATIONERY
Suppose your company has preprinted paper containing the company name and logo
in the letterhead, and maybe also a watermark. All letters are printed on this company
stationery. You can achieve something similar with 
PDF
, as shown in figure 6.4.
In figure 6.4, the 
PDF
to the left is the equivalent of the preprinted paper. When creat-
ing a new document, as shown to the right, the template page is imported and added
to the background of each new page using a page event. 
public class Stationery extends PdfPageEventHelper {
protected PdfImportedPage page;
public void useStationary(PdfWriter writer) throws IOException {
writer.setPageEvent(this);
PdfReader reader = new PdfReader(STATIONERY);
page = writer.getImportedPage(reader, 1);
Listing 6.8 Stationery.java
Figure 6.4 Using an existing PDF as background image for new PDFs
170
C
HAPTER
6
Working with existing PDFs
}
public void onEndPage(PdfWriter writer, Document document) {
writer.getDirectContentUnder().addTemplate(page, 0, 0);
}
}
We’ll  conclude  the  series  of 
PdfImportedPage
examples  by  introducing  two  more
concepts. 
6.2.3
N-up copying and tiling PDF documents
When searching for 
PDF
tools on the internet, you’ll find numerous small tools that
are designed to meet specific requirements, such as one that creates an N-up layout in
PDF
file. 
To cut paper costs by 50 percent when printing a 
PDF
document, you can copy an
existing 
PDF
into a new one that has half the number of pages. All you have to do is
put two pages next to each other on one page. This is called 2-up copying. Figure 6.5
shows  the  document  you  created  in  the  previous  example  in  its  2-up,  4-up,  8-up,
and 16-up forms.
Most of the tools you can find online have iText on the inside.   
Figure 6.5
N
-up copying combines multiple pages onto one page
171
Copying pages from existing PDF documents
public void manipulatePdf(String src, String dest, int pow)
throws IOException, DocumentException {
PdfReader reader = new PdfReader(src);
Rectangle pageSize = reader.getPageSize(1);          
Rectangle newSize = (pow % 2) == 0 ?            
new Rectangle(                                       
pageSize.getWidth(), pageSize.getHeight()) :
new Rectangle(                                
pageSize.getHeight(), pageSize.getWidth()); 
Rectangle unitSize = new Rectangle(                
pageSize.getWidth(), pageSize.getHeight());            
for (int i = 0; i < pow; i++) {                    
unitSize = new Rectangle(                        
unitSize.getHeight() / 2, unitSize.getWidth());
                                                 
int n = (int)Math.pow(2, pow);                       
int r = (int)Math.pow(2, pow / 2);                    
int c = n / r;                                       
Document document = new Document(newSize, 0, 0, 0, 0);
PdfWriter writer = PdfWriter.getInstance(document,
new FileOutputStream(String.format(dest, n)));
document.open();
PdfContentByte cb = writer.getDirectContent();
PdfImportedPage page;
Rectangle currentSize;
float offsetX, offsetY, factor;
int total = reader.getNumberOfPages();
for (int i = 0; i < total; ) {
if (i % n == 0) {
document.newPage();
}
currentSize = reader.getPageSize(++i);            
factor = Math.min(                                     
unitSize.getWidth() / currentSize.getWidth(),   
unitSize.getHeight() / currentSize.getHeight());
offsetX = unitSize.getWidth() * ((i % n) % c)      
+(unitSize.getWidth()                                  
- (currentSize.getWidth() * factor))/2f;         
offsetY = newSize.getHeight()                      
- (unitSize.getHeight() * (((i % n) / c) + 1))   
+ (unitSize.getHeight()                          
- (currentSize.getHeight() * factor))/2f;        
page = writer.getImportedPage(reader, i);        
cb.addTemplate(page,                              
factor, 0, 0, factor, offsetX, offsetY);       
}
document.close();
}
Listing 6.9 NUp.java
Gets original 
page size
Sets page size of 
new document
Calculates page 
size of unit
Calculates 
helper variables
Calculates 
scale factor
Calculates 
offset
Scales and 
positions page
172
C
HAPTER
6
Working with existing PDFs
The opposite of N-up copying a 
PDF
file is when you have one page, and you want to
print it on different pages; see figure 6.6. We already looked at this in chapter 5, but
now you’ll do the exercise again using 
PdfImportedPage
.
The next bit of code takes one page from a 
PDF
document and scales it so that the
one page is “tiled” over 16 pages.
public void manipulatePdf(String src, String dest)
throws IOException, DocumentException {
PdfReader reader = new PdfReader(src);
Rectangle pagesize = reader.getPageSizeWithRotation(1);
Document document = new Document(pagesize);
PdfWriter writer =
PdfWriter.getInstance(document, new FileOutputStream(dest));
document.open();
PdfContentByte content = writer.getDirectContent();
PdfImportedPage page = writer.getImportedPage(reader, 1);
float x, y;
for (int i = 0; i < 16; i++) {
x = -pagesize.getWidth() * (i % 4);
y = pagesize.getHeight() * (i / 4 - 3);
content.addTemplate(page, 4, 0, 0, 4, x, y);
document.newPage();
}
document.close();
}
Listing 6.10 TilingHero.java
Figure 6.6 Scaling and tiling a PDF file
Documents you may be interested
Documents you may be interested