itextsharp pdf to image c# example : Acrobat create pdf form software application project winforms windows html UWP Automate%20the%20Boring%20Stuff%20with%20Python%20(2015)40-part1631

Sending Email and Text Messages 
377
Figure 16-2: The spreadsheet for tracking member dues payments
This spreadsheet has every member’s name and email address. Each 
month has a column tracking members’ payment statuses. The cell for each 
member is marked with the text paid once they have paid their dues.
The program will have to open duesRecords.xlsx and figure out the col-
umn for the latest month by calling the 
get_highest_column()
method. (You 
can consult Chapter 12 for more information on accessing cells in Excel 
spreadsheet files with the 
openpyxl
module.) Enter the following code into 
the file editor window:
#! python3
# sendDuesReminders.py - Sends emails based on payment status in spreadsheet.
import openpyxl, smtplib, sys
# Open the spreadsheet and get the latest dues status.
u wb = openpyxl.load_workbook('duesRecords.xlsx')
v sheet = wb.get_sheet_by_name('Sheet1')
w lastCol = sheet.get_highest_column()
x latestMonth = sheet.cell(row=1, column=lastCol).value
# TODO: Check each member's payment status.
# TODO: Log in to email account.
# TODO: Send out reminder emails.
After importing the 
openpyxl
smtplib
, and 
sys
modules, we open our 
duesRecords.xlsx file and store the resulting 
Workbook
object in 
wb
u. Then we 
get Sheet 1 and store the resulting 
Worksheet
object in 
sheet
v. Now that we 
have a 
Worksheet
object, we can access rows, columns, and cells. We store the 
highest column in 
lastCol
w, and we then use row number 1 and 
lastCol
to 
access the cell that should hold the most recent month. We get the value in 
this cell and store it in 
latestMonth
x.
Acrobat create 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
adding text fields to a pdf; adding text fields to pdf
Acrobat create 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
add fillable fields to pdf online; create a pdf form that can be filled out
378   
Chapter 16
Step 2: Find All Unpaid Members
Once you’ve determined the column number of the latest month (stored 
in 
lastCol
), you can loop through all rows after the first row (which has the 
column headers) to see which members have the text paid in the cell for 
that month’s dues. If the member hasn’t paid, you can grab the member’s 
name and email address from columns 1 and 2, respectively. This infor-
mation will go into the 
unpaidMembers
dictionary, which will track all mem-
bers who haven’t paid in the most recent month. Add the following code 
to s endDuesReminder.py.
#! python3
# sendDuesReminders.py - Sends emails based on payment status in spreadsheet.
--snip--
# Check each member's payment status.
unpaidMembers = {}
u for r in range(2, sheet.get_highest_row() + 1):
    payment = sheet.cell(row=r, column=lastCol).value
if payment != 'paid':
        name = sheet.cell(row=r, column=1).value
        email = sheet.cell(row=r, column=2).value
        unpaidMembers[name] = email
This code sets up an empty dictionary 
unpaidMembers
and then loops 
through all the rows after the first u. For each row, the value in the most 
recent column is stored in 
payment
v. If 
payment
is not equal to 
'paid'
, then 
the value of the first column is stored in 
name
w, the value of the second col-
umn is stored in 
email
x, and 
name
and 
email
are added to 
unpaidMembers
y.
Step 3: Send Customized Email Reminders
Once you have a list of all unpaid members, it’s time to send them email 
reminders. Add the following code to your program, except with your real 
email address and provider information:
#! python3
# sendDuesReminders.py - Sends emails based on payment status in spreadsheet.
--snip--
# Log in to email account.
smtpObj = smtplib.SMTP('smtp.gmail.com', 587)
smtpObj.ehlo()
smtpObj.starttls()
smtpObj.login('my_email_address@gmail.com', sys.argv[1])
.NET PDF Document Viewing, Annotation, Conversion & Processing
Allow to create digital signature. Edit, update, delete PDF annotations from PDF file. Print. Support for all the print modes in Acrobat PDF.
best way to create pdf forms; add fields to pdf
C# PDF Converter Library SDK to convert PDF to other file formats
Able to create convert PDF to SVG file. other external third-party dependencies like Adobe Acrobat. for developers to conduct high fidelity PDF file conversion
change font size pdf form; change font size in pdf form field
Sending Email and Text Messages 
379
Create an 
SMTP
object by calling 
smtplib.SMTP()
and passing it the domain 
name and port for your provider. Call 
ehlo()
and 
starttls()
, and then call 
login()
and pass it your email address and 
sys.argv[1]
, which will store your 
password string. You’ll enter the password as a command line argument 
each time you run the program, to avoid saving your password in your 
source code.
Once your program has logged in to your email account, it should go 
through the 
unpaidMembers
dictionary and send a personalized email to each 
member’s email address. Add the following to sendDuesReminders.py: 
#! python3
# sendDuesReminders.py - Sends emails based on payment status in spreadsheet.
--snip--
# Send out reminder emails.
for name, email in unpaidMembers.items():
    body = "Subject: %s dues unpaid.\nDear %s,\nRecords show that you have not 
paid dues for %s. Please make this payment as soon as possible. Thank you!'" % 
(latestMonth, name, latestMonth)
    print('Sending email to %s...' % email)
    sendmailStatus = smtpObj.sendmail('my_email_address@gmail.com', email, body)
    if sendmailStatus != {}:
print('There was a problem sending email to %s: %s' % (email, 
sendmailStatus))
smtpObj.quit()
This code loops through the names and emails in 
unpaidMembers
. For 
each member who hasn’t paid, we customize a message with the latest month 
and the member’s name, and store the message in 
body
u. We print output 
saying that we’re sending an email to this member’s email address v. Then 
we call 
sendmail()
, passing it the from address and the customized message w. 
We store the return value in 
sendmailStatus
.
Remember that the 
sendmail()
method will return a nonempty diction-
ary value if the SMTP server reported an error sending that particular 
email. The last part of the 
for
loop at x checks if the returned dictionary is 
nonempty, and if it is, prints the recipient’s email address and the returned 
dictionary.
After the program is done sending all the emails, the 
quit()
method is 
called to disconnect from the SMTP server.
When you run the program, the output will look something like this:
Sending email to alice@example.com...
Sending email to bob@example.com...
Sending email to eve@example.com...
The recipients will receive an email that looks like Figure 16-3.
C# powerpoint - PowerPoint Conversion & Rendering in C#.NET
without using other external third-party dependencies like Adobe Acrobat. NET applications, like ASP.NET web form application and PowerPoint to PDF Conversion.
adding a text field to a pdf; change tab order in pdf form
C# Word - Word Conversion in C#.NET
without using other external third-party dependencies like Adobe Acrobat. in C#.NET applications, like ASP.NET web form application and Word to PDF Conversion.
convert word doc to pdf with editable fields; create pdf forms
380   
Chapter 16
Figure 16-3: An automatically sent email from sendDuesReminders‮py
Sending text messages with twilio
Most people are more likely to be near their phones than their computers, 
so text messages can be a more immediate and reliable way of sending noti-
fications than email. Also, the short length of text messages makes it more 
likely that a person will get around to reading them.
In this section, you’ll learn how to sign up for the free Twilio service and 
use its Python module to send text messages. Twilio is an SMS gateway service, 
which means it’s a service that allows you to send text messages from your 
programs. Although you will be limited in how many texts you can send per 
month and the texts will be prefixed with the words Sent from a Twilio trial 
account, this trial service is probably adequate for your personal programs. 
The free trial is indefinite; you won’t have to upgrade to a paid plan later.
Twilio isn’t the only SMS gateway service. If you prefer not to use Twilio, 
you can find alternative services by searching online for free sms gateway, 
python sms api, or even twilio alternatives. 
Before signing up for a Twilio account, install the 
twilio
module. 
Appendix A has more details about installing third-party modules.
no t e
This section is specific to the United States. Twilio does offer SMS texting services for 
countries outside of the United States, but those specifics aren’t covered in this book. 
The 
twilio
module and its functions, however, will work the same outside the United 
States. See http://twilio.com/ for more information.
Signing Up for a Twilio Account
Go to http://twilio.com/ and fill out the sign-up form. Once you’ve signed up 
for a new account, you’ll need to verify a mobile phone number that you 
want to send texts to. (This verification is necessary to prevent people from 
using the service to spam random phone numbers with text messages.) 
After receiving the text with the verification number, enter it into the 
Twilio website to prove that you own the mobile phone you are verifying. You 
will now be able to send texts to this phone number using the 
twilio
module.
Twilio provides your trial account with a phone number to use as the 
sender of text messages. You will need two more pieces of information: 
your account SID and the auth (authentication) token. You can find this 
information on the Dashboard page when you are logged in to your Twilio 
account. These values act as your Twilio username and password when log-
ging in from a Python program. 
C# Windows Viewer - Image and Document Conversion & Rendering in
standard image and document in .NET class applications independently, without using other external third-party dependencies like Adobe Acrobat. Convert to PDF.
best way to make pdf forms; add image field to pdf form
VB.NET PDF: How to Create Watermark on PDF Document within
PDF Watermark Add-on, you can simply create a watermark And with our PDF Watermark Creator, users need no external application plugin, like Adobe Acrobat.
adding signature to pdf form; change font pdf form
Sending Email and Text Messages 
381
Sending Text Messages
Once you’ve installed the 
twilio
module, signed up for a Twilio account, ver-
ified your phone number, registered a Twilio phone number, and obtained 
your account SID and auth token, you will finally be ready to send yourself 
text messages from your Python scripts.
Compared to all the registration steps, the actual Python code is fairly 
simple. With your computer connected to the Internet, enter the following 
into the interactive shell, replacing the 
accountSID
authToken
myTwilioNumber
and 
myCellPhone
variable values with your real information:
u >>> from twilio.rest import TwilioRestClient
>>> accountSID = 'ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
>>> authToken  = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
v >>> twilioCli = TwilioRestClient(accountSID, authToken)
>>> myTwilioNumber = '+14955551234'
>>> myCellPhone = '+14955558888'
w >>> message = twilioCli.messages.create(body='Mr. Watson - Come here - I want 
to see you.', from_=myTwilioNumber, to=myCellPhone)
A few moments after typing the last line, you should receive a text mes-
sage that reads Sent from your Twilio trial account - Mr. Watson - Come here - I 
want to see you.
Because of the way the 
twilio
module is set up, you need to import 
it using 
from twilio.rest import TwilioRestClient
, not just 
import twilio
u. 
Store your account SID in 
accountSID
and your auth token in 
authToken
and 
then call 
TwilioRestClient()
and pass it 
accountSID
and 
authToken
. The call to 
TwilioRestClient()
returns a 
TwilioRestClient
object v. This object has a 
mes-
sages
attribute, which in turn has a 
create()
method you can use to send text 
messages. This is the method that will instruct Twilio’s servers to send your 
text message. After storing your Twilio number and cell phone number in 
myTwilioNumber
and 
myCellPhone
, respectively, call 
create()
and pass it keyword 
arguments specifying the body of the text message, the sender’s number 
(
myTwilioNumber
), and the recipient’s number (
myCellPhone
) w.
The 
Message
object returned from the 
create()
method will have infor-
mation about the text message that was sent. Continue the interactive shell 
example by entering the following:
>>> message.to
'+14955558888'
>>> message.from_
'+14955551234'
>>> message.body
'Mr. Watson - Come here - I want to see you.'
The 
to
from_
, and 
body
attributes should hold your cell phone number, 
Twilio number, and message, respectively. Note that the sending phone 
number is in the 
from_
attribute—with an underscore at the end—not 
from
This is because 
from
is a keyword in Python (you’ve seen it used in the 
from 
C# Excel - Excel Conversion & Rendering in C#.NET
without using other external third-party dependencies like Adobe Acrobat. in C#.NET applications, like ASP.NET web form application and Excel to PDF Conversion.
create a pdf form to fill out; changing font size in a pdf form
VB.NET PowerPoint: VB Code to Draw and Create Annotation on PPT
for limitations (other documents are compatible, including PDF, TIFF, MS through adding a box to create some text no more plug-ins needed like Acrobat or Adobe
add image to pdf form; adding text field to pdf
382   
Chapter 16
modulename import *
form of 
import
statement, for example), so it cannot be 
used as an attribute name. Continue the interactive shell example with 
the following:
>>> message.status
'queued'
>>> message.date_created
datetime.datetime(2015, 7, 8, 1, 36, 18)
>>> message.date_sent == None
True
The 
status
attribute should give you a string. The 
date_created
and 
date_sent
attributes should give you a 
datetime
object if the message has been 
created and sent. It may seem odd that the 
status
attribute is set to 
'queued'
and the 
date_sent
attribute is set to 
None
when you’ve already received the 
text message. This is because you captured the 
Message
object in the 
message
variable before the text was actually sent. You will need to refetch the 
Message
object in order to see its most up-to-date 
status
and 
date_sent
. Every Twilio 
message has a unique string ID (SID) that can be used to fetch the latest 
update of the 
Message
object. Continue the inter active shell example by 
entering the following:
>>> message.sid
'SM09520de7639ba3af137c6fcb7c5f4b51'
u >>> updatedMessage = twilioCli.messages.get(message.sid)
>>> updatedMessage.status
'delivered'
>>> updatedMessage.date_sent
datetime.datetime(2015, 7, 8, 1, 36, 18)
Entering 
message.sid
show you this message’s long SID. By passing this 
SID to the Twilio client’s 
get()
method u, you can retrieve a new 
Message
object with the most up-to-date information. In this new 
Message
object, the 
status
and 
date_sent
attributes are correct.
The 
status
attribute will be set to one of the following string values: 
'queued'
'sending'
'sent'
'delivered'
'undelivered'
, or 
'failed'
. These sta-
tuses are self-explanatory, but for more precise details, take a look at the 
resources at http://nostarch.com/automatestuff/. 
reCeiving te x t meSSAg eS wi th Py thon
Unfortunately, receiving text messages with Twilio is a bit more complicated 
than sending them‮ Twilio requires that you have a website running its own 
web application‮ That’s beyond the scope of this book, but you can find more 
details in the resources for this book (http://nostarch.com/automatestuff/)‮
TIFF to PDF Converter | Convert TIFF to PDF, Convert PDF to TIFF
PDF to TIFF Converter doesn't require other third-party such as Adobe Acrobat. PDF to TIFF Converter can create the output TIFF image with 68-1024 dpi.
cannot save pdf form in reader; pdf create fillable form
Sending Email and Text Messages 
383
Project: “Just text me” module
The person you’ll most often text from your programs is probably you. 
Texting is a great way to send yourself notifications when you’re away from 
your computer. If you’ve automated a boring task with a program that takes 
a couple of hours to run, you could have it notify you with a text when it’s 
finished. Or you may have a regularly scheduled program running that 
sometimes needs to contact you, such as a weather-checking program that 
texts you a reminder to pack an umbrella.
As a simple example, here’s a small Python program with a 
textmyself()
function that sends a message passed to it as a string argument. Open a 
new file editor window and enter the following code, replacing the account 
SID, auth token, and phone numbers with your own information. Save it as 
textMyself.py.
#! python3
# textMyself.py - Defines the textmyself() function that texts a message 
# passed to it as a string.
# Preset values:
accountSID = 'ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
authToken  = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
myNumber = '+15559998888'
twilioNumber = '+15552225678'
from twilio.rest import TwilioRestClient
u def textmyself(message):
    twilioCli = TwilioRestClient(accountSID, authToken)
    twilioCli.messages.create(body=message, from_=twilioNumber, to=myNumber)
This program stores an account SID, auth token, sending number, and 
receiving number. It then defined 
textmyself()
to take on argument u, make 
TwilioRestClient
object v, and call 
create()
with the message you passed w.
If you want to make the 
textmyself()
function available to your other 
programs, simply place the textMyself.py file in the same folder as the Python 
executable (C:\Python34 on Windows, /usr/local/lib/python3.4 on OS X, and  
/usr/bin/python3 on Linux). Now you can use the function in your other 
programs. Whenever you want one of your programs to text you, just add the 
following:
import textmyself
textmyself.textmyself('The boring task is finished.')
You need to sign up for Twilio and write the texting code only once. 
After that, it’s just two lines of code to send a text from any of your other 
programs.
384   
Chapter 16
Summary
We communicate with each other on the Internet and over cell phone net-
works in dozens of different ways, but email and texting predominate. Your 
programs can communicate through these channels, which gives them 
powerful new notification features. You can even write programs running 
on different computers that communicate with one another directly via 
email, with one program sending emails with SMTP and the other retriev-
ing them with IMAP.
Python’s 
smtplib
provides functions for using the SMTP to send 
emails through your email provider’s SMTP server. Likewise, the third- 
party  
imapclient
and 
pyzmail
modules let you access IMAP servers and 
retrieve emails sent to you. Although IMAP is a bit more involved than 
SMTP, it’s also quite powerful and allows you to search for particular 
emails, download them, and parse them to extract the subject and body 
as string values.
Texting is a bit different from email, since, unlike email, more than 
just an Internet connection is needed to send SMS texts. Fortunately, ser-
vices such as Twilio provide modules to allow you to send text messages 
from your programs. Once you go through an initial setup process, you’ll 
be able to send texts with just a couple lines of code.
With these modules in your skill set, you’ll be able to program the spe-
cific conditions under which your programs should send notifications or 
reminders. Now your programs will have reach far beyond the computer 
they’re running on!
Practice Questions
1.  What is the protocol for sending email? For checking and receiving 
email?
2.  What four 
smtplib
functions/methods must you call to log in to an 
SMTP server?
3.  What two 
imapclient
functions/methods must you call to log in to an 
IMAP server?
4.  What kind of argument do you pass to 
imapObj.search()
?
5.  What do you do if your code gets an error message that says 
got more 
than 10000 bytes
?
6.  The 
imapclient
module handles connecting to an IMAP server and find-
ing emails. What is one module that handles reading the emails that 
imapclient
collects?
7.  What three pieces of information do you need from Twilio before you 
can send text messages?
Sending Email and Text Messages 
385
Practice Projects
For practice, write programs that do the following.
Random Chore Assignment Emailer
Write a program that takes a list of people’s email addresses and a list 
of chores that need to be done and randomly assigns chores to people. 
Email each person their assigned chores. If you’re feeling ambitious, keep 
a record of each person’s previously assigned chores so that you can make 
sure the program avoids assigning anyone the same chore they did last 
time. For another possible feature, schedule the program to run once a 
week automatically.
Here’s a hint: If you pass a list to the 
random.choice()
function, it will 
return a randomly selected item from the list. Part of your code could look 
like this:
chores = ['dishes', 'bathroom', 'vacuum', 'walk dog']
randomChore = random.choice(chores)
chores.remove(randomChore)    # this chore is now taken, so remove it
Umbrella Reminder
Chapter 11 showed you how to use the 
requests
module to scrape data from 
http://weather.gov/. Write a program that runs just before you wake up in the 
morning and checks whether it’s raining that day. If so, have the program 
text you a reminder to pack an umbrella before leaving the house.
Auto Unsubscriber
Write a program that scans through your email account, finds all the unsub-
scribe links in all your emails, and automatically opens them in a browser. 
This program will have to log in to your email provider’s IMAP server 
and download all of your emails. You can use BeautifulSoup (covered in 
Chapter 11) to check for any instance where the word unsubscribe occurs 
within an HTML link tag. 
Once you have a list of these URLs, you can use 
webbrowser.open()
to 
automatically open all of these links in a browser. 
You’ll still have to manually go through and complete any additional 
steps to unsubscribe yourself from these lists. In most cases, this involves 
clicking a link to confirm.
But this script saves you from having to go through all of your emails 
looking for unsubscribe links. You can then pass this script along to your 
friends so they can run it on their email accounts. (Just make sure your 
email password isn’t hardcoded in the source code!)
386   
Chapter 16
Controlling Your Computer Through Email
Write a program that checks an email account every 15 minutes for any 
instructions you email it and executes those instructions automatically. 
For example, BitTorrent is a peer-to-peer downloading system. Using free 
BitTorrent software such as qBittorrent, you can download large media 
files on your home computer. If you email the program a (completely legal, 
not at all piratical) BitTorrent link, the program will eventually check its 
email, find this message, extract the link, and then launch qBittorrent 
to start downloading the file. This way, you can have your home computer 
begin downloads while you’re away, and the (completely legal, not at all 
piratical) download can be finished by the time you return home.
Chapter 15 covers how to launch programs on your computer using the 
subprocess.Popen()
function. For example, the following call would launch 
the qBittorrent program, along with a torrent file:
qbProcess = subprocess.Popen(['C:\\Program Files (x86)\\qBittorrent\\
qbittorrent.exe', 'shakespeare_complete_works.torrent'])
Of course, you’ll want the program to make sure the emails come from 
you. In particular, you might want to require that the emails contain a pass-
word, since it is fairly trivial for hackers to fake a “from” address in emails. 
The program should delete the emails it finds so that it doesn’t repeat 
instructions every time it checks the email account. As an extra feature, 
have the program email or text you a confirmation every time it executes 
a command. Since you won’t be sitting in front of the computer that is 
running the program, it’s a good idea to use the logging functions (see 
Chapter 10) to write a text file log that you can check if errors come up.
qBittorrent (as well as other BitTorrent applications) has a feature 
where it can quit automatically after the download completes. Chapter 15 
explains how you can determine when a launched application has quit with 
the 
wait()
method for 
Popen
objects. The 
wait()
method call will block until 
qBittorrent has stopped, and then your program can email or text you a 
notification that the download has completed.
There are a lot of possible features you could add to this project. If you 
get stuck, you can download an example implementation of this program 
from http://nostarch.com/automatestuff/.
Documents you may be interested
Documents you may be interested