之前已经发布过这个问题,最近收到了一些非常好的遮阳篷,尽管我还没有完全解决这个问题。我现在有一些可行的代码,虽然这个网站上的某个人可能能够修复,或者告诉我如何修复大声笑。
好吧,基本上是关于我的目标是什么,因为我被多次告知我正在做的事情是无用的,或者我没有提供足够的信息,我会在这里尽力而为。我有一个程序可以在 PDF 文件上创建发票并将其打印出来。python 脚本来自所有必要的客户/服务信息等的 CSV 文件。
现在,到目前为止,我的代码中的问题是我拥有的服务数量,以及在 Python Reportlabs 中,您必须选择在页面上绘制字符串的位置。一个命令示例是:
cursor.drawstring(xLocation,yLocation,String)
通常的做法是从第 1 串到第 6 串,一根一根地拉到它上面的一根。在接下来的三个示例中,您将看到第一个是在对所有服务收费时函数将如何输出。第二个(中间)是不向客户收取某些服务费用的输出。final(RightMost) 示例是我希望它如何输出的代码。
Service 1 Service 1 Service 1
Service 2 Service 3
Service 3 Service 3 Service 4
Service 4 Service 4 Service 6
Service 5
Service 6 Service 6
不幸的是,基于布尔逻辑,并且有 6 种可能的服务,并且每种服务都可以收费或不收费,空的或满的,如果您愿意,那么有 64 种可能的方式来编写相同的函数以实现完美的输出。
如果我们为每个服务创建一个布尔值,0 为空,1 为满,那么我们将不得不测试从 000000 到 111111 的所有可能性。那是64。编码出来是完全合理的。
但是,我需要的服务远不止六项,而且所需的功能数量呈指数级增长。我没有编写每个函数,而是编写了一个程序,该程序将采用 0 和 1 集的文件,即:
0000000000
0000000001
0000000010
etc..
并测试每一行中的每一位。然后,此函数将根据行中的位为文件中的每一行写出一个函数。现在,它会产生不正确的输出。我将首先向您展示我的脚本:
def testFIle():
# This Function will be used to enumerate through the same file you
used to create the switch dictionary,
# but will define a function for each line.
# filepath = '/home/smiley/Desktop/sampletenbools'
filepath = '/home/smiley/Desktop/10boolsALL'
with open(filepath) as fp:
num = 1
for cnt, line in enumerate(fp):
var = line
b1 = str(var)[0]
b2 = str(var)[1]
b3 = str(var)[2]
b4 = str(var)[3]
b5 = str(var)[4]
b6 = str(var)[5]
b7 = str(var)[6]
b8 = str(var)[7]
b9 = str(var)[8]
b10 = str(var)[9]
# YdrawLocationSVC1=490
# YdrawLocationSVC2=475
# YdrawLocationSVC3=460
# YdrawLocationSVC4=445
# YdrawLocationSVC5=430
# YdrawLocationSVC6=415
# YdrawLocationSVC7=400
# YdrawLocationSVC8=375
# YdrawLocationSVC9=360
# YdrawLocationSVC10=345
if b1 == "0":
YdrawLocationSVC1=1111
YdrawLocationSVC2=1
if b1 == "1":
YdrawLocationSVC1 = 1
if b2 == "0":
YdrawLocationSVC2=1111
YdrawLocationSVC3=2
if b2 == "1":
YdrawLocationSVC2 = 2
if b3 == "0":
YdrawLocationSVC3=1111
YdrawLocationSVC4=3
if b3 == "1":
YdrawLocationSVC3 = 3
if b4 == "0":
YdrawLocationSVC4=1111
YdrawLocationSVC5=4
if b4 == "1":
YdrawLocationSVC4 = 4
if b5 == "0":
YdrawLocationSVC5=1111
YdrawLocationSVC6=5
if b5 == "1":
YdrawLocationSVC5 = 5
if b6 == "0":
YdrawLocationSVC6=1111
YdrawLocationSVC7=6
if b6 == "1":
YdrawLocationSVC6 = 6
if b7 == "0":
YdrawLocationSVC7=1111
YdrawLocationSVC8=7
if b7 == "1":
YdrawLocationSVC7 = 7
if b8 == "0":
YdrawLocationSVC8=1111
YdrawLocationSVC9=8
if b8 == "1":
YdrawLocationSVC8 = 9
if b9 == "0":
YdrawLocationSVC9=1111
YdrawLocationSVC10=9
if b9 == "1":
YdrawLocationSVC9 = 9
if b10 == "0":
YdrawLocationSVC10=1111
if b10 == "1":
YdrawLocationSVC10 = 10
print "# Bitrep ="+str(var).strip("\n")
print "def Print"+str(num)+"():"
print"\tc.setFont('Deja', 12, leading=None)"
print "\t# SERVICE NAME"+\
"\n\tc.drawString(100, "+str(YdrawLocationSVC1)+", stringn1)"+\
"\n\tc.drawString(100, "+str(YdrawLocationSVC2)+", stringn2)"+\
"\n\tc.drawString(100, "+str(YdrawLocationSVC3)+", stringn3)"+\
"\n\tc.drawString(100, "+str(YdrawLocationSVC4)+", stringn4)"+\
"\n\tc.drawString(100, "+str(YdrawLocationSVC5)+", stringn5)"+\
"\n\tc.drawString(100, "+str(YdrawLocationSVC6)+", stringn6)"+\
"\n\tc.drawString(100, "+str(YdrawLocationSVC7)+", stringn7)"+\
"\n\tc.drawString(100, "+str(YdrawLocationSVC8)+", stringn8)"+\
"\n\tc.drawString(100, "+str(YdrawLocationSVC9)+", stringn9)"+\
"\n\tc.drawString(100, "+str(YdrawLocationSVC10)+", stringn10)"
# print("{} : {}".format(str(line).strip("\n"), "Print" + str(num)))
num += 1
# print "\n"
testFIle()
目前,只要仅缺少一项服务,此代码就会在此处生成像这样的正确输出:
# Bitrep =1111111101
def Print1022():
c.setFont('Deja', 12, leading=None)
# SERVICE NAME
c.drawString(100, 1, stringn1)
c.drawString(100, 2, stringn2)
c.drawString(100, 3, stringn3)
c.drawString(100, 4, stringn4)
c.drawString(100, 5, stringn5)
c.drawString(100, 6, stringn6)
c.drawString(100, 7, stringn7)
c.drawString(100, 9, stringn8)
c.drawString(100, 1111, stringn9)
c.drawString(100, 10, stringn10)
# Bitrep =1111111110
def Print1023():
c.setFont('Deja', 12, leading=None)
# SERVICE NAME
c.drawString(100, 1, stringn1)
c.drawString(100, 2, stringn2)
c.drawString(100, 3, stringn3)
c.drawString(100, 4, stringn4)
c.drawString(100, 5, stringn5)
c.drawString(100, 6, stringn6)
c.drawString(100, 7, stringn7)
c.drawString(100, 9, stringn8)
c.drawString(100, 9, stringn9)
c.drawString(100, 1111, stringn10)
# Bitrep =1111111111
def Print1024():
c.setFont('Deja', 12, leading=None)
# SERVICE NAME
c.drawString(100, 1, stringn1)
c.drawString(100, 2, stringn2)
c.drawString(100, 3, stringn3)
c.drawString(100, 4, stringn4)
c.drawString(100, 5, stringn5)
c.drawString(100, 6, stringn6)
c.drawString(100, 7, stringn7)
c.drawString(100, 9, stringn8)
c.drawString(100, 9, stringn9)
c.drawString(100, 10, stringn10)
但是,我的代码中的逻辑因多个缺失的服务而中断,如下所示:
# Bitrep =1111100101
def Print998():
c.setFont('Deja', 12, leading=None)
# SERVICE NAME
c.drawString(100, 1, stringn1)
c.drawString(100, 2, stringn2)
c.drawString(100, 3, stringn3)
c.drawString(100, 4, stringn4)
c.drawString(100, 5, stringn5)
c.drawString(100, 1111, stringn6)
c.drawString(100, 1111, stringn7)
c.drawString(100, 9, stringn8)
c.drawString(100, 1111, stringn9)
c.drawString(100, 10, stringn10)
# Bitrep =1111100110
def Print999():
c.setFont('Deja', 12, leading=None)
# SERVICE NAME
c.drawString(100, 1, stringn1)
c.drawString(100, 2, stringn2)
c.drawString(100, 3, stringn3)
c.drawString(100, 4, stringn4)
c.drawString(100, 5, stringn5)
c.drawString(100, 1111, stringn6)
c.drawString(100, 1111, stringn7)
c.drawString(100, 9, stringn8)
c.drawString(100, 9, stringn9)
c.drawString(100, 1111, stringn10)
如果有人可以修复此问题,以便文件中所有行的输出看起来像下一位,我会为你投票赞成 **** 大声笑:
def Print999():
c.setFont('Deja', 12, leading=None)
# SERVICE NAME
c.drawString(100, 1, stringn1)
c.drawString(100, 2, stringn2)
c.drawString(100, 3, stringn3)
c.drawString(100, 4, stringn4)
c.drawString(100, 5, stringn5)
c.drawString(100, 1111, stringn6)
c.drawString(100, 1111, stringn7)
c.drawString(100, 6, stringn8)
c.drawString(100, 7, stringn9)
c.drawString(100, 1111, stringn10)
def Print764():
c.setFont('Deja', 12, leading=None)
# SERVICE NAME
c.drawString(100, 1, stringn1)
c.drawString(100, 2, stringn2)
c.drawString(100, 1111, stringn3)
c.drawString(100, 3, stringn4)
c.drawString(100, 4, stringn5)
c.drawString(100, 1111, stringn6)
c.drawString(100, 1111, stringn7)
c.drawString(100, 5, stringn8)
c.drawString(100, 6, stringn9)
c.drawString(100, 1111, stringn10)
和往常一样,如果你写到我的帖子的结尾,我会印象深刻,哈哈。感谢任何为此付出哪怕一丁点努力的人,感谢所有帮助我走到这一步的人。