2014-03-03 31 views
0

我需要获得我已经添加到文档中的段落的绝对坐标,并在该文档附近加入一个图像。如何使用iText获得段落绝对坐标?

一般来说,我的问题是: 我有一个检查清单与每行前的图像(选中/未选中)。我已经这样做了,但如果检查项目需要例如2行,则第二行从页面的开始处开始。我想要从第一行开始的位置开始第二行。如果第二行有余量,这相当于。 在此先感谢!

+0

*我已经添加到文档中的段落* - 你的意思是你只是将段落添加到'Document'并且还没有关闭它?或者你是否已经将该段落添加到某个文档中,然后关闭了它,所以你只有生成的PDF文件? – mkl

+0

不,它不是封闭的文件。如果你正在谈论这个问题,我不需要解析它。 – bgplaya

+1

在这种情况下,在添加段落与“Document.getLeft”和“Document.getRight”组合之前和之后,您从“PdfWriter.getVerticalPosition”获得的信息是否足够? – mkl

回答

1

我认为你的问题是错误的。请允许我解释一下:你有一个具体的要求:你想用一个充当子弹的图像(表示一个选中/未选中的复选标记)开始一行。更具体地说:您希望将项目符号后面的文本正确对齐。这是一个有效的要求。

但是,在你的问题中,你问的是具体的实现。您想与Y位置(检查一个段落是否需要一条或多条线)和X位置(使用特定缩进开始第二条线)配合使用。

尽管可能使用页面事件(请求段落的开始和结束位置)来实现您想要的功能,但我认为您实际上是在寻求开箱即用的功能:为什么不使用List与图像块作为子弹?

我写了一些示例代码,ListWithImageAsBullet,我使用灯泡作为子弹(在你的情况下,你会使用复选框图像)。我向List添加了三项,第二项占用了多行。如您所见,第二行缩进正确(您可以使用List类中提供的不同方法扩大缩进)。

请看看resulting PDF。那是你在找什么?

如果是这样,这是它是如何做:

Image image = Image.getInstance(IMG); 
image.scaleAbsolute(12, 12); 
image.setScaleToFitHeight(false); 
List list = new List(); 
list.setListSymbol(new Chunk(Image.getInstance(image), 0, 0)); 
list.add("Hello World"); 
list.add("This is a list item with a lot of text. It will certainly take more than one line. This shows that the list item is indented and that the image is used as bullet."); 
list.add("This is a test"); 
document.add(list); 

请注意,我用12磅缩放图像到12,因为12磅是默认的字体大小。另外不要忘记关闭图像的自动缩放功能(否则,最终会出现子弹图像)。

+0

你是完全正确的!非常感谢你的答案。 – bgplaya