FPDF 中 MultiCell 的换行问题
我正在使用 FPDF 的 Java 端口。我遇到以下错误。
- 当我调用 multicell 两次时,每次文本都会打印在新行上。
MultiCell(0, 1, "abcd", currentBorders, Alignment.LEFT, false); //prints on one line
MultiCell(0, 1, "efg", currentBorders, Alignment.LEFT, false); //prints on next line
我希望在调用多单元格后没有换行符。我该怎么做呢?
- 如果我执行以下操作,则字符串的某些部分将打印在一行上,而某些部分将打印在下一行上。
MultiCell(getStringWidth(myString), 1, myStringcurrentBorders, Alignment.LEFT, false);
- 如果我执行以下操作,则打印 myString 的行后面会有许多空行。如果我使用一个 1 作为第二个参数,它就可以正常工作。
MultiCell(0, myFontSize, "123456", currentBorders, Alignment.LEFT, false);
问题是什么?
I am using the Java port of FPDF. I am encountering the following errors.
- When I call multicell two times, every time the text is printed on a new line.
MultiCell(0, 1, "abcd", currentBorders, Alignment.LEFT, false); //prints on one line
MultiCell(0, 1, "efg", currentBorders, Alignment.LEFT, false); //prints on next line
I want there to be no line break after the call to multicell. How can I do it?
- If I do the following, then some part of my string gets printed on one line and some on the next.
MultiCell(getStringWidth(myString), 1, myStringcurrentBorders, Alignment.LEFT, false);
- If I do the following, then there are many blank lines after the line on which myString is printed. It works correctly if I use one 1 as the second parameter.
MultiCell(0, myFontSize, "123456", currentBorders, Alignment.LEFT, false);
What is the problem?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
我会在写入
MultiCell
之前获取当前的Y
位置,然后将“光标”移回MultiCell 之后的
一代。像这样:Y
位置类似这样的事。
I would get the current
Y
position before writing theMultiCell
and then move the "cursor" back to thatY
position after theMultiCell
generation. Like this:Something like that.
我创建了一个名为 MultiAlignCell 的新方法。它采用与
MultiCell
相同的参数,但使用从Cell
ln 字段一个>。您可以将其添加到扩展的FPDF
类中。I created a new method called
MultiAlignCell
. It takes the same parameters asMultiCell
but with the addedln
field fromCell
. You can add it to your extendedFPDF
class.我修改了MultiCell方法,它的工作原理与上面的答案相同,您可以像Cell方法一样使用该方法。
I have modified the MultiCell method, it works as the above answer, and you can use the method in the same way as the Cell method.
就我而言,我没有创建任何方法,我只是设置了 X 和 Y,然后在行的末尾重置。它也能完美工作。
in my case I didn't create any method, I just set X and Y and then at the end of the line I reset. It works perfectly too.
@Muhammad Abdul Rahim 和@tomazahlin 提供了很好的方法。他们只解决了单个单元格中的换行问题。它们的主题单元格的高度与同一行中的其他单元格的高度不匹配。如果处理动态表,使用 GetY() 会变得很复杂。我发现的最简单的解决方案是识别可能具有溢出文本的列并将其用作参考。
生成pdf时,如果MultiAlignCell的字符串长于单元格宽度,则会产生换行。所得高度是两倍 (5 x 2 = 10)。 10 的高度被指定为 $h。因此,其他单元格也采用 $h 的高度,并且整行获得统一的高度。
@Muhammad Abdul Rahim and @tomazahlin have have provided good methods. The problem they only sort out the line break problem in a single cell. They don't match the height of the subject cell with other cells in the same row. Using GetY() gets complicated if you are dealing with dynamic tables. The simplest solution I have found is identifying the column likely to have overflowing text and using it as a reference.
When the pdf is generated, if the string of MultiAlignCell is longer than the cell width, a line break is generated. The resulting height is twice(5 x 2 = 10). The height of ten is asigned to $h. Hence the other cells take the height of $h as well and the entire row gets a uniform height.