3

非推奨バージョンのiTextSharp(4.1.6.0)を使用してMVC3アプリケーションからPDFを生成していますが、画像の色を薄くすることを目的として、他の形状や画像の上に半透明の形状を配置できる必要があります。その下、またはグレー表示にします。これは、図形の塗りつぶしの色を選択するときにアルファチャネルを設定するのと同じくらい簡単だと思っていたので、これを試しました。

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();

これにより、ページの左下近くに2つの長方形が描画され、小さな青い長方形に大きな赤い半透明の長方形が重ねられますが、赤い長方形は半透明ではありません。

だから私はグーグルをしてこのページを見つけました。これは実際にはiTextSharpではなくiTextに関するもので、PdfGstate次のように塗りつぶしの不透明度を設定するために使用することを提案しています。

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

しかし、私が試してみると、オブジェクトには!gstateのようなメソッドがありません。.setFillOpacity()誰かが私を正しい方向に向けることができれば、私は最も感謝するでしょう。

4

1 に答える 1

4

JavaライブラリをC#ライブラリに変換する際のルールの1つは、すべての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();
    }
于 2013-01-10T13:39:30.517 に答える