2013-06-24 26 views
26

Tôi mới bắt đầu làm việc với iText (5.4.2, phiên bản mới nhất) và có hai điều mà tôi chưa quản lý để bắt đầu.Định hướng và định vị cảnh quan iText?

  • Tạo tài liệu ở chế độ ngang. Tất cả các trang được hiển thị dọc.
  • Chèn hình ảnh vào một vị trí cụ thể (số milimét từ trên cùng & bên trái).

Tôi có mã bên dưới.

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(); 

Nhưng trang được hiển thị ở góc trên bên trái (không phải 10 và 15 đơn vị cách xa theo yêu cầu). Tôi đang làm gì sai?

Trả lời

42

Bạn đang sử dụng PageSize.A4_LANDSCAPE, một biến được giới thiệu bởi cộng tác viên và không bao giờ nên được thêm vào bản phát hành chính. Vui lòng sử dụng PageSize.A4.rotate() thay thế.

Nó không rõ ràng những gì bạn muốn đạt được với các dòng:

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

Đó là thu khí, không setters. Dường như bạn đang giả định rằng PDF tương tự như HTML. Giả định đó là sai.

Nếu bạn muốn hình ảnh được đặt 10 đơn vị người dùng từ bên trái và 15 đơn vị người dùng từ trên cùng (trong trường hợp 100 và 150 là giá trị sai), bạn có thể thay thế 0 giá trị trong trình tạo tài liệu của mình để xác định lề trái của 10 đơn vị người dùng và 15 đơn vị người dùng trên cùng.

Một cách khác là xác định vị trí tuyệt đối cho hình ảnh bằng phương pháp setAbsolutePosition(). Trong trường hợp đó, bạn cần lưu ý rằng hệ tọa độ được định hướng sao cho góc dưới bên trái của trang có toạ độ x = 0, y = 0 cho các tài liệu được tạo từ đầu.

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