2009-10-06 23 views
19

Tôi đang sử dụng iText để viết một tệp PDF. Trong một số trường hợp, tôi cần ký vào PDF với chức năng SetVisibleSignature. Với hàm này, chúng ta cần chỉ định hình chữ nhật mà chúng ta sẽ viết nội dung vào.Làm thế nào để tính toán chiều rộng chuỗi trong iText?

Nhưng thật khó để tính toán độ rộng của chuỗi, để tôi có thể đặt hình chữ nhật trước khi đặt chữ ký trên PDF.

Làm cách nào để tính chiều rộng chuỗi trong iText?

Trả lời

24

Bạn có thể sử dụng BaseFont.getWidthPoint(String text, float fontSize) để lấy chiều rộng của chuỗi bằng pt.

Hoặc đặt các chuỗi trong một Chunk và làm chunk.getWidthPoint()

+0

cách bạn truy xuất bản sao cơ sở? –

+0

Tôi muốn biết chiều rộng của các đoạn trong bảng. Dường như phương pháp sử dụng một đoạn trả về các giá trị sai. –

+0

Làm thế nào tĩnh 'getWidthPoint' sẽ biết font nào được giả định? x_X –

12

Câu trả lời được chấp nhận BaseFont.getWidthPoint, sẽ không làm việc trong 5.5.4 iText từ phương pháp này không phải là tĩnh nữa. Ngay cả khi nó vẫn còn tồn tại, nó không tính đến phông chữ thực sự đang được sử dụng (gia đình của nó hoặc đậm/in nghiêng) vì nó tĩnh và đang nhận các tham số giới hạn.

chunk.getWidthPoint() không hoạt động với phông chữ thực như sau này, nhưng đối với một số sử dụng nhất định là lãng phí để liên tục tạo một đoạn chỉ cho chiều rộng, đặc biệt là nếu đoạn không được lên kế hoạch sử dụng sau này.

Đây là mã cơ bản cho chunk.getWidthPoint() để sử dụng như là một thay thế độc lập, giả sử bạn không làm bất kỳ tỉ lệ ngang:

font.getCalculatedBaseFont(true).getWidthPoint(text, font.getCalculatedSize()); 
1

tôi đã kết thúc làm điều này với ColumnText.getWidth(Phrase phrase) kích thước gì chiều rộng của một Phrase sẽ trước khi hiển thị nó với ColumnText.showTextAligned.

Trong đoạn mã này, tôi đã sử dụng ColumnText.getWidth để kích thước độ dài của chuỗi để đặt ở trên cùng bên phải của trang. Nó hoạt động trong bức chân dung A4, chưa thử nghiệm thêm.

Phrase phrase = new Phrase("Bla bla bla!", new Font(FontFamily.HELVETICA, 9)); 
float width = ColumnText.getWidth(phrase); 

ColumnText.showTextAligned (
    canvas, 
    Element.ALIGN_LEFT, 
    phrase, 
    canvas.getPdfDocument().right() - width, 
    canvas.getPdfDocument().top() + 9, 
    0 
); 
Các vấn đề liên quan