2013-01-10 5 views
2

iTextSharp (4.1.6.0)의 사용되지 않는 버전을 사용하여 내 MVC3 응용 프로그램에서 PDF를 생성하고 실제로 다른 객체 위에 반투명 도형을 배치 할 수 있어야합니다. 모양 및 이미지, 목표는 이미지 아래의 이미지 색상을 희미하게하거나 회색으로 표시합니다. 나는이 모양이 채우기의 색상을 선택하는 알파 채널을 설정하는 것처럼 간단 할 것이라고 생각, 그래서 나는이 시도했을 :iTextSharp에서 반투명 채우기 도형 그리기 4.1.6.0

Document doc = new Document(); 
PdfWriter writer = PdfWriter.GetInstance(doc, new FileStream(@"C:/Filepath/doc.pdf", FileMode.Create)) 
doc.Open(); 
PdfContentByte over = writer.DirectContent; 

// draw shape to be faded out 
over.Rectangle(10, 10, 50, 50); 
over.SetColorFill(Color.BLUE); 
over.Fill(); 

// draw shape over the top to do the fading (red so i can easily see where it is) 
over.Rectangle(0, 0, 60, 60); 
over.SetColorFill(new Color(255,0,0,150)); // rgba 
over.Fill(); 

doc.Close(); 

내가이 페이지의 왼쪽 하단 근처에 두 개의 사각형을 그릴 기대를 작은 파란색 하나는 더 큰 빨간색, 반투명 한 것으로 겹쳐 지지만 빨간색은 반투명이 아닙니다.

그래서 나는 약간의 인터넷 검색을했고, 그들이이 같은 채우기 불투명도 설정 PdfGstate을 사용하는 것이 좋습니다 iText를하지 iTextSharp에 대해 실제로이 page 발견 :

PdfGState gstate = new PdfGState(); 
gstate.setFillOpacity(0.3); 

을하지만을 나는 gstate 개체가 있음을하려고 할 때 .setFillOpacity()과 같은 방법이 없습니다! 누구든지 올바른 방향으로 나를 가리킬 수 있다면 가장 감사 할 것입니다.

답변

3

Java 라이브러리를 C# 라이브러리로 변환하는 규칙 중 하나는 모든 getXYZ 및 setXYZ 메서드를 간단한 C# 속성으로 변환해야한다는 것입니다. 난 몰랐어 그래서 gstate.setFillOpacity(0.3);

using (Document doc = new Document()) 
    { 
     PdfWriter writer = PdfWriter.GetInstance(doc, new FileStream(@"mod.pdf", FileMode.Create)); 
     doc.Open(); 
     PdfContentByte over = writer.DirectContent; 

     over.SaveState(); 

     over.Rectangle(10, 10, 50, 50); 
     over.SetColorFill(BaseColor.BLUE); 
     over.Fill(); 


     PdfGState gs1 = new PdfGState(); 
     gs1.FillOpacity = 0.5f; 
     over.SetGState(gs1); 

     over.Rectangle(0, 0, 60, 60); 
     over.SetColorFill(new BaseColor(255, 0, 0, 150)); 
     over.Fill(); 

     over.RestoreState(); 

     doc.Close(); 
    } 
+0

아 내가 볼 gstate.FillOpacity = 0.3f; 올 것입니다. 오류가 발생하지는 않지만 투명성을 초래하지는 않습니다. 나는 adobe reader 11과 windows 8의 pdf reader에서 같은 결과를 보여주고 있습니다. – Ben

+0

나는 PdfGState를 적용하기위한 답을 수정했다. 그것은 나를 위해 작동하고 빨간색 사각형은 이제 투명합니다. – VahidN

+0

우수! 그게 완벽하게 감사합니다. 그러나 알파 값 설정은 아무런 차이가 없으며 투명도 수준은 FillOpacity에 전적으로 달려 있습니다. – Ben