2013-06-24 40 views
26

我刚刚开始使用iText(5.4.2,最新版本),并且还有两件事我还没有成功实现。iText横向定位和定位?

  • 在横向上创建文档。所有页面都呈现肖像。
  • 将图像插入给定位置(从顶部&左侧数毫米)。

我有下面的代码。 (不是10,并从它15个单位远的要求)

Document d = new Document(PageSize.A4_LANDSCAPE,0,0,0,0); 
PdfWriter writer = PdfWriter.getInstance(d, new FileOutputStream("C:/test.pdf")); 
document.open(); 
document.newPage(); 
Image img = Image.getInstance(String.format("C:/file.png")); 
img.scaleToFit(400,240); 
document.left(100f); 
document.top(150f); 
document.add(img); 
document.close(); 

但页面在纵向(而不是横向)渲染和图像被放在左上角。我究竟做错了什么?

回答

42

您正在使用PageSize.A4_LANDSCAPE,这是一个由贡献者引入的变量,应该从未添加到主版本中。请改用PageSize.A4.rotate()

目前尚不清楚你要实现与线什么:

document.left(100f); 
document.top(150f); 

这些都是getter方法,而不是制定者。看起来您似乎认为PDF与HTML类似。这个假设是错误的。

如果您希望将图像从左边放置10个用户单位,并从顶部放置15个用户单位(在这种情况下,100和150是错误的值),您可以替换Document构造函数中的0值以定义10个用户单位的左边界和最高边界15个用户单位。

另一种方法是使用方法setAbsolutePosition()定义图像的绝对位置。在这种情况下,您需要意识到坐标系的方向应使得页面的左下角的坐标x = 0,y = 0用于从头开始创建的文档。

1
iTextSharp.text.Document pdfDoc = new iTextSharp.text.Document(iTextSharp.text.PageSize.A4.Rotate(), 10f, 10f, 10f, 0f);