c# pdf to image conversion : Create a pdf form software control dll winforms web page wpf web forms book_00719-part1814

14.8. Programmingwithmultipletables
177
if cur.rowcount != 1 :
print
'
Error inserting account:
'
,friend
continue
friend_id = cur.lastrowid
countnew = countnew + 1
Ifweendupinthe
except
code,itsimplymeansthattherowwasnotfoundso
wemustinserttherow. Weuse
INSERT OR IGNORE
justtoavoiderrorsandthen
call
commit()
toforcethedatabasetoreallybeupdated.Afterthewriteisdone,
wecancheckthe
cur.rowcount
toseehowmanyrowswereaffected.Sincewe
areattemptingtoinsertasinglerow,ifthenumberofaffectedrowsissomething
otherthanone,itisanerror.
Ifthe
INSERT
issuccessful,wecanlookat
cur.lastrowid
tofindoutwhatvalue
thedatabaseassignedtothe
id
columninournewlycreatedrow.
14.8.3 Storingthefriendrelationship
OnceweknowthekeyvalueforboththeTwitteruserandthefriendintheXML,
itisasimplemattertoinsertthetwonumbersintothe
Follows
tablewiththe
followingcode:
cur.execute(
'
INSERT OR IGNORE INTO Follows (from_id, to_id) VALUES S (?, , ?)
'
,
(id, friend_id) )
Noticethatweletthedatabasetakecareofkeepingusfrom“double-inserting”a
relationshipbycreatingthetablewithauniquenessconstraintandthenadding
OR
IGNORE
toour
INSERT
statement.
Hereisasampleexecutionofthisprogram:
Enter a a Twitter r account, , or quit:
No unretrieved Twitter accounts found
Enter a a Twitter r account, , or quit: drchuck
Retrieving http://api.twitter.com/l/statuses/friends/drchuck.xml
New accounts= 100
revisited= 0
Enter a a Twitter r account, , or quit:
Retrieving http://api.twitter.com/l/statuses/friends/opencontent.xml
New accounts= 97
revisited= 3
Enter a a Twitter r account, , or quit:
Retrieving http://api.twitter.com/l/statuses/friends/lhawthorn.xml
New accounts= 97
revisited= 3
Enter a a Twitter r account, , or quit: quit
Westartedwiththe
drchuck
accountandthenlettheprogramautomaticallypick
thenexttwoaccountstoretrieveandaddtoourdatabase.
Thefollowingisthefirstfewrowsinthe
People
and
Follows
tablesafterthisrun
iscompleted:
Create a pdf form - C# PDF Field Edit Library: insert, delete, update pdf form field in C#.net, ASP.NET, MVC, Ajax, WPF
Online C# Tutorial to Insert, Delete and Update Fields in PDF Document
add fillable fields to pdf; edit pdf form
Create a pdf form - VB.NET PDF Field Edit library: insert, delete, update pdf form field in vb.net, ASP.NET, MVC, Ajax, WPF
How to Insert, Delete and Update Fields in PDF Document with VB.NET Demo Code
can save pdf form data; pdf form change font size
178
Chapter14. UsingdatabasesandStructuredQueryLanguage(SQL)
People:
(1, u
'
drchuck
'
, 1)
(2, u
'
opencontent
'
, 1)
(3, u
'
lhawthorn
'
, 1)
(4, u
'
steve_coppin
'
, 0)
(5, u
'
davidkocher
'
, 0)
295 rows.
Follows:
(1, 2)
(1, 3)
(1, 4)
(1, 5)
(1, 6)
300 rows.
Youcanseethe
id
,
name
,and
visited
fieldsinthe
People
tableandyousee
thenumbersofbothendsoftherelationship
Follows
table.Inthe
People
table,
wecanseethatthefirstthreepeoplehavebeenvisitedandtheirdatahasbeen
retrieved.Thedatainthe
Follows
tableindicatesthat
drchuck
(user1)isafriend
toallofthepeopleshowninthefirstfiverows.Thismakessensebecausethefirst
dataweretrievedandstoredwastheTwitterfriendsof
drchuck
. Ifyouwereto
printmorerowsfromthe
Follows
table,youwouldseethefriendsofusertwo
andthreeaswell.
14.9 Threekindsofkeys
Nowthatwehavestartedbuildingadatamodelputtingourdataintomultiple
linkedtables,andlinkingtherowsinthosetablesusingkeys,weneedtolookat
someterminologyaroundkeys.Therearegenerallythreekindsofkeysusedina
databasemodel.
• Alogicalkeyisakeythatthe“realworld”mightusetolookuparow.In
ourexampledatamodel,the
name
fieldisalogicalkey.Itisthescreenname
fortheuserandweindeedlookupauser’srowseveraltimesintheprogram
usingthe
name
field.Youwilloftenfindthatitmakessensetoadda
UNIQUE
constrainttoalogicalkey. Sincethelogicalkeyishowwelookuparow
fromtheoutsideworld,itmakeslittlesensetoallowmultiplerowswiththe
samevalueinthetable.
• Aprimarykeyisusuallyanumberthatisassignedautomaticallybythe
database.Itgenerallyhasnomeaningoutsidetheprogramandisonlyused
tolinkrowsfromdifferenttablestogether.Whenwewanttolookuparow
inatable,usuallysearchingfortherowusingtheprimarykeyisthefastest
waytofindarow. Sinceprimarykeysareintegernumbers,theytakeup
verylittlestorageandcanbecomparedorsortedveryquickly. Inourdata
model,the
id
fieldisanexampleofaprimarykey.
VB.NET PDF Form Data Read library: extract form data from PDF in
RasterEdge .NET PDF SDK is such one provide various of form field edit functions. Demo Code to Retrieve All Form Fields from a PDF File in VB.NET.
pdf fillable form creator; pdf create fillable form
C# PDF Form Data Read Library: extract form data from PDF in C#.
A best PDF document SDK library enable users abilities to read and extract PDF form data in Visual C#.NET WinForm and ASP.NET WebForm applications.
pdf form save with reader; adding images to pdf forms
14.10. UsingJOINtoretrievedata
179
• A foreignkeyisusuallyanumberthatpointstotheprimarykeyofan
associatedrowinadifferenttable.Anexampleofaforeignkeyinourdata
modelisthe
from_id
.
Weareusinganamingconventionofalwayscallingtheprimarykeyfieldname
id
andappendingthesuffix
_id
toanyfieldnamethatisaforeignkey.
14.10 UsingJOINtoretrievedata
Now thatwehavefollowedtherules ofdatabasenormalizationandhavedata
separatedintotwotables,linkedtogetherusingprimaryandforeignkeys,weneed
tobeabletobuilda
SELECT
thatre-assemblesthedataacrossthetables.
SQLusesthe
JOIN
clausetore-connectthesetables. Inthe
JOIN
clauseyou
specifythefieldsthatareusedtore-connecttherowsbetweenthetables.
Thefollowingisanexampleofa
SELECT
witha
JOIN
clause:
SELECT * * FROM Follows JOIN N People
ON Follows.to_id d = People.id WHERE Follows.from_id = = 2
The
JOIN
clauseindicatesthatthefieldsweareselectingcrossboththe
Follows
and
People
tables. The
ON
clauseindicateshowthetwotablesaretobejoined.
Taketherowsfrom
Follows
andappendtherowfrom
People
wherethefield
from_id
in
Follows
isthesamethe
id
valueinthe
People
table.
People
name
drchuck
opencontent
1
1
retrieved
Follows
from_id
1
1
3
to_id
id
1
2
3
4
lhawthorn
steve_coppin
1
0
2
1
4
...
...
name
drchuck
opencontent
id
1
2
3
4
lhawthorn
steve_coppin
drchuck
1
drchuck
1
to_id
name
from_id
1
1
1
The result of the JOIN is to create extra-long “meta-rows” which have both the
fields from
People
and the matching fields from
Follows
. Where there is more
than one match between the
id
field from
People
and the
from_id
from
People
,
then JOIN creates a meta-row for each of the matching pairs of rows, duplicating
data as needed.
The following code demonstrates the data that we will have in the database after
the multi-table Twitter spider program (above) has been run several times.
VB.NET Create PDF from PowerPoint Library to convert pptx, ppt to
Edit Bookmark. Metadata: Edit, Delete Metadata. Form Process. Text. Add Text Box. Drawing Markups. PDF Print. Work Barcode Read. Barcode Create. OCR. Twain. Create
create a fillable pdf form in word; convert word to editable pdf form
VB.NET Create PDF from Word Library to convert docx, doc to PDF in
Edit Bookmark. Metadata: Edit, Delete Metadata. Form Process. Text. Add Text Box. Drawing Markups. PDF Print. Work Barcode Read. Barcode Create. OCR. Twain. Create
change font pdf fillable form; pdf editable fields
180
Chapter 14. Using databases and Structured Query Language (SQL)
import sqlite3
conn = sqlite3.connect(
'
twdata.db
'
)
cur = conn.cursor()
cur.execute(
'
SELECT * FROM People
'
)
count = 0
print
'
People:
'
for row in cur :
if count < 5: print row
count = count + 1
print count,
'
rows.
'
cur.execute(
'
SELECT * FROM Follows
'
)
count = 0
print
'
Follows:
'
for row in cur :
if count < 5: print row
count = count + 1
print count,
'
rows.
'
cur.execute(
'''
SELECT * FROM Follows JOIN People
ON Follows.to_id = People.id WHERE Follows.from_id = 2
'''
)
count = 0
print
'
Connections for id=2:
'
for row in cur :
if count < 5: print row
count = count + 1
print count,
'
rows.
'
cur.close()
In this program, we first dump out the
People
and
Follows
and then dump out a
subset of the data in the tables joined together.
Here is the output of the program:
python twjoin.py
People:
(1, u
'
drchuck
'
, 1)
(2, u
'
opencontent
'
, 1)
(3, u
'
lhawthorn
'
, 1)
(4, u
'
steve_coppin
'
, 0)
(5, u
'
davidkocher
'
, 0)
295 rows.
Follows:
(1, 2)
(1, 3)
(1, 4)
(1, 5)
(1, 6)
300 rows.
Connections for id=2:
(2, 1, 1, u
'
drchuck
'
, 1)
(2, 28, 28, u
'
cnxorg
'
, 0)
VB.NET Create PDF from Excel Library to convert xlsx, xls to PDF
Edit Bookmark. Metadata: Edit, Delete Metadata. Form Process. Text. Add Text Box. Drawing Markups. PDF Print. Work Barcode Read. Barcode Create. OCR. Twain. Create
pdf save form data; add photo to pdf form
VB.NET PDF Convert to Tiff SDK: Convert PDF to tiff images in vb.
Qualified Tiff files are exported with high resolution in VB.NET. Create multipage Tiff image files from PDF in VB.NET project. Support
build pdf forms; chrome pdf save form data
14.11. Summary
181
(2, 30, 30, u
'
kthanos
'
, 0)
(2, 102, 102, u
'
SomethingGirl
'
, 0)
(2, 103, 103, u
'
ja_Pac
'
, 0)
100 rows.
You see the columns from the
People
and
Follows
tables and the last set of rows
is the result of the
SELECT
with the
JOIN
clause.
In the last select, we are looking for accounts that are friends of “opencontent”
(i.e.
People.id=2
).
In each of the “meta-rows” in the last select, the first two columns are from the
Follows
tablefollowed by columnsthree through fivefrom the
People
table. You
can also see that the second column (
Follows.to_id
)matches the third column
(
People.id
)in each of the joined-up “meta-rows”.
14.11 Summary
This chapter has covered a lot of ground to give you an overview of the basics
of using a database in Python. It is more complicated to write the code to use a
database to store data than Python dictionaries or flat files so there is little reason
to usea databaseunless your application truly needs the capabilities of a database.
The situations where adatabase can bequite useful are: (1) when your application
needs to make small many random updates within a large data set, (2) when your
data is so large it cannot fit in a dictionary and you need to look up information
repeatedly, or (3) you have a long-running process that you want to be able to stop
and restart and retain the data from one run to the next.
You can build asimpledatabase with asingletable to suit many application needs,
but most problems will requireseveral tables and links/relationships between rows
in different tables. When you start making links between tables, it is important to
do some thoughtful design and followthe rules of database normalization to make
the best use of the database’s capabilities. Since the primary motivation for using
adatabase is that you have a large amount of data to deal with, it is important to
model your data efficiently so your programs run as fast as possible.
14.12 Debugging
One common pattern when you are developing a Python program to connect to an
SQLite database will be to run a Python program and check the results using the
SQLiteDatabase Browser. The browser allows you to quickly check to seeif your
program is working properly.
You must becareful because SQLite takes careto keep two programs from chang-
ing the same data at the same time. For example, if you open a database in the
C# Create PDF from Tiff Library to convert tif images to PDF in C#
Create PDF from Tiff. |. Home ›› XDoc.PDF ›› C# PDF: Create PDF from Tiff. Create PDF from Tiff in both .NET WinForms and ASP.NET application.
create pdf forms; change font in pdf form
C# Create PDF from Excel Library to convert xlsx, xls to PDF in C#
C#.NET PDF SDK- Create PDF from Word in Visual C#. Online C#.NET Tutorial for Create PDF from Microsoft Office Excel Spreadsheet Using .NET XDoc.PDF Library.
android edit pdf forms; add fillable fields to pdf online
182
Chapter 14. Using databases and Structured Query Language (SQL)
browser and make a change to the database and have not yet pressed the “save”
button in the browser, the browser “locks” the database file and keeping any other
program from accessing the file. In particular, your Python program will not be
able to access the file if it is locked.
So a solution is to make sure to either close the database browser or use the
File menu to close the database in the browser before you attempt to access the
database from Python to avoid the problem of your Python code failing because
the database is locked.
14.13 Glossary
attribute: One of the values within a tuple. More commonly called a “column”
or “field”.
constraint: When we tell the database to enforce a rule on a field or a row in a
table. A common constraint is to insist that there can be no duplicatevalues
in a particular field (i.e. all the values must be unique).
cursor: Acursor allows you to execute SQL commands in adatabaseand retrieve
data from the database. A cursor is similar to a socket or file handle for
network connections and files respectively.
database browser: A piece of software that allows you to directly connect to a
database and manipulate the database directly without writing a program.
foreign key: A numeric key that points to the primary key of a row in another
table. Foreign keys establish relationships between rows stored in different
tables.
index: Additional data that the database software maintains as rows are inserted
into a table designed to make lookups very fast.
logical key: A key that the “outside world” uses to look up a particular row. For
example in a table of user accounts, a person’s e-mail address might be a
good candidate as the logical key for the user’s data.
normalization: Designing a data model so that no data is replicated. We store
each item of data at one place in the database and reference it elsewhere
using a foreign key.
primary key: A numeric key assigned to each rowthat isused to refer to one row
in a table from another table. Often the database is configured to automati-
cally assign primary keys as rows are inserted.
relation: An area within a database that contains tuples and attributes. More
typically called a “table”.
tuple: A single entry in a database table that is a set of attributes. More typically
called “row”.
C# Create PDF from PowerPoint Library to convert pptx, ppt to PDF
C#.NET PDF SDK- Create PDF from PowerPoint in C#. How to Use C#.NET PDF Control to Create PDF from Microsoft PowerPoint Presentation in .NET Project.
pdf form maker; changing font size in a pdf form
C# Create PDF from Word Library to convert docx, doc to PDF in C#.
Create PDF from Word. |. Home ›› XDoc in C#. C# Demo Code to Create PDF Document from Word in C# Program with .NET XDoc.PDF Component.
add image field to pdf form; change font on pdf form
Chapter 15
Automating common tasks on
your computer
We have been reading data from files, networks, services, and databases. Python
can also go through all of the directories and folders on your computers and read
those files as well.
In this chapter, we will write programs that scan scan through your computer and
perform some operation on each file. Files are organized into directories (also
called “folders”). Simple Python scripts can make short work of simple tasks that
must be done to hundreds or thousands of files spread across a directory tree or
your entire computer.
To walk through all the directories and files in a tree we use
os.walk
and a
for
loop. This is similar to how
open
allows us to write aloop to read the contents of a
file,
socket
allows us to writea loop to read the contents of anetwork connection,
and
urllib
allows us to open a web document and loop through its contents.
15.1 File names and paths
Every running program has a “current directory,” which is thedefault directory for
most operations. For example, when you open a file for reading, Python looks for
it in the current directory.
The
os
moduleprovides functions for working with files and directories(
os
stands
for “operating system”).
os.getcwd
returns the name of the current directory:
>>> import os
>>> cwd = os.getcwd()
>>> print cwd
/Users/csev
184
Chapter 15. Automating common tasks on your computer
cwd
stands for current working directory. The result in this example is
/Users/csev
,which is the home directory of a user named
csev
.
Astring like
cwd
that identifies a file is called a path. A relative path starts from
the current directory; an absolute path starts from the topmost directory in the file
system.
The paths we haveseen so far are simple file names, so they are relativeto the cur-
rent directory. To find the absolute path to a file, you can use
os.path.abspath
:
>>> os.path.abspath(
'
memo.txt
'
)
'
/Users/csev/memo.txt
'
os.path.exists
checks whether a file or directory exists:
>>> os.path.exists(
'
memo.txt
'
)
True
If it exists,
os.path.isdir
checks whether it’s a directory:
>>> os.path.isdir(
'
memo.txt
'
)
False
>>> os.path.isdir(
'
music
'
)
True
Similarly,
os.path.isfile
checks whether it’s a file.
os.listdir
returns a list of the files (and other directories) in the given directory:
>>> os.listdir(cwd)
[
'
music
'
,
'
photos
'
,
'
memo.txt
'
]
15.2 Example: Cleaning up a photo directory
Some time ago, I built a bit of Flickr-like software that received photos from my
cell phone and stored those photos on my server. I wrote this before Flickr existed
and kept using it after Flickr existed because I wanted to keep original copies of
my images forever.
Iwould also send a simple one-line text description in the MMS message or the
subject line of the e-mail message. I stored these messages in a text file in the
same directory as the image file. I came up with a directory structure based on
the month, year, day and time the photo was taken. The following would be an
example of the naming for one photo and its existing description:
./2006/03/24-03-06_2018002.jpg
./2006/03/24-03-06_2018002.txt
After seven years, I had a lot of photos and captions. Over the years as I switched
cell phones, sometimes my code to extract the caption from the message would
break and add a bunch of useless data on my server instead of a caption.
15.2. Example: Cleaning up a photo directory
185
Iwanted to go through these files and figure out which of thetext files were really
captions and which were junk and then delete the bad files. The first thing to do
was to get a simple inventory of how many text files I had in of the sub-folders
using the following program:
import os
count = 0
for (dirname, dirs, files) in os.walk(
'
.
'
):
for filename in files:
if filename.endswith(
'
.txt
'
) :
count = count + 1
print
'
Files:
'
, count
python txtcount.py
Files: 1917
The key bit of code that makes this possible is the
os.walk
library in Python.
When we call
os.walk
and give it a starting directory, it will “walk” through all
of the directories and sub-directories recursively. The string “.” indicates to start
in the current directory and walk downward. As it encounters each directory, we
get three values in a tuple in the body of the
for
loop. The first value is the
current directory name, the second value isthelist of sub-directories in the current
directory, and the third value is a list of files in the current directory.
We do not have to explicitly look into each of the sub-directories because we can
count on
os.walk
to visit every folder eventually. But we do want to look at
each file, so we write a simple
for
loop to examine each of the files in the current
directory. Wecheck each file to seeif it ends with “.txt” and then count the number
of files through the whole directory tree that end with the suffix “.txt”.
Once we have a sense of how many files end with “.txt”, the next thing to do is try
to automatically determine in Python which files arebad and which files are good.
So we write a simple program to print out the files and the size of each file:
import os
from os.path import join
for (dirname, dirs, files) in os.walk(
'
.
'
):
for filename in files:
if filename.endswith(
'
.txt
'
) :
thefile = os.path.join(dirname,filename)
print os.path.getsize(thefile), thefile
Now instead of just counting the files, we create a file name by concatenating the
directory name with thename of thefilewithin the directory using
os.path.join
.
It is important to use
os.path.join
instead of string concatenation because on
Windows we use a backslash (
\
)to construct file paths and on Linux or Apple
we use a forward slash (
/
)to construct file paths. The
os.path.join
knows
these differences and knows what system we are running on and it does the proper
concatenation depending on the system. So the same Python code runs on either
Windows or UNIX-style systems.
186
Chapter 15. Automating common tasks on your computer
Once we have thefull filename with directory path, we usethe
os.path.getsize
utility to get the size and print it out, producing the following output:
python txtsize.py
...
18 ./2006/03/24-03-06_2303002.txt
22 ./2006/03/25-03-06_1340001.txt
22 ./2006/03/25-03-06_2034001.txt
...
2565 ./2005/09/28-09-05_1043004.txt
2565 ./2005/09/28-09-05_1141002.txt
...
2578 ./2006/03/27-03-06_1618001.txt
2578 ./2006/03/28-03-06_2109001.txt
2578 ./2006/03/29-03-06_1355001.txt
...
Scanning the output, we notice that some files are pretty short and a lot of the
files are pretty large and the same size (2578 and 2565). When we take a look at
afew of these larger files by hand, it looks like the large files are nothing but a
generic bit of identical HTML that came in from mail sent to my system from my
T-Mobile phone:
<html>
<head>
<title>T-Mobile</title>
...
Skimming through the file, it looks like there is no good information in these files
so we can probably delete them.
But before we delete the files, we will write a program to look for files that are
more than one line long and show the contents of the file. We will not bother
showing ourselves those files that are exactly 2578 or 2565 characters long since
we know that these files have no useful information.
So we write the following program:
import os
from os.path import join
for (dirname, dirs, files) in os.walk(
'
.
'
):
for filename in files:
if filename.endswith(
'
.txt
'
) :
thefile = os.path.join(dirname,filename)
size = os.path.getsize(thefile)
if size == 2578 or size == 2565:
continue
fhand = open(thefile,
'
r
'
)
lines = list()
for line in fhand:
lines.append(line)
fhand.close()
if len(lines) > 1:
print len(lines), thefile
print lines[:4]
Documents you may be interested
Documents you may be interested