initial commit
This commit is contained in:
commit
ccdf254be6
|
@ -0,0 +1,82 @@
|
||||||
|
#!/usr/bin/env python
|
||||||
|
from PyPDF2 import PdfFileWriter, PdfFileReader
|
||||||
|
from reportlab.pdfgen import canvas
|
||||||
|
from StringIO import StringIO
|
||||||
|
|
||||||
|
# width 595 units
|
||||||
|
# height 841 units
|
||||||
|
|
||||||
|
def pdffile(imagelist, outputfilename, originalFileName, infoFile):
|
||||||
|
positions=[
|
||||||
|
[5,330],
|
||||||
|
[300, 330],
|
||||||
|
[5,5],
|
||||||
|
[300,5]
|
||||||
|
]
|
||||||
|
|
||||||
|
# number of QR codes
|
||||||
|
totalPieces = len(imagelist)
|
||||||
|
currentPiece=1
|
||||||
|
|
||||||
|
# PDF document is created here
|
||||||
|
pdf = PdfFileWriter()
|
||||||
|
|
||||||
|
while len(imagelist)>0:
|
||||||
|
# Get the first 4 images from the array
|
||||||
|
tmpImageList = []
|
||||||
|
while len(tmpImageList)<len(positions):
|
||||||
|
try:
|
||||||
|
tmpImageList.append(imagelist.pop(0))
|
||||||
|
except IndexError:
|
||||||
|
break
|
||||||
|
|
||||||
|
# Start making a page
|
||||||
|
imgTemp = StringIO()
|
||||||
|
imgDoc = canvas.Canvas(imgTemp)
|
||||||
|
|
||||||
|
# 4 qr's per page, so per each position
|
||||||
|
for pos in positions:
|
||||||
|
# Get the image name
|
||||||
|
try:
|
||||||
|
img = tmpImageList.pop(0)
|
||||||
|
except IndexError:
|
||||||
|
break
|
||||||
|
# Draw the QR
|
||||||
|
imgDoc.drawImage(img, 0+pos[0], 0+pos[1], 290, 290)
|
||||||
|
# Draw the label
|
||||||
|
imgDoc.drawString(0+pos[0],0+pos[1]+300, "%s :: %s of %s "%(originalFileName, currentPiece, totalPieces))
|
||||||
|
# Increment # of pieces drawn
|
||||||
|
currentPiece+=1
|
||||||
|
|
||||||
|
# Add logo
|
||||||
|
#imgDoc.drawImage('lib/qr_app_info.png', 5, 686, 150, 150)
|
||||||
|
|
||||||
|
# Add info code
|
||||||
|
imgDoc.drawImage(infoFile, 5, 676, 150, 150)
|
||||||
|
|
||||||
|
imgDoc.setFont("Helvetica-Bold", 12)
|
||||||
|
imgDoc.drawString(47,830, "SCAN ME")
|
||||||
|
|
||||||
|
# Add instructions
|
||||||
|
imgDoc.setFont("Helvetica-Bold", 18)
|
||||||
|
imgDoc.drawString(170,820, "What is this?")
|
||||||
|
imgDoc.drawString(170,754, "Instructions:")
|
||||||
|
|
||||||
|
imgDoc.setFont("Helvetica", 12)
|
||||||
|
imgDoc.drawString(170, 800, "The images below are pieces of a file encoded into QR codes scannable by")
|
||||||
|
imgDoc.drawString(170, 788, "smartphones. Scan the smaller QR code to the right for details about retrieving")
|
||||||
|
imgDoc.drawString(170, 776, "this file.")
|
||||||
|
imgDoc.drawString(170, 734, "1) Scan the image to the right and press Import.")
|
||||||
|
imgDoc.drawString(170, 722, "2) Scan in all available data QR codes.")
|
||||||
|
imgDoc.drawString(170, 710, "3) Download your file!")
|
||||||
|
|
||||||
|
# Save the page
|
||||||
|
imgDoc.save()
|
||||||
|
|
||||||
|
# Add page to master doc
|
||||||
|
page = PdfFileReader(StringIO(imgTemp.getvalue())).getPage(0)
|
||||||
|
pdf.addPage(page)
|
||||||
|
#break
|
||||||
|
|
||||||
|
# Export master doc
|
||||||
|
pdf.write(file(outputfilename,"w"))
|
|
@ -0,0 +1,47 @@
|
||||||
|
#!/usr/bin/env python
|
||||||
|
from qrcode import QRCode,constants
|
||||||
|
from base64 import b64encode
|
||||||
|
from zlib import compress
|
||||||
|
from urllib import quote as urlencode
|
||||||
|
from hashlib import md5
|
||||||
|
|
||||||
|
def qrstring(s):
|
||||||
|
qr = QRCode(error_correction=constants.ERROR_CORRECT_L, box_size=25,border=0)
|
||||||
|
qr.add_data(s)
|
||||||
|
qr.make()
|
||||||
|
return qr
|
||||||
|
|
||||||
|
def qrimage(s):
|
||||||
|
qr = qrstring(s)
|
||||||
|
return qr.make_image()
|
||||||
|
|
||||||
|
def qrimagefile(s, fileName):
|
||||||
|
qrimage(s).save(fileName, 'PNG')
|
||||||
|
return fileName
|
||||||
|
|
||||||
|
def md5_str(s):
|
||||||
|
x = md5()
|
||||||
|
x.update(s)
|
||||||
|
return x.hexdigest()
|
||||||
|
|
||||||
|
def qrfile(filepath, filehash, tmppath="tmp/"):
|
||||||
|
data = b64encode(compress(open(filepath, 'r').read(), 9))
|
||||||
|
template = 'http://qrfile.kilobyt.es/import/%s/%s/%s/?data=%s'
|
||||||
|
chunk = 0
|
||||||
|
files = []
|
||||||
|
while True:
|
||||||
|
datapiece = data[chunk*1024:chunk*1024+1024]
|
||||||
|
thisqr = template % (filehash[0:8], hex(chunk)[2:], md5_str(datapiece), urlencode(datapiece))
|
||||||
|
f = open('./urls.txt', 'a'); f.write(thisqr+"\n"); f.close()
|
||||||
|
img = qrimage(thisqr)
|
||||||
|
img.save(tmppath+"qr%s.png" % str(chunk), 'PNG')
|
||||||
|
files.append(tmppath+"qr%s.png" % str(chunk))
|
||||||
|
#print "Stored %s of %s" % (chunk*1024, len(data))
|
||||||
|
chunk+=1
|
||||||
|
if len(datapiece)<1024:
|
||||||
|
break
|
||||||
|
return files
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
from sys import argv
|
||||||
|
print qrfile(argv[1])
|
|
@ -0,0 +1,4 @@
|
||||||
|
PyPDF2==1.20
|
||||||
|
qrcode==4.0.4
|
||||||
|
six==1.10.0
|
||||||
|
wheel==0.24.0
|
|
@ -0,0 +1,55 @@
|
||||||
|
#!/usr/bin/env python
|
||||||
|
from qrfile import qrfile,qrimagefile
|
||||||
|
from pdffile import pdffile
|
||||||
|
from sys import argv,exit
|
||||||
|
from os import unlink
|
||||||
|
import os.path
|
||||||
|
from json import dumps
|
||||||
|
from hashlib import md5
|
||||||
|
from datetime import datetime
|
||||||
|
from urllib import quote as urlencode
|
||||||
|
from os.path import getsize
|
||||||
|
|
||||||
|
if not len(argv)==3:
|
||||||
|
print "Specify an input file and output pdf like: ./run.py wallet.dat output.pdf"
|
||||||
|
exit(0)
|
||||||
|
|
||||||
|
# Calculate file hash
|
||||||
|
filehash = md5()
|
||||||
|
f = open(argv[1], 'r')
|
||||||
|
while True:
|
||||||
|
data = f.read(1024*1024)
|
||||||
|
if not data:
|
||||||
|
break
|
||||||
|
filehash.update(data)
|
||||||
|
filehash=filehash.hexdigest()
|
||||||
|
|
||||||
|
# create info-qr
|
||||||
|
fileInfo = {
|
||||||
|
"name":argv[1],
|
||||||
|
"hash":filehash,
|
||||||
|
"date":str(datetime.now()),
|
||||||
|
"size":getsize(argv[1]),
|
||||||
|
"pieces":0
|
||||||
|
}
|
||||||
|
|
||||||
|
# Covert file to many QR codes
|
||||||
|
files = qrfile(argv[1], fileInfo["hash"])
|
||||||
|
|
||||||
|
# Insert pieces info now that we have it
|
||||||
|
fileInfo["pieces"] = len(files)
|
||||||
|
|
||||||
|
# Create info QR code
|
||||||
|
infoUrl = 'http://qrfile.kilobyt.es/import/?data='+urlencode(dumps(fileInfo))
|
||||||
|
f = open('./urls.txt', 'a'); f.write(infoUrl+"\n\n\n"); f.close()
|
||||||
|
qrimagefile(infoUrl, 'tmp/info.png')
|
||||||
|
print infoUrl
|
||||||
|
|
||||||
|
# Embed QR codes indo PDF
|
||||||
|
# img list, output name, original file name, info qr
|
||||||
|
pdffile(files, argv[2], os.path.basename(argv[1]), 'tmp/info.png')
|
||||||
|
|
||||||
|
# Delete temp files
|
||||||
|
for item in files:
|
||||||
|
unlink(item)
|
||||||
|
unlink('tmp/info.png')
|
Loading…
Reference in New Issue