2013-11-28 5 views
1

현재 ITextSharp를 사용 중이며 Action 제 2 판의 IText, 특히 ColumnText 개체를 사용하는 74 페이지를 따라야합니다.ColumnText 및 truncate issue

PDFReader 및 PDFStamper 클래스를 사용하여 PDF 파일을로드하고 PDF 문서에 여러 요소를 추가하려고합니다.

PdfStamper pdfStamper = new PdfStamper(pdfReader, fileStream); 
PdfContentByte canvas = pdfStamper.GetOverContent(1); 
Rectangle size = pdfReader.GetPageSizeWithRotation(1); 


ColumnText ct = new ColumnText(canvas); 
//I have multiple calls like below, with different x,y coords 
ct.SetSimpleColumn(10, 634, 100, 642); 
ct.AddText(new Chunk("1234567890 999 9 9 999000 0 877")); 
ct.Go(); 

내가 알아 채는 것은 텍스트가 멈추고 그 자체로 쓰는 것입니다 (동일한 열?). 기본적으로 경계가 끝나면 멈출 필요가 있습니다. 다른 열에 표시 할 여분의 텍스트가 필요하지 않습니다.

나는 ColumnText.HasMoreText 검사와 Go() 반환 값에 대해 읽었습니다. 이 경우 NO_MORE_COLUMNS가 2로 생각됩니다.

필기체를 텍스트 위에 쓰지 않고 올바르게 작동시키는 방법을 알지 못합니다.

텍스트는 "019 298397 4795 69 7989990000"으로 표시되며이 텍스트는 그 자체로 덮어 쓰기 시작한다는 것을 알 수 있습니다.

누구든지이 ID를 도와 주시면 감사하겠습니다. 설명이 필요하면 알려주세요.

+0

iText의 최신 버전으로 문제를 재현하려고 시도했지만 문제를 재현 할 수 없습니다. 어쩌면 이전 버전을 사용하고 있으며 수정 된 버그가 발생했을 수도 있습니다. –

+0

좋아요, ITextSharp를 5.4.4로 업데이트했고, 여전히 중복되는 중입니다. 테스트 코드가 나에게 표시되는지 확인할 수 있도록 해 주시겠습니까? – abbottmw

+0

제가 말씀 드리고있는 일부 샘플 코드에 [Gist] (https://gist.github.com/abbottmw/7705800)를 추가했습니다. 해당 코드를 실행하고 Test2.pdf를 보면 텍스트가 겹쳐서 보입니다. 다시 말하지만, 내가 뭔가를 놓친다면, 알려주세요. – abbottmw

답변

4

좋아, 마침내 예제를 살펴볼 시간을 찾았습니다.

처음 : Font을 정의하지만 아무데도 사용하지 마십시오. 기본 글꼴은 Phrase (Helvetica 12pt, 18pt로 구성)에 사용됩니다.

길이가 18pt 인 경우 y = 634y = 642 사이에 텍스트를 맞출 수 없다는 것을 의미합니다. 이것을 y = 634y = 652으로합시다.

마지막으로 텍스트 모드를 사용 중입니다. 대부분 복합 모드를 사용하는 것이 좋습니다. 이런 식으로 코드를 변경하면 작동합니다 :

PdfReader reader = new PdfReader("resources/hello.pdf"); 
using (FileStream fileStream = new FileStream("PDF/Test2.pdf", FileMode.Create, FileAccess.Write)) { 
    PdfStamper stamper = new PdfStamper(pdfReader, fileStream); 
    ColumnText ct = new ColumnText(stamper.GetOverContent(1)); 
    ct.SetSimpleColumn(10, 634, 100, 652, 0, Element.ALIGN_LEFT); 
    ct.AddElement(new Phrase("1234567890 999 9 9 999000 0 877")); 
    ct.Go(); 
    stamper.Close(); 
} 
reader.Close(); 
+0

도움 주셔서 감사합니다. 나는 당신의 도움으로이 일을하게되었습니다. 나는 바보 같은 질문을 가지고있다. 텍스트가 Y 사이에 맞는지 어떻게 알 수 있습니까? 내가 찾아야 할 것은 단지 주도적인가? 그걸 알아내는 "수식"은 무엇입니까? 글꼴 크기가 너무 중요합니까? – abbottmw

+1

높이는 다른 요소에 의해 결정됩니다. * 글꼴 크기 *는 글리프의 평균 높이입니다. * Leading *은 기준선 사이의 거리입니다. 기본적으로 iText는 글꼴 크기의 1.5 배를 사용합니다. 따라서 폰트 크기가 12 인 경우, iText는 기본적으로 18을 표시합니다 (물론이 값을 변경할 수 있습니다). 정확한 높이를 원한다면 http://itextpdf.com/examples/iia.php?id=61을보십시오.'getAscentPoint()'와'getDescentPoint()'의 반환 값의 차이는 실제 신장. –