2009-10-26 36 views
22

Trong văn bản, tôi có một đoạn/cụm từ/đoạn (Tôi không quan tâm) và tôi muốn định vị một số vị trí khác trên trang, ví dụ: ở mức 300 x 200. Tôi sẽ làm như thế nào?văn bản định vị văn bản hoàn toàn

Trả lời

25

Cuối cùng tôi đã viết phương pháp của riêng mình để làm điều đó.

private void PlaceChunck(String text, int x, int y) { 
     PdfContentByte cb = writer.DirectContent; 
     BaseFont bf = BaseFont.CreateFont(BaseFont.HELVETICA, BaseFont.CP1252, BaseFont.NOT_EMBEDDED); 
     cb.SaveState(); 
     cb.BeginText(); 
     cb.MoveText(x, y); 
     cb.SetFontAndSize(bf, 12); 
     cb.ShowText(text); 
     cb.EndText(); 
     cb.RestoreState(); 
    } 
+1

Xin chào. Nó có hỗ trợ dòng mới không? – KarolDepka

+5

Tôi sẽ không downvote câu trả lời này, nhưng tôi không thích nó. Câu hỏi đặt ra là: làm thế nào để tôi định vị một đoạn, cụm từ, đoạn văn. Câu trả lời đúng là: bằng cách sử dụng ColumnText. Hoặc bạn có thể sử dụng phương thức showTextAligned() (chỉ đối với các đối tượng Phrase), hoặc bạn có thể sử dụng một cá thể ColumnText và phương thức go() nếu bạn cần hỗ trợ cho các dòng mới và/hoặc các đối tượng khác với Cụm từ. –

+2

@BrunoLowagie - làm thế nào về một câu trả lời đầy đủ sau đó? Sẽ rất hữu ích khi xem giải thích đúng cách. –

16

Dưới đây là một phiên bản với tất cả các vỏ đúng và thử/catch block:

private static void absText(String text, int x, int y) { 
    try { 
     PdfContentByte cb = writer.getDirectContent(); 
     BaseFont bf = BaseFont.createFont(BaseFont.HELVETICA, BaseFont.CP1252, BaseFont.NOT_EMBEDDED); 
     cb.saveState(); 
     cb.beginText(); 
     cb.moveText(x, y); 
     cb.setFontAndSize(bf, 12); 
     cb.showText(text); 
     cb.endText(); 
     cb.restoreState(); 
    } catch (DocumentException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    } 
+0

lỗi writer.getDirectContent() nếu tôi đã sử dụng Document document = new Document(); Thời gian phông chữ = null; // bước 2 PdfWriter writer; \t \t thử { \t \t \t writer = PdfWriter.getInstance (tài liệu, FileOutputStream mới (đường dẫn)); \t \t thì nó đã tạo tài liệu mới và tôi sẽ không cùng tài liệu với chức năng chỉnh sửa –

2

tôi một cái gì đó dọc theo những dòng này, có thể nó sẽ giúp đỡ người khác:

ColumnText ct = new ColumnText(writer.getDirectContent()); 
ct.setSimpleColumn(left,bottom,right,top); 
ct.setText(new Phrase("String")); 
ct.go(); 
+0

p là gì? Bạn có thể giải thích nó được không ? –

+0

Xin lỗi, nó phải là 'ct' –

0

Trong tôi trường hợp chỉ có giải pháp này làm việc tốt.

PdfWriter pdfWriter = PdfWriter.getInstance(document, new FileOutputStream(FILE)); 

Add phương pháp

private void addTextData(Document document, String text) { 
     PdfContentByte cb = pdfWriter.getDirectContent(); 
     cb.beginText(); 
     try { 
      BaseFont f_cn = BaseFont.createFont(BaseFont.HELVETICA, BaseFont.CP1252, BaseFont.NOT_EMBEDDED); 
      cb.setFontAndSize(f_cn, 40); 

      float requiredX = 50; 
      float requiredY = 50; 
      Paint paint = new Paint(); 
      paint.setTextSize(40); 
      Typeface typeface=Typeface.createFromAsset(getAssets(), "Helvetica.ttf"); 
      paint.setTypeface(typeface); 
      paint.setColor(Color.BLACK); 
      paint.setStyle(Paint.Style.FILL); 

      Rect result = new Rect(); 
      paint.getTextBounds(text, 0, text.length(), result); 
      Log.i("Text dimensions", "Width: "+result.width()+"-Height: "+result.height()); 
      float calculatedY = document.getPageSize().getHeight() - result.height() - requiredY; 
      cb.setTextMatrix(requiredX, calculatedY); 
      cb.showText(text); 
      cb.endText(); 
     } catch (DocumentException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
} 

Điều này sẽ giúp bạn biết chắc chắn.

Các vấn đề liên quan