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();
}
あなたが得るエラーは何ですか? –
「PdfAppearance ap ..」エラーが表示されます。「PdfStamper.getUnderContent()またはPdfStamper.getOverContent()」を使用してください。 – streamdown
エラーの詳細を含めて質問を編集してください。 –