Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 836099a5dc |
76
test.py
76
test.py
@@ -1,76 +0,0 @@
|
||||
#### Test version attempts to parse both the total cost and print quantity from the PDFs. There were some issues with the print qty location moving. So, I went with the manually entered qty break option to get started
|
||||
### This version is also lacking the mailing price logic
|
||||
|
||||
from operator import itemgetter
|
||||
from itertools import groupby
|
||||
import fitz
|
||||
import csv
|
||||
|
||||
# doc = fitz.open("std.pdf")
|
||||
doc = fitz.open("flyers.pdf")
|
||||
|
||||
count = doc.pageCount
|
||||
currentPage = 0
|
||||
|
||||
qtyrow = ['Price Input', 'Type', 'Comparisons', 'Options', 'Fixed Costs']
|
||||
costrow =['Base','','','(none)','\"0\"']
|
||||
|
||||
# mailing = (input('Are you mailing: y/N: '))
|
||||
# if mailing.lower() == 'y':
|
||||
# print("Mailing")
|
||||
# checkMail = True
|
||||
# elif mailing.lower() == 'n' or mailing.lower() == "":
|
||||
# print("Not Mailing")
|
||||
# checkMail = False
|
||||
# else:
|
||||
# print("not a valid choice")
|
||||
# exit()
|
||||
|
||||
while currentPage < count:
|
||||
page = doc[currentPage]
|
||||
|
||||
words = page.getTextWords()
|
||||
|
||||
#to find new rects print out he words array, copy output to editor and search for the value you're looking for. If there're multiple, guestimate which is right.
|
||||
Qtyrect = (122.00001525878906, 328.7388916015625, 135.0115966796875, 337.45294189453125)
|
||||
Totalrect = (559.9500122070312, 593.7672729492188, 584.7210083007812, 602.8164672851562)
|
||||
# Totalrect = (559.75, 551.71728515625, 584.52099609375, 560.7664794921875)
|
||||
|
||||
# Find the print quantity on each page
|
||||
qty = [w for w in words if fitz.Rect(w[:4]).intersects(Qtyrect)]
|
||||
qty.sort(key=itemgetter(3, 0))
|
||||
group = groupby(qty, key=itemgetter(3))
|
||||
for y1, gwords in group:
|
||||
totalqty = (" ".join(w[4] for w in gwords))
|
||||
# Find the total job cost on each page
|
||||
total = [w for w in words if fitz.Rect(w[:4]).intersects(Totalrect)]
|
||||
total.sort(key=itemgetter(3, 0))
|
||||
group = groupby(total, key=itemgetter(3))
|
||||
for y1, gwords in group:
|
||||
totalcost = (" ".join(w[4] for w in gwords))
|
||||
# Remove $ from cost and , from quantity. Divide total cost by print quantity to find per piece price and round 4 decimals
|
||||
perpiece = round(float(totalcost.strip('$'))/int(totalqty.replace(',','')),4)
|
||||
|
||||
# Add the per piece and quantity to the arrays
|
||||
costrow.append('\"'+str(perpiece)+'\"')
|
||||
qtyrow.append(totalqty.replace(',','')+'+ Units')
|
||||
# if checkMail is True:
|
||||
# print(words)
|
||||
# Mailrect = ('')
|
||||
|
||||
currentPage = currentPage+1
|
||||
|
||||
# Add the weight sections after all the qty breaks
|
||||
qtyrow.append('Unit Weight')
|
||||
qtyrow.append('Tare Weight')
|
||||
qtyrow.append('Max Weight')
|
||||
|
||||
costrow.append('\"'+str(.5039)+'\"')
|
||||
costrow.append('\"'+str(48)+'\"')
|
||||
costrow.append('\"'+str(400)+'\"')
|
||||
|
||||
csv.register_dialect('unixpwd', delimiter=',', quoting=csv.QUOTE_NONE)
|
||||
with open('pricetable.csv', 'w', newline='') as f:
|
||||
writer = csv.writer(f, quoting=csv.QUOTE_NONE, quotechar="")
|
||||
writer.writerow(qtyrow)
|
||||
writer.writerow(costrow)
|
||||
Reference in New Issue
Block a user