2014-09-12 3 views
1

itextsahrp에서 여러 줄 문자를 어떻게 회전합니까?여러 줄 텍스트를 Columntext로 회전 ITextSharp

나는 시도했다 :

float x = 200; 
float y = 100; 
PdfContentByte cb = stamper.GetOverContent(i); 
ColumnText ct = new ColumnText(cb); 
ct.SetSimpleColumn(new Phrase(new Chunk("Test \n new", FontFactory.GetFont(FontFactory.HELVETICA, 18, iTextSharp.text.Font.NORMAL))), 
        x, reader.GetCropBox(i).Height -(y+400),500+x, y, 10, Element.ALIGN_LEFT | Element.ALIGN_TOP); 

ct.Go(); 

ColumnText.ShowTextAligned(
    cb, Element.ALIGN_CENTER, 
    new Phrase(new Chunk("Test \n new", FontFactory.GetFont(FontFactory.HELVETICA, 18, iTextSharp.text.Font.NORMAL))), x, reader.GetCropBox(i).Height-y, 12); 

ct.SetSimpleColumn는 multilie 텍스트를 표시하지만 나는 그것을 어떻게 회전합니까?

ColumnText.ShowTextAligned은 여러 줄을 표시하지 않습니다.

+2

이전 질문에 대답 할 때 이미 설명했습니다 :'Stamper.GetOverContent (i)'에'ColumnText'를 추가하는 대신'PdfTemplate' 객체를 사용하여 Form XObject를 생성하십시오. 이'PdfTemplate'에'ColumnText'를 추가하고 템플릿을 회전시키는 매개 변수를 받아들이는'AddTemplate()'메소드를 사용하여 그 템플릿을'stamper.GetOverContent (i)'에 추가하십시오. –

답변

2

컴퓨터에 C# 환경이 없기 때문에 Java로 예제를 작성했습니다 (AddRotatedTemplate). "Hello World"라는 단어가있는 기존 PDF 파일을 가져 왔으며 일부 텍스트가 포함 된/XObject 템플릿을 만들었으며 addTemplate() 메서드를 사용하여 두 번 템플릿/XObject를 추가했습니다 (한 번만 x, y 좌표 및 PI/4 등급으로 텍스트를 회전시키는 매개 변수 사용). 결과적으로 템플릿에 추가 된 텍스트가 두 번 추가됩니다. hello_template.pdf 참조).

코드입니다 :

public void manipulatePdf(String src, String dest) throws IOException, DocumentException { 
    PdfReader reader = new PdfReader(src); 
    PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(dest)); 
    // Get canvas for page 1 
    PdfContentByte cb = stamper.getOverContent(1); 
    // Create template (aka XOBject) 
    PdfTemplate xobject = cb.createTemplate(80, 120); 
    // Add content using ColumnText 
    ColumnText column = new ColumnText(xobject); 
    column.setSimpleColumn(new Rectangle(80, 120)); 
    column.addElement(new Paragraph("Some long text that needs to be distributed over several lines.")); 
    column.go(); 
    // Add the template to the canvas 
    cb.addTemplate(xobject, 36, 600); 
    double angle = Math.PI/4; 
    cb.addTemplate(xobject, 
      (float)Math.cos(angle), -(float)Math.sin(angle), 
      (float)Math.cos(angle), (float)Math.sin(angle), 
      150, 600); 
    stamper.close(); 
    reader.close(); 
} 

내가 엔지니어와 나는 그렇게 변환 행렬을 사용하여 사용하고 거기 addTemplate() 방법의 다른 변화의 회전을 정의하는 쉬운 방법이 될 수 있지만, 그 나는 다른 유형의 방법을 사용할 필요성이나 욕구를 느끼지 않습니다.

+0

고맙습니다! 그것은 많은 도움이됩니다. 그러나 두 번째 addTemplate 메서드에서 삼각 함수의 순서가 잘못되었습니다. 올바른 순서는 cos() -sin() sin() cos()입니다. 귀하의 예제는 PI/4의 각도에서 잘 작동하지만 다른 각도의 경우 사각형이 회전하지 않고 변형됩니다. – seeb

+0

음, 쉬운 방법이 있다면 왜 보이지 않는지 ... – CularBytes