2011-12-13 5 views
2

itextsharp를 aspmvc 프로젝트와 함께 사용하여 일부 페이지의 PDF 버전을 만듭니다. 나에게는 간단한 HTML (플러스 일부 스타일 정보를 별도로 제공)을 취하고 pdf를 만드는 아주 기본적인 파서가있다. 내 파서가 테이블을 만났을 때 각 셀에 대해 PdfPCell을 작성한 다음 셀을 차례로 반복합니다. 그런 다음 셀의 자식 요소를 반복하여 PdfPCell에 추가합니다. 그것은 꽤 기초적이지만 그것은 지금까지 나를 위해 일했습니다.itextsharp를 사용하여 pdfcell에 여러 이미지 배치하기

문제는 지금 행의 다른 상태를 나타내는 많은 아이콘이 포함 된 테이블 하나의 열이 있다는 것입니다. 이러한 이미지가 추가되면 pdf에서 다른 이미지가 아닌 다른 이미지가 위에 표시됩니다.

은 내가

I.Alignment = Image.TEXTWRAP Or Image.ALIGN_LEFT Or Image.ALIGN_MIDDLE 

을 시도하고 나중에 텍스트 청크를 추가 공간을 포함하지만, 도움이되지 않는 한

Dim I As iTextSharp.text.Image = Image.GetInstance(HttpContext.Current.Server.MapPath(El.Attributes("src").InnerText)) 

로 이미지를 만들 수 있습니다. 내가 본 유일한 제안은 I.SetAbsolutePosition()입니다. 차라리 절대 위치를 피하고 그것을 시도 할 준비가되어 있습니다 - 현재 X 위치를 찾는 방법을 찾지 못한다는 것을 제외하고는?

도움을 주시면 감사하겠습니다.

아담

답변

5

ChunkPhrase 개체를 사용하여 하나씩 추가 적절한 병렬 흐름을 얻을 Paragraph 객체의 이미지/텍스트를 바꿈. 이런 식으로 뭔가 (죄송합니다, 제가 VB하지 않음) :

PdfPTable table = new PdfPTable(2); 
PdfPCell cell = new PdfPCell(); 
Paragraph p = new Paragraph(); 
p.Add(new Phrase("Test ")); 
p.Add(new Chunk(image, 0, 0)); 
p.Add(new Phrase(" more text ")); 
p.Add(new Chunk(image, 0, 0)); 
p.Add(new Chunk(image, 0, 0)); 
p.Add(new Phrase(" end.")); 
cell.AddElement(p); 
table.AddCell(cell); 
table.AddCell(new PdfPCell(new Phrase("test 2"))); 
document.Add(table); 

편집 : 이미지 사이에 공백을 추가하는 방법 중 하나. 에만 이미지 작업; 당신이 혼합 된 텍스트/이미지 (들)이하려고하면, 그들은 중복됩니다

PdfPTable table = new PdfPTable(2); 
PdfPCell cell = new PdfPCell(); 
Paragraph p = new Paragraph(); 
float offset = 20; 
for (int i = 0; i < 4; ++i) { 
    p.Add(new Chunk(image, offset * i, 0)); 
} 
cell.AddElement(p); 
table.AddCell(cell); 
table.AddCell(new PdfPCell(new Phrase("cell 2"))); 
document.Add(table); 

Chunk documentation를 참조하십시오.

+0

많은 감사. 청크에 넣으려고 시도했지만 예외가 발생했습니다. 이미지를 청크에 추가하는 것으로 컴파일되었지만 "iTextSharp.text.ImgRaw '유형의 객체를 전송할 수 없습니다.'iTextSharp.text.pdf .draw.IDrawInterface ' "예외가 발생했습니다. 청크 생성자에 여분의 매개 변수를 추가하여이를 수정했습니다. 하나의 후속 질문 :이 방법으로 이미지의 SpacingAfter 속성에 영향을주지 않는 것 같습니다. I.SpacingAfter = 30으로 설정했지만 이미지는 여전히 서로 대립합니다. 나는 공간을 확보하기 위해 그들 사이에 공간을 포함하는 청크를 추가해야했습니다. – Adam

+0

맞음 -'Chunk'는'Paragraph'처럼 공백을 인식하지 않습니다. 그건 개행을 포함합니다. 이것을 확인하는 가장 쉬운 방법은 매우 긴 문자열 (페이지 여백 이후)을 추가하는 것입니다. 문자열이 동일한 줄을 계속해서 덮어 쓰므로 텍스트가 깨져 버리게됩니다. 웹 디자인/개발을한다면 인라인/블록 요소와 유사합니다. 마지막으로,'SpacingAfter'은 ** vertical ** spacing을위한 것입니다. 이미지 사이에 공간을 두는 한 가지 방법에 대한 편집 된 답변을 참조하십시오. 업데이트/추가 ** ** 이미지 만 사용할 수 있습니다. 텍스트를 추가하는 경우 이미지와 텍스트가 겹칩니다. – kuujinbo

관련 문제