2010-04-09 5 views
0

iTextSharp를 사용하여 PDF에서 다양한 요소 ("셀"이라고 읽음)를 스타일 화해야합니다. 등 라벨, 헤더, 서브 헤더, 수는 지금, 나는 각 세포 유형에 대한 세 가지 방법을 사용하고 있습니다 : "기본"이 세 가지 방법의 각 세트에 대한 세포 유형으로 치환대리자를 사용하여 스타일 지정 방법을 호출하려면 어떻게해야합니까?

public static PdfPCell GetDefaultCell(string strText) 
    { 
     PdfPCell cell = new PdfPCell(new Phrase(strText, GetDefaultFont())); 
     cell.Border = 0; 
     return cell; 
    } 

public static PdfPCell GetDefaultCell(string strText, int iColspan) 
    { 
     PdfPCell cell = new PdfPCell(new Phrase(strText, GetDefaultFont())); 
     cell.Border = 0; 
     cell.Colspan = iColspan; 
     return cell; 
    } 

public static PdfPCell GetDefaultCell(string strText, int iColspan, int iAlign) 
    { 
     PdfPCell cell = new PdfPCell(new Phrase(strText, GetDefaultFont())); 
     cell.Border = 0; 
     cell.Colspan = iColspan; 
     cell.HorizontalAlignment = iAlign; 
     return cell; 
    } 

. 나는 이것이 비늘로 생각하지 않는다. 특히 지금 내가 가진 20 가지 또는 30 가지 이상의 유형으로 끝나면. colspan 및 horizontalalignment 속성 이상을 수정하려는 경우 어떻게해야합니까? 여기서 대리인을 사용할 수 있습니까? 내 메서드 호출의 유일한 차이점은 메서드 내에서 이름과 GetXFont() 호출입니다.

public static PdfPCell GetCell(string strText, Func<Font> fontCreator) 
{ 
    PdfPCell cell = new PdfPCell(new Phrase(strText, fontCreator())); 
    cell.Border = 0; 
    return cell; 
} 

var cell = GetCell("...",() => GetDefaultFont()); 

그런데 왜 당신은 단순히 방법에 직접 폰트를 통과하지 :

답변

1

당신은 글꼴을 반환하는 방법에 대리자를 전달할 수 있습니다?

public static PdfPCell GetCell(string strText, Font font) 
{ 
    PdfPCell cell = new PdfPCell(new Phrase(strText, font)); 
    cell.Border = 0; 
    return cell; 
} 

var cell = GetCell("...", GetDefaultFont()); 
+0

내 가장 큰 문제는 그것이 완료되어야 할 횟수라고 생각합니다. PDF는 거대하고 앞으로도 계속 커질 것입니다. 앞으로도 변화를 허용하면서이 셀의 스타일을 가능한 한 게으르도록 노력하고 있습니다. 이 두 가지 모두 내 질문에 답하지만 내 게으름을 만족시킬 방법이 있습니까? –

+0

코드를 어떻게 보이게 할 수 있는지 예를 들려 줄 수 있습니까? IMO 내 두 번째 해결책은 꽤 예쁘다. – dtb

+0

가 동의했습니다. 나는 메신저 델리게이트와 함께가는 것 같아서 폰트를 잠재적으로 수천 가지가 아닌 메서드 호출에서 한 번만 변경하면된다. –

0

상황에 따라 대리인을 사용할 수는 있지만 실제로 필요한지 여부는 문제입니다. 함수 GetDefaultFont이 셀에 사용할 글꼴을 반환하면이 글꼴을 다른 인수로 전달하기 만하면됩니다 (예 : GetXXXCell 메서드의 호출자에게 호출하는 책임). 델리게이트를 전달하는 것은 여기서 불필요한 추상화처럼 보입니다.

관련 문제