2015年7月9日木曜日

注釈の外観辞書で、透明度を設定できない

ページの方のRESOURCES辞書に入ってしまうので、注釈のコンテンツからは参照できない模様。

注釈のRESOURCES辞書に入れないといけないが、、、そんな方法は用意されていないみたいで、自分で辞書を作って、コンテンツを作文して対応しました。

参考コード、例:
 var a = PdfAnnotation.CreateSquareCircle(wr1, pi.GetPDFRect(tx.Bounds), "", true);

 a.Put(PdfName.IC, pi.GetPdfArray(tx.Fore));//interior color
 a.Flags = PdfAnnotation.FLAGS_PRINT;
 {
  PdfDictionary objAP = new PdfDictionary();
  {
   PdfContentByte wr = new PdfContentByte(wr1);
   var bcFore = pi.GetBaseColor(tx.Fore);
   bcFore = new BaseColor(bcFore.R, bcFore.G, bcFore.B, (int)(255 * 0.3));

   var rc1 = pi.GetPDFRect(tx.Bounds);

   //PdfGState gs1 = new PdfGState();
   //gs1.FillOpacity = 0.3f;

   wr.SaveState();
   //wr.SetGState(gs1);
   wr.InternalBuffer.Append(" /GS1 gs ");
   wr.SetColorFill(bcFore);
   wr.SetLineWidth(0);
   wr.Rectangle(rc1.Left, rc1.Bottom, rc1.Width, rc1.Height);
   wr.Fill();
   wr.RestoreState();

   var bbox = pi.GetPDFRect(tx.Bounds);
   PdfStream objN = new PdfStream(wr.ToPdf(wr.PdfWriter));
   wr.Reset();
   objN.Put(PdfName.TYPE, PdfName.XOBJECT);
   objN.Put(PdfName.SUBTYPE, PdfName.FORM);
   objN.Put(PdfName.FORMTYPE, new PdfNumber(1));
   objN.Put(PdfName.BBOX, new PdfArray(new float[] { bbox.Left, bbox.Bottom, bbox.Right, bbox.Top }));
   {
    PdfDictionary objRes = new PdfDictionary();
    {
     PdfArray objProcSet = new PdfArray();
     {
      objProcSet.Add(PdfName.PDF);
     }
     objRes.Put(PdfName.PROCSET, objProcSet);
    }
    {
     PdfDictionary objExtGState = new PdfDictionary();
     {
      PdfDictionary objGS1 = new PdfDictionary();
      objGS1.Put(PdfName.ca, new PdfNumber(0.3f));

      objExtGState.Put(new PdfName("GS1"), objGS1);
     }
     objRes.Put(PdfName.EXTGSTATE, objExtGState);
    }
    objN.Put(PdfName.RESOURCES, objRes);
   }
   objAP.Put(PdfName.N, wr1.AddToBody(objN).IndirectReference);

  }
  a.Flags = PdfAnnotation.FLAGS_PRINT;
  a.Put(PdfName.AP, objAP);
  a.Put(PdfName.CA, new PdfNumber(0.3f));
 }
 wr1.AddAnnotation(a);

0 件のコメント:

コメントを投稿