iText不规则列图像和文本换行

时间:2015-09-16 15:36:39

标签: c# itext textwrapping

我使用iTextSharp生成PDF,另一个部门坚持要让我尽可能地匹配他们的模型。我遇到了在列中的图像周围包装文本的问题。我从研究中得知,在带有文本的PDFCell中放置图像并不起作用,所以我试图使用不规则的列。以下是我的示例代码。

float width = 200.0f;
float height = 320.0f;
float gutter = 3;
PdfTemplate tempCanvas = writer.DirectContent.CreateTemplate(width, height);
float x1 = underPressure.ScaledWidth + gutter;
float y1 = height - underPressure.ScaledHeight - gutter;
float[] LEFT = new float[] { width, height, x1, y1, 0, y1, 0, 0 };
float[] RIGHT = new float[] {0,height,width,0};

ColumnText ct = new ColumnText(tempCanvas);
ct.SetColumns(LEFT, RIGHT);
underPressure.SetAbsolutePosition(x1 - 10, y1 - 120);
tempCanvas.AddImage(underPressure);
ct.SetText(tempPhrase);
...

我找到了将图像放在文本左侧的代码,并根据图像获取要包装的文本,但我需要的内容如下所示:

http://i.stack.imgur.com/xx4KU.png

我必须承认,我对LEFT和RIGHT列属性感到困惑。在本书中,LEFT和RIGHT数组定义了您要创建的多边形的边框,但有人可以更详细地描述其工作原理吗?我一直试图绕过它并且悲惨地失败。感谢您提前获得任何建议。

1 个答案:

答案 0 :(得分:0)

所以我终于弄明白了,我想我会在这里发帖。我不得不重读iText书几次来解决这个问题,但LEFT和RIGHT数组只是你想要为绘制该列而绘制的多边形指定的点。

//要创建不规则列,必须以左侧坐标和右侧坐标的形式指定要绘制的多边形的点。

//Because we only need a straight line for the left side of the shape of the column, we can specify two points: the top coordinate, and the bottom coordinate.
//The right is a little trickier, but using Math, you can create the points you need the scaled width and scaled height of the image.
float[] LEFT = new float[] { 0,height, 0,0 };
float[] RIGHT = new float[] {width,height,  width,y1 + 40,  width - x1 - 5,y1 + 40,  width - x1 - 5,y1 - underPressure.ScaledHeight / 2.0f + 10,  width, y1 - underPressure.ScaledHeight / 2.0f + 10, width, 0 };

给我我需要的结果。 LEFT仅是形状的顶部左上角,以及形状的左下角。我只需要左边的直线。 RIGHT数组有点棘手,但它是我需要的形状,可以用数学计算出来。

耶。