我必须去检索一些我的代码,但我似乎记得必须通过测量当前的X/Y位置来计算该值,然后根据我使用的任何保证金计算该值,然后确定是否更多信息可能适合或如果我需要一个新的页面。我的项目是包装长文本块,这是相似的,但不是很相似。稍后我会在这里更新一些代码。
def newline(self, options, text = ''):
if getattr(self, 'lpp', None) == self.lines[self.pages]:
self.newpage()
if getattr(self, 'y', None) > self.h - self.bm * inch:
self.newpage()
在这种情况下,我不得不为LPP属性(每页行数),这可能已经确定,所以我第一次检查,看看是否该值存在,如果是这样,如果我在的行数当前页面。如果每页的总行数没有限制,那么我会测试我的Y位置和底部边距是多少。如有必要,在页面中打补丁。这里有一些遗漏,但这是一个普遍的想法。
def newline(self, options, text = ''):
if getattr(self, 'lpp', None) == self.lines[self.pages]:
self.newpage()
if getattr(self, 'y', None) > self.h - self.bm * inch:
self.newpage()
self.addLine()
self.putText(self.x, self.h - self.y, text)
def putText(self, x, y, text):
# If we actually place some text then we want to record that.
if len(text.strip()) > 0 and not self.hasText[self.pages]:
self.hasText[self.pages] = True
# Something here to handle word wrap.
if self.wrap:
lines = self._breakScan(text)
if len(lines) > 1:
self.c.drawString(x, y, lines[0])
self.newline('', ' '.join(lines[1:]))
elif lines:
self.c.drawString(x, y, lines[0])
else:
self.c.drawString(x, y, text)
在这里,self.c
是我的画布。我记录了我在页面上放置了多少行,因为有时我们会重新包装可能包含分页符的文档,所有这些都在我们的自定义标记中。
我想我明白了。换行是段落的一种方法吗?它什么时候被叫? – jammon 2011-06-10 14:29:36
@jammon - 对不起,我可以更详细地解释我的方法。在这个例子中,Self是一个自定义类。它将各种命令从自定义标记语法映射到reportlab中相应的api调用。他们的库中可能没有'newline()'方法。我会添加一些额外的代码来进一步演示。 – 2011-06-10 16:50:48
的确非常感谢。我会尽力把我的大脑包裹起来。 Reportlab对初学者非常有用,但肯定有一些边缘和任务,解决方案很不明显。 – jammon 2011-06-11 14:44:49