2013-01-10 223 views
2

我使用iTextSharp(4.1.6.0)的不推薦版本從我的MVC3應用程序生成PDF,並且確實需要能夠在其他頂部放置半透明形狀形狀和圖像,目標是淡化圖像下方的顏色,或將其變灰。我本來以爲這將是作爲設置選擇顏色時形狀填充Alpha通道那麼簡單,所以我想這:在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(); 

我希望它可以繪製頁面左下角附近的兩個矩形,一個小的藍色覆蓋着一個更大的紅色,半透明的,但紅色的不是半透明的!

所以我做了一些谷歌上搜索,發現這個page,這實際上是關於iText的不是iTextSharp的,他們建議使用PdfGstate設置填充不透明度是這樣的:

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

但是當我嘗試了gstate對象沒有類似.setFillOpacity()的任何方法!如果任何人都能指出我正確的方向,我將非常感激。

回答

3

將Java庫轉換爲C#庫的規則之一是所有getXYZ和setXYZ方法都應轉換爲簡單的C#屬性。 所以gstate.setFillOpacity(0.3);將來到gstate.FillOpacity = 0.3f;

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

哦,我看,我不知道。雖然它不會引發任何錯誤,但它也不會導致任何透明度。我在Adobe Reader 11和Windows 8的pdf閱讀器中打開它,兩者的結果都一樣。 – Ben

+0

我修改了應用PdfGState的答案。它適用於我,現在紅色的矩形是透明的。 – VahidN

+0

優秀!完美的作品非常感謝你。值得注意的是,設置alpha在這裏沒有什麼區別,透明度的高低完全取決於FillOpacity。 – Ben