2013-03-14 19 views
10

Tôi có một trang web nơi người dùng tải lên ảnh và tạo sách ảnh. Ngoài ra, họ có thể thêm văn bản ở vị trí tuyệt đối, xoay và sắp xếp. Văn bản có thể có các dòng mới.Xoay các đoạn hoặc ô một số số độ tùy ý - Itext

Tôi đã sử dụng Thư viện nội dung để tự động hóa việc tạo Sách ảnh chất lượng cao Pdfs được in sau này.

Việc thêm hình ảnh do người dùng tải lên tệp PDF thực sự đơn giản, sự cố xảy ra khi tôi cố gắng thêm văn bản. Về lý thuyết điều tôi cần làm là xác định một đoạn của một số chiều rộng và chiều cao được xác định, đặt văn bản người dùng, phông chữ, kiểu phông chữ, căn chỉnh (giữa, trái, phải, biện minh) và cuối cùng đặt Vòng xoay.

Đối với những gì tôi đã đọc về Itext, tôi có thể tạo một đoạn đặt thuộc tính người dùng và sử dụng đối tượng ColumnText để đặt vị trí tuyệt đối, chiều rộng và chiều cao. Tuy nhiên nó không thể thiết lập vòng quay của bất cứ thứ gì lớn hơn một dòng.

tôi không thể sử dụng tế bào bảng hoặc, bởi vì phương pháp luân chuyển chỉ cho phép độ đó là bội số của 90.

Có cách nào để thêm một đoạn văn với một số vòng quay (nói 20 độ) mà không cần phải thêm dòng văn bản theo dòng sử dụng phương pháp ColumnText.showTextAligned() và tất cả các phép toán liên quan đến?

---- Edit: 08-trước năm 2013 ----

Nếu nó giúp mọi người, đây là đoạn code tôi sử dụng để giải quyết vấn đề này (nhờ Bruno):

//Create the template that will contain the text 
PdfContentByte canvas = pdfWriter.getDirectContent(); 
PdfTemplate textTemplate = canvas.createTemplate(imgWidth, imgHeight); //The width and height of the text to be inserted 

ColumnText columnText = new ColumnText(textTemplate); 

columnText.setSimpleColumn(0, 0, imgWidth, imgHeight); 
columnText.addElement(paragraph); 

columnText.go(); 

//Create de image wraper for the template 
Image textImg = Image.getInstance(textTemplate); 

//Asign the dimentions of the image, in this case, the text 
textImg.setInterpolation(true); 
textImg.scaleAbsolute(imgWidth, imgHeight); 
textImg.setRotationDegrees((float) -textComp.getRotation()); //Arbitrary number of degress 
textImg.setAbsolutePosition(imgXPos, imgYPos); 

//Add the text to the pdf 
pdfDocument.add(textImg); 
+1

Edited các câu hỏi với các mã tôi sử dụng. – BernalCarlos

Trả lời

10
  • Tạo đối tượng PdfTemplate; chỉ là một hình chữ nhật.
  • Vẽ ColumnText trên PdfTemplate; đừng lo lắng về việc xoay vòng, chỉ cần điền vào hình chữ nhật với bất kỳ nội dung nào bạn muốn thêm vào cột.
  • Bọc PdfTemplate bên trong đối tượng Image; đây chỉ là để thuận tiện, để tránh toán. Điều này không có nghĩa là văn bản của bạn sẽ bị rasterized.
  • Bây giờ, hãy áp dụng vòng xoay và vị trí tuyệt đối cho Image và thêm nó vào tài liệu của bạn.

vấn đề của bạn đã được giải quyết ;-)

PS: Tôi là tác giả của iText trong sách hành động.

+0

Bạn đúng! Đã giải quyết được sự cố. Cảm ơn bạn rất nhiều. – BernalCarlos

+0

@BrunoLowagie, đây cũng là cách tốt nhất để xoay văn bản khi sử dụng 'ColumnText.setSimpleColumn()' và '.setText (myPhrase)' theo chương 3.3.1 của iText trong Hành động (2nd Ed.)? – Ben

+0

Hãy xem câu hỏi này được trả lời như thế nào trong [Câu hỏi iText hay nhất trên StackOverflow] (https://leanpub.com/itext_so). Trên thực tế, câu hỏi của bạn được trả lời trong EDIT được thực hiện cho câu hỏi này.Sự khác biệt duy nhất là BernalCarlos sử dụng 'ColumnText' trong chế độ tổng hợp, trong khi bạn đang sử dụng chế độ văn bản. Sự khác biệt được giải thích trong ebook miễn phí. –

1

nhờ cả bạn bè của chúng tôi (Bruno & BernalCarlos) mã cuối cùng của tôi cho những người dùng sử dụng "RTL" trong các dự án của họ là ở đây:

// step 1 
Document document = new Document(); 
document.setPageSize(PageSize.A4); 

// step 2 
PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(destination_file)); 
CreateBorder event = new CreateBorder(); 
writer.setPageEvent(event); 

// step 3 
document.open(); 

// step 4 
int imgWidth=400; 
int imgHeight=50; 
//Create the template that will contain the text 
PdfContentByte canvas = writer.getDirectContent(); 
PdfTemplate textTemplate = canvas.createTemplate(imgWidth, imgHeight); 
//The width and height of the text to be inserted 

ColumnText columnText = new ColumnText(textTemplate); 
columnText.setSimpleColumn(0, 0, imgWidth, imgHeight); 
columnText.setRunDirection(PdfWriter.RUN_DIRECTION_RTL); 
columnText.addElement(new Paragraph("محاسبه بار غیر متعادل", font_IranSemiBold)); 
columnText.go(); 

//Create de image wraper for the template 
Image textImg = Image.getInstance(textTemplate); 

//Asign the dimentions of the image, in this case, the text 
textImg.setInterpolation(true); 
textImg.scaleAbsolute(imgWidth, imgHeight); 
textImg.setRotationDegrees(90); //Arbitrary number of degress 
textImg.setAbsolutePosition(50, 200); 

//Add the text to the pdf 
document.add(textImg); 

// step 5 
document.close(); 
Các vấn đề liên quan