我可以用位移位来简化这个程序吗(位偏移/标志)

2024-09-28 22:20:13 发布

您现在位置:Python中文网/ 问答频道 /正文

在一个有趣的Python项目中使用ReportLab一次创建几十个pdf。ReportLab要求您选择绘制字符串的位置

在我生成的PDF文件中,我有多达六项服务将向接收者收费。如果接收客户端没有请求或接收这些服务,即(service==0/null),那么我将附带的布尔值设置为false,并继续测试其余的服务。我需要测试几个布尔值,以便确定绘制服务字符串的位置

在这个过程的最后,我得到一个由6个整数组成的字符串,比如001001(F,F,T,F,F,T)。对于这组布尔函数,我将在位置1和2处绘制字符串3和6,而不是留下空格。我将提供一个小的视觉帮助了解这个问题。 (示例布尔011011)

 c.drawstring(locationX1,LocationY1, "Service2")
 c.drawstring(locationX1,LocationY1, "Service3")
 c.drawstring(locationX1,LocationY1, "Service5")
 c.drawstring(locationX1,LocationY1, "Service6")

 {produces
  Service2
  Service3
  Service5
  Service6}


 {rather than

  Service2
  Service3

  Service5
  Service6}

目前在我的程序中,为了测试所有这些布尔值,我有一个包含这些布尔字符串(000000-111111)的64种可能组合的字典 i、 e

 "010011" : print20,
 "010100" : print21,
 "010101" : print22,
 "010110" : print23,
 "010111" : print24,
 "011000" : print25,

以及为每个可能的结果编写的函数,例如

 #BitRep=111011
 def print60():
     c.setFont('Deja', 12, leading=None)
     c.drawString(100, YdrawLocationSVC1, "Service 1 ")
     c.drawString(250, YdrawLocationSVC1, str(service1))
     c.drawString(100, YdrawLocationSVC2, "Service 2 ") 
     c.drawString(250, YdrawLocationSVC2, str(service2)) 
     c.drawString(100, YdrawLocationSVC3, "Service 3 ")
     c.drawString(250, YdrawLocationSVC3, str(service3))
     c.drawString(100, YdrawLocationSVC4, "Service 5 ")
     c.drawString(250, YdrawLocationSVC4, str(service5))
     c.drawString(100, YdrawLocationSVC5, "Service 6 ")
     c.drawString(250, YdrawLocationSVC5, str(service6))

总而言之,谢谢你抽出时间来阅读这篇文章,任何有想法的人我都很乐意听到。最后我要补充的是我目前最喜欢的解决方案,虽然它不能很好地适应我的问题,但我想进一步探讨这个选项。我觉得答案在于位转换,但我对编程还是相当陌生,不确定如何最好地实现。非常感谢你的意见

(部分@maik-s的答案是我之前的帖子

 state = bool6 << 5
 state = state ^ (bool5 << 4)
 state = state ^ (bool4 << 3)
 state = state ^ (bool3 << 2)
 state = state ^ (bool2 << 1)
 state = state ^ (bool1)

()

我被要求在输出PDF中留下空字符串的地方发布代码。给你

对于直列n:

Service1=n[1]
Service2=n[2]
Service3=n[3]
Service4=n[4]
Service5=n[5]
Service6=n[6]
           (X , Y  )
c.drawString(72, 120, str(Service1))
c.drawString(72, 105, str(Service2))
c.drawString(72, 90, str(Service3))
c.drawString(72, 75, str(Service4))
c.drawString(72, 60, str(Service5))
c.drawString(72, 45, str(Service6))

此代码的问题是,如果n[5]为=,则它将绘制一个空字符串


Tags: 函数字符串pdfservice绘制statereportlabstr