changes for A4 support, more options from hgzwopjp
This commit is contained in:
parent
d7a1337d9c
commit
1de3db373e
@ -2,7 +2,7 @@ import re,pprint
|
|||||||
from optparse import OptionParser
|
from optparse import OptionParser
|
||||||
|
|
||||||
from reportlab.pdfgen import canvas
|
from reportlab.pdfgen import canvas
|
||||||
from reportlab.lib.pagesizes import letter
|
from reportlab.lib.pagesizes import LETTER,A4,portrait,landscape
|
||||||
from reportlab.lib.units import cm,inch
|
from reportlab.lib.units import cm,inch
|
||||||
from reportlab.platypus import Frame,Paragraph
|
from reportlab.platypus import Frame,Paragraph
|
||||||
from reportlab.lib.styles import getSampleStyleSheet
|
from reportlab.lib.styles import getSampleStyleSheet
|
||||||
@ -247,39 +247,62 @@ if __name__=='__main__':
|
|||||||
help="Points to offset the back page to the right; needed for some printers")
|
help="Points to offset the back page to the right; needed for some printers")
|
||||||
parser.add_option("--orientation",type="string",dest="orientation",default="horizontal",
|
parser.add_option("--orientation",type="string",dest="orientation",default="horizontal",
|
||||||
help="horizontal or vertical, default:horizontal")
|
help="horizontal or vertical, default:horizontal")
|
||||||
parser.add_option("--sleeved",action="store_true",dest="sleeved")
|
parser.add_option("--sleeved",action="store_true",dest="sleeved",help="use --size=sleeved instead")
|
||||||
|
parser.add_option("--size",type="string",dest="size",default=None,help="'<%f>x<%f>' (size in cm), or 'normal' = '9.1x5.9', or 'sleeved' = '9.4x6.15'")
|
||||||
|
parser.add_option("--minmargin",type="string",dest="minmargin",default="1x1",help="'<%f>x<%f>' (size in cm, left/right, top/bottom), default: 1x1")
|
||||||
|
parser.add_option("--papersize",type="string",dest="papersize",default=None,help="'<%f>x<%f>' (size in cm), or 'A4', or 'LETTER'")
|
||||||
|
|
||||||
(options,args) = parser.parse_args()
|
(options,args) = parser.parse_args()
|
||||||
|
|
||||||
dominionCardWidth = 9.1*cm
|
if options.sleeved:
|
||||||
dominionCardHeight = 5.9*cm
|
dominionCardWidth, dominionCardHeight = (9.4*cm, 6.15*cm)
|
||||||
sleeveCardWidth = 9.4*cm
|
else:
|
||||||
sleeveCardHeight = 6.15*cm
|
dominionCardWidth, dominionCardHeight = (9.1*cm, 5.9*cm)
|
||||||
|
if options.size != None:
|
||||||
|
x, y = options.size.split ("x", 1)
|
||||||
|
dominionCardWidth, dominionCardHeight = (float (x) * cm, float (y) * cm)
|
||||||
|
|
||||||
|
if options.papersize == 'A4' or options.papersize == 'a4':
|
||||||
|
print "Using A4 sized paper."
|
||||||
|
paperwidth, paperheight = A4
|
||||||
|
elif options.papersize == 'LETTER' or options.papersize == 'letter':
|
||||||
|
print "Using letter sized paper."
|
||||||
|
paperwidth, paperheight = LETTER
|
||||||
|
elif open ("/etc/papersize").readline == "letter":
|
||||||
|
print "Using letter sized paper."
|
||||||
|
paperwidth, paperheight = LETTER
|
||||||
|
else:
|
||||||
|
print "Using A4 sized paper."
|
||||||
|
paperwidth, paperheight = A4
|
||||||
|
|
||||||
|
minmarginwidth, minmarginheight = options.minmargin.split ("x", 1)
|
||||||
|
minmarginwidth, minmarginheight = float (minmarginwidth) * cm, float (minmarginheight) * cm
|
||||||
|
|
||||||
if options.orientation == "vertical":
|
if options.orientation == "vertical":
|
||||||
if options.sleeved:
|
tabWidth, tabBaseHeight = dominionCardHeight, dominionCardWidth
|
||||||
tabWidth = sleeveCardHeight
|
|
||||||
tabBaseHeight = sleeveCardWidth
|
|
||||||
else:
|
|
||||||
tabWidth = dominionCardHeight
|
|
||||||
tabBaseHeight = dominionCardWidth
|
|
||||||
numTabsVertical = 2
|
|
||||||
numTabsHorizontal = 3
|
|
||||||
else:
|
else:
|
||||||
if options.sleeved:
|
tabWidth, tabBaseHeight = dominionCardWidth, dominionCardHeight
|
||||||
tabWidth = sleeveCardWidth
|
|
||||||
tabBaseHeight = sleeveCardHeight
|
|
||||||
else:
|
|
||||||
tabWidth = dominionCardWidth
|
|
||||||
tabBaseHeight = dominionCardHeight
|
|
||||||
|
|
||||||
numTabsVertical = 3
|
|
||||||
numTabsHorizontal = 2
|
|
||||||
|
|
||||||
tabLabelHeight = 0.9*cm
|
tabLabelHeight = 0.9*cm
|
||||||
tabLabelWidth = 3.5*cm
|
tabLabelWidth = 3.5*cm
|
||||||
tabTotalHeight = tabBaseHeight + tabLabelHeight
|
tabTotalHeight = tabBaseHeight + tabLabelHeight
|
||||||
|
|
||||||
|
numTabsVerticalP = int ((paperheight - 2*minmarginheight) / tabTotalHeight)
|
||||||
|
numTabsHorizontalP = int ((paperwidth - 2*minmarginwidth) / tabWidth)
|
||||||
|
numTabsVerticalL = int ((paperwidth - 2*minmarginwidth) / tabWidth)
|
||||||
|
numTabsHorizontalL = int ((paperheight - 2*minmarginheight) / tabtotalHeight)
|
||||||
|
|
||||||
|
if numTabsVerticalL * numTabsHorizontalL > numTabsVerticalP * numTabsHorizontalP:
|
||||||
|
numTabsVertical, numTabsHorizontal = numTabsVerticalL, numTabsHorizontalL
|
||||||
|
paperheight, paperwidth = paperwidth, paperheight
|
||||||
|
else:
|
||||||
|
numTabsVertical, numTabsHorizontal = numTabsVerticalP, numTabsHorizontalP
|
||||||
|
|
||||||
|
horizontalMargin = (paperwidth-numTabsHorizontal*tabWidth)/2
|
||||||
|
verticalMargin = (paperheight-numTabsVertical*tabTotalHeight)/2
|
||||||
|
|
||||||
|
print "Offset: %fcm h, %fcm v\n" % (horizontalMargin / cm, verticalMargin / cm)
|
||||||
|
|
||||||
tabOutline = [(0,0,tabWidth,0),
|
tabOutline = [(0,0,tabWidth,0),
|
||||||
(tabWidth,0,tabWidth,tabTotalHeight),
|
(tabWidth,0,tabWidth,tabTotalHeight),
|
||||||
(tabWidth,tabTotalHeight,tabWidth-tabLabelWidth,tabTotalHeight),
|
(tabWidth,tabTotalHeight,tabWidth-tabLabelWidth,tabTotalHeight),
|
||||||
@ -287,14 +310,12 @@ if __name__=='__main__':
|
|||||||
(tabWidth-tabLabelWidth,tabBaseHeight,0,tabBaseHeight),
|
(tabWidth-tabLabelWidth,tabBaseHeight,0,tabBaseHeight),
|
||||||
(0,tabBaseHeight,0,0)]
|
(0,tabBaseHeight,0,0)]
|
||||||
|
|
||||||
allTabsHeight = numTabsVertical*tabTotalHeight
|
try:
|
||||||
allTabsWidth = numTabsHorizontal*tabWidth
|
pdfmetrics.registerFont(TTFont('MinionPro-Regular','MinionPro-Regular.ttf'))
|
||||||
|
pdfmetrics.registerFont(TTFont('MinionPro-Bold','MinionPro-Bold.ttf'))
|
||||||
horizontalMargin = (8.5*inch-allTabsWidth)/2
|
except:
|
||||||
verticalMargin = (11*inch-allTabsHeight)/2
|
pdfmetrics.registerFont(TTFont('MinionPro-Regular','OptimusPrincepsSemiBold.ttf'))
|
||||||
|
pdfmetrics.registerFont(TTFont('MinionPro-Bold','OptimusPrinceps.ttf'))
|
||||||
pdfmetrics.registerFont(TTFont('MinionPro-Regular','MinionPro-Regular.ttf'))
|
|
||||||
pdfmetrics.registerFont(TTFont('MinionPro-Bold','MinionPro-Bold.ttf'))
|
|
||||||
cards = read_card_defs("dominion_cards.txt")
|
cards = read_card_defs("dominion_cards.txt")
|
||||||
cards.sort(cmp=lambda x,y: cmp((x.cardset,x.name),(y.cardset,y.name)))
|
cards.sort(cmp=lambda x,y: cmp((x.cardset,x.name),(y.cardset,y.name)))
|
||||||
extras = read_card_extras("dominion_card_extras.txt",cards)
|
extras = read_card_extras("dominion_card_extras.txt",cards)
|
||||||
@ -311,7 +332,7 @@ if __name__=='__main__':
|
|||||||
fname = args[0]
|
fname = args[0]
|
||||||
else:
|
else:
|
||||||
fname = "dominion_tabs.pdf"
|
fname = "dominion_tabs.pdf"
|
||||||
c = canvas.Canvas(fname, pagesize=letter)
|
c = canvas.Canvas(fname, pagesize=(paperwidth, paperheight))
|
||||||
#pprint.pprint(c.getAvailableFonts())
|
#pprint.pprint(c.getAvailableFonts())
|
||||||
drawCards(c,cards)
|
drawCards(c,cards)
|
||||||
c.save()
|
c.save()
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user