using iText.IO.Image; using iText.Kernel.Geom; using iText.Kernel.Pdf; using iText.Kernel.Pdf.Annot; using iText.Kernel.Pdf.Canvas; using iText.Layout; using iText.Layout.Element; using System; using System.Diagnostics; using System.IO; using System.Reflection; public class Program { public static string IDTFTool = Directory.GetParent(Assembly.GetExecutingAssembly().Location) + @"\\IDTFTool\\IDTFConverter.exe"; static void Main(string[] args) { GenerateU3D(args[0], args[1]); } public static void GenerateU3D(string idtf, string pdf) { var temp = System.IO.Path.GetTempFileName(); System.Diagnostics.Process exep = new System.Diagnostics.Process(); System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo(); startInfo.FileName = IDTFTool; startInfo.Arguments = $"-input \"{idtf}\" -output \"{temp}\""; startInfo.CreateNoWindow = true; startInfo.UseShellExecute = false; exep.StartInfo = startInfo; exep.Start(); exep.WaitForExit(); GeneratePDF(temp, pdf); } public static void GeneratePDF(string u3d, string pdf) { 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); PdfStream stream3D = new PdfStream(pdfDoc, new FileStream(u3d, FileMode.Open)); stream3D.Put(PdfName.Type, new PdfName("3D")); stream3D.Put(PdfName.Subtype, new PdfName("U3D")); stream3D.SetCompressionLevel(CompressionConstants.DEFAULT_COMPRESSION); stream3D.Flush(); PdfDictionary dict3D = new PdfDictionary(); dict3D.Put(PdfName.Type, new PdfName("3DView")); dict3D.Put(new PdfName("XN"), new PdfString("Default")); dict3D.Put(new PdfName("IN"), new PdfString("Unnamed")); dict3D.Put(new PdfName("MS"), PdfName.M); dict3D.Put(new PdfName("C2W"), new PdfArray(new float[] { 1, 0, 0, 0, 0, -1, 0, 1, 0, 3, -235, 28 })); dict3D.Put(PdfName.CO, new PdfNumber(235)); Pdf3DAnnotation annot = new Pdf3DAnnotation(rect, stream3D); annot.SetContents(new PdfString("3D Model")); annot.SetDefaultInitialView(dict3D); var page = pdfDoc.AddNewPage(size).SetRotation(90); page.AddAnnotation(annot); PdfCanvas canvas = new PdfCanvas(page); ImageData imageData = ImageDataFactory.Create(System.IO.Directory.GetParent(Assembly.GetExecutingAssembly().Location) + "\\logo.png"); Image image = new Image(imageData); image.SetHeight(25); image.SetMarginLeft(-20); image.SetMarginTop(-20); image.SetRotationAngle(Math.PI/2); doc.Add(image); // 关闭文档 pdfDoc.Close(); doc.Close(); } }