2012-05-10 6 views
1

3D注釈を既存の文書PDFに挿入しようとしています。 「PdfAppearance ap ..」の行に「PdfStamper.getUnderContent()またはPdfStamper.getOverContent()」というエラーが表示されます。それを動作させるためにコードを変更するには?複数ページ文書の現在のページのPdfWriterを取得する方法は?

private void button4_Click(object sender, EventArgs e) 
     { 
      Document document = new Document(); 
      PdfReader reader = new PdfReader("model.PDF"); 
      PdfStamper stamper = new PdfStamper(reader, /* new FileOutputStream("HelloWorldStamped.pdf"));*/ 
      new FileStream("PartCreated1.pdf", FileMode.Create)); 
      PdfContentByte newPage; 
      int total = reader.NumberOfPages; 
      for (int i = 1; i <= total; i++) 
      { 
       newPage = stamper.GetOverContent(i); 
       if (i == 1) 
       { 
        PdfWriter writer = newPage.PdfWriter; 
        Stream sd = File.Open(RESOURCE, FileMode.Open); 
        iTextSharp.text.Rectangle rect = new iTextSharp.text.Rectangle(100, 100, 500, 800); 
        PdfStream stream3d = new PdfStream(sd, writer); 
        stream3d.Put(PdfName.TYPE, new PdfName("3D")); 
        stream3d.Put(PdfName.SUBTYPE, new PdfName("U3D")); 
        stream3d.FlateCompress(); 
        PdfIndirectObject streamObject = writer.AddToBody(stream3d); 
        stream3d.WriteLength(); 
        PdfDictionary dict3D = new PdfDictionary(); 
        dict3D.Put(new PdfName(PDF_NAME_XN), new PdfString("DefaultView")); 
        dict3D.Put(new PdfName(PDF_NAME_IN), new PdfString("Unnamed")); 
        dict3D.Put(new PdfName(PDF_NAME_MS), new PdfName(PDF_NAME_U3D)); 
        dict3D.Put(new PdfName(PDF_NAME_U3DPATH), new PdfString("DefaultView")); 
        PdfIndirectObject dictObject = writer.AddToBody(dict3D); 
        PdfAnnotation annot = new PdfAnnotation(writer, rect); 
        annot.Put(PdfName.CONTENTS, new PdfString("3D Model")); 
        annot.Put(PdfName.SUBTYPE, new PdfName("3D")); 
        annot.Put(PdfName.TYPE, PdfName.ANNOT); 
        annot.Put(new PdfName("3DD"), streamObject.IndirectReference); 
        annot.Put(new PdfName("3DV"), dictObject.IndirectReference); 
        PdfAppearance ap = stamper.GetOverContent(i).PdfWriter.DirectContent.CreateAppearance(rect.Width, rect.Height);//in this line I got an error "Use PdfStamper.getUnderContent() or PdfStamper.getOverContent()" 
        annot.SetAppearance(PdfAnnotation.APPEARANCE_NORMAL, ap); 
        annot.SetPage(); 
        writer.AddAnnotation(annot); 
        sd.Dispose(); 
        sd.Close(); 

       } 
      } 
      stamper.Close(); 
     } 
+0

あなたが得るエラーは何ですか? –

+0

「PdfAppearance ap ..」エラーが表示されます。「PdfStamper.getUnderContent()またはPdfStamper.getOverContent()」を使用してください。 – streamdown

+0

エラーの詳細を含めて質問を編集してください。 –

答えて

1

私はそれを自分自身を得た:

PdfAppearance ap = newPage.CreateAppearance(rect.Width, rect.Height); 
annot.SetAppearance(PdfAnnotation.APPEARANCE_NORMAL, ap); 
annot.SetPage(); 
stamper.AddAnnotation(annot, i); 
sd.Dispose(); 
sd.Close(); 
関連する問題