From 3dcbe4a0ebfb52cf263c7c4dc981f88ea1f0db89 Mon Sep 17 00:00:00 2001 From: Zhuangkh Date: Fri, 12 May 2023 15:37:43 +0800 Subject: [PATCH] add default rendermode & light --- PDFGenerator/Program.cs | 46 ++++++++++++++++++++++++++--------------- 1 file changed, 29 insertions(+), 17 deletions(-) diff --git a/PDFGenerator/Program.cs b/PDFGenerator/Program.cs index 47d3718..8fbbde5 100644 --- a/PDFGenerator/Program.cs +++ b/PDFGenerator/Program.cs @@ -6,6 +6,7 @@ using iText.Kernel.Pdf.Canvas; using iText.Layout; using iText.Layout.Element; using Newtonsoft.Json; +using Org.BouncyCastle.Utilities.IO; using System; using System.Collections.Generic; using System.Diagnostics; @@ -36,19 +37,15 @@ public class Program public static void GeneratePDF(string idtf, string view, string pdf) { - var u3d = System.IO.Path.GetTempFileName(); + var u3d = System.IO.Path.GetRandomFileName(); GenerateU3D(idtf, u3d); var writer = new PdfWriter(pdf); PdfDocument pdfDoc = new PdfDocument(writer); var size = PageSize.A4; - Document doc = new Document(pdfDoc); - Rectangle rect = new Rectangle(50, 50, size.GetWidth() - 100, size.GetHeight() - 100); - var views = Generate3DView(view); - PdfStream stream3D = new PdfStream(pdfDoc, new FileStream(u3d, FileMode.Open)); stream3D.Put(PdfName.Type, new PdfName("3D")); stream3D.Put(PdfName.Subtype, new PdfName("U3D")); @@ -56,15 +53,14 @@ public class Program stream3D.SetCompressionLevel(CompressionConstants.DEFAULT_COMPRESSION); stream3D.Flush(); - - + Rectangle rect = new Rectangle(50, 50, size.GetWidth() - 100, size.GetHeight() - 100); Pdf3DAnnotation annot = new Pdf3DAnnotation(rect, stream3D); annot.SetContents(new PdfString("3D Model")); - annot.SetDefaultInitialView(views.First()); + annot.Put(PdfName._3DV, PdfName.L);//default view var page = pdfDoc.AddNewPage(size).SetRotation(90); page.AddAnnotation(annot); - // PdfCanvas canvas = new PdfCanvas(page); + //logo ImageData imageData = ImageDataFactory.Create(System.IO.Directory.GetParent(Assembly.GetExecutingAssembly().Location) + "\\logo.png"); Image image = new Image(imageData); image.SetHeight(25); @@ -91,24 +87,40 @@ public class Program PdfDictionary dict3D = new PdfDictionary(); dict3D.Put(PdfName.Type, new PdfName("3DView")); dict3D.Put(new PdfName("XN"), new PdfString(item.Name)); - - //dict3D.Put(new PdfName("IN"), new PdfString("Unnamed")); + dict3D.Put(new PdfName("IN"), new PdfString(item.Name)); + dict3D.Put(new PdfName("RM"), RenderMode()); + dict3D.Put(new PdfName("LS"), RenderLight()); dict3D.Put(new PdfName("MS"), PdfName.M); - //dict3D.Put(new PdfName("C2W"), - // new PdfArray(new double[] { item.Parents[0].Transform.c0r0, item.Parents[0].Transform.c0r1, item.Parents[0].Transform.c0r2, - // item.Parents[0].Transform.c1r0, item.Parents[0].Transform.c1r1, item.Parents[0].Transform.c1r2, - // item.Parents[0].Transform.c2r0, item.Parents[0].Transform.c2r1, item.Parents[0].Transform.c2r2, - // item.Parents[0].Transform.c3r0, item.Parents[0].Transform.c3r1, item.Parents[0].Transform.c3r2 })); + dict3D.Put(new PdfName("C2W"), + new PdfArray(new double[] { item.Parents[0].Transform.c0r0, item.Parents[0].Transform.c0r1, item.Parents[0].Transform.c0r2, + item.Parents[0].Transform.c1r0, item.Parents[0].Transform.c1r1, item.Parents[0].Transform.c1r2, + item.Parents[0].Transform.c2r0, item.Parents[0].Transform.c2r1, item.Parents[0].Transform.c2r2, + item.Parents[0].Transform.c3r0, item.Parents[0].Transform.c3r1, item.Parents[0].Transform.c3r2 })); dict3D.Put(new PdfName("C2W"), new PdfArray(new double[] { item.Parents[0].Transform.c0r0, item.Parents[0].Transform.c1r0, item.Parents[0].Transform.c2r0, item.Parents[0].Transform.c0r1, item.Parents[0].Transform.c1r1, item.Parents[0].Transform.c2r1, item.Parents[0].Transform.c0r2, item.Parents[0].Transform.c1r2, item.Parents[0].Transform.c2r2, item.Parents[0].Transform.c3r0, item.Parents[0].Transform.c3r1, item.Parents[0].Transform.c3r2 })); - //dict3D.Put(PdfName.CO, new PdfNumber(235)); + dict3D.Flush(); list.Add(dict3D); } } return list; } + + private static PdfDictionary RenderMode() + { + PdfDictionary dict3D = new PdfDictionary(); + dict3D.Put(PdfName.Type, new PdfName("3DRenderMode")); + dict3D.Put(PdfName.Subtype, new PdfName("SolidOutline")); + return dict3D; + } + private static PdfDictionary RenderLight() + { + PdfDictionary dict3D = new PdfDictionary(); + dict3D.Put(PdfName.Type, new PdfName("3DLightingScheme")); + dict3D.Put(PdfName.Subtype, new PdfName("Day")); + return dict3D; + } }