U3d和c4d:如何使用itext7和C#将u3d添加到现有的 pdf中

我正在使用 iText7 (C#) 创建 pdf。我需要在 exising pdf 中添加一个 u3d 图片。我可以找到示例 (http://developers.itextpdf.com/examples/itext-action-second-edition/chapter-16#619-pdf3d.java),但它是 java 一个。任何人都可以帮助给我一个关于.net C# 的例子吗?

3

链接的示例适用于 iText5,而不是 iText7。在 iText7 中,此示例如下所示

  public static final String DEST = "./target/test/resources/book/part4/chapter16/Listing_16_16_Pdf3D.pdf";
    public static String RESOURCE = "./src/test/resources/img/teapot.u3d";
    public static void main(String args[]) throws Exception {
        new Listing_16_16_Pdf3D().manipulatePdf(DEST);
    }
    public void manipulatePdf(String dest) throws Exception {
        PdfDoent pdfDoc = new PdfDoent(new PdfWriter(dest));
        Doent doc = new Doent(pdfDoc);
        Rectangle rect = new Rectangle(100, 400, 400, 400);
        PdfStream stream3D = new PdfStream(pdfDoc, new FileInputStream(RESOURCE));
        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);
        pdfDoc.addNewPage().addAnnotation(annot);
        doc.close();
    }

或者,如果你想在 C #(没有在本地运行它,但 Visual Studio 不抱怨语法)

    public void manipulatePdf(String dest) {
        PdfDoent pdfDoc = new PdfDoent(new PdfWriter(dest));
        Doent doc = new Doent(pdfDoc);
        Rectangle rect = new Rectangle(100, 400, 400, 400);
        PdfStream stream3D = new PdfStream(pdfDoc, new FileInputStream(RESOURCE));
        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);
        pdfDoc.AddNewPage().AddAnnotation(annot);
        doc.Close();
    }
0

.net 的 iText 代码库被设计为 Java 的(几乎)精确镜像。

除了代码约定(例如以大写开头的方法名称),您应该能够在.net 中使用 java 代码。

这也解释了为什么我们通常不发布.net 的代码。我建议你简单地复制 / 粘贴 java 代码,更改方法名称以考虑代码约定,并尝试编译它。

如果有的话,它会给你一个代码样本,你可以在这里发布,让你发布更明智。

0

您也可以尝试在 C # 下面的 code,这是使用 spirepdf

/ / 步骤 1:初始化 PdfDocuemnt 的新对象,并在 PDF 文档中添加空白页。

        PdfDoent doc = new PdfDoent();
        PdfPageBase page = doc.Pages.Add();
        //Step 2: Draw a rectangle on the page to define the canvas area for the 3D file.
        Rectangle rt = new Rectangle(0, 80, 200, 200);
        //Step 3: Initialize a new object of Pdf3DAnnotation, load the.u3d file as 3D annotation.
        Pdf3DAnnotation annotation = new Pdf3DAnnotation(rt, "E:\\Testingfolder\\u3dpdf\\BRO_JR_6910K Femur - Bone Model.stl");
        annotation.Activation = new Pdf3DActivation();
        annotation.Activation.ActivationMode = Pdf3DActivationMode.PageOpen;
        //Step 4: Define a 3D view mode.
        Pdf3DView View = new Pdf3DView();
        View.Background = new Pdf3DBackground(new PdfRGBColor());
        View.ViewNodeName = "test";
        View.RenderMode = new Pdf3DRendermode(Pdf3DRenderStyle.Solid);
        View.InternalName = "test";
        View.LightingScheme = new Pdf3DLighting();
        View.LightingScheme.Style = Pdf3DLightingStyle.Day;
        //Step 5: Set the 3D view mode for the annotation.
        annotation.Views.Add(View);
        //Step 6: Add the annotation to PDF.
        page.AnnotationsWidget.Add(annotation);
        //Step 7: Save the file.
        doc.SaveToFile("E:\\Testingfolder\\u3dpdf\\Create3DPdf.pdf", FileFormat.PDF);
0

这是使用 c # 将 u3d 文件打印为 pdf 的工作代码

FileStream stream = new FileStream("E:\\Testingfolder\\u3dpdf\\DoctoPdf.pdf", FileMode.Open, FileAccess.Read);
        String RESOURCE;
        RESOURCE = "E:\\Testingfolder\\u3dpdf\\Testu3d.u3d";
        iTextSharp.text.Rectangle rect;
        using (iTextSharp.text.Doent doent = new iTextSharp.text.Doent())
        {
            PdfWriter pdfwriter = PdfWriter.GetInstance(doent, stream);
            // step 3
            doent.Open();
            // step 4
            rect = new iTextSharp.text.Rectangle(100, 400, 500, 800);
            rect.Border = iTextSharp.text.Rectangle.BOX;
            rect.BorderWidth = 0.5f;
            rect.BorderColor = new BaseColor(0xFF, 0x00, 0x00);
            doent.Add(rect);
            doent.SetMargins(129,259,647,1416);
            PdfIndirectObject streamObject = null;
            using (FileStream fs =
                new FileStream(RESOURCE, FileMode.Open, FileAccess.Read))
            {
                PdfStream stream3D = new PdfStream(fs, pdfwriter);
                stream3D.Put(PdfName.TYPE, new PdfName("3D"));
                stream3D.Put(PdfName.SUBTYPE, new PdfName("U3D"));
                stream3D.FlateCompress();
                streamObject = pdfwriter.AddToBody(stream3D);
                stream3D.WriteLength();
            }
            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));
            PdfIndirectObject dictObject = pdfwriter.AddToBody(dict3D);
            PdfAnnotation annot = new PdfAnnotation(pdfwriter, 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 = pdfwriter.DirectContent.CreateAppearance(
                rect.Width, rect.Height
            );
            annot.SetAppearance(PdfAnnotation.APPEARANCE_NORMAL, ap);
            annot.SetPage();
            pdfwriter.AddAnnotation(annot);
        }

本站系公益性非盈利分享网址,本文来自用户投稿,不代表边看边学立场,如若转载,请注明出处

(358)
Cesium面试题:MATLAB面试题
上一篇
改代码查考研成绩:符号代替文字 怎么改(text to symbols)
下一篇

相关推荐

  • css禅意花园pdf用简单的代码让网页变得更美

    CSS Zen Garden(CSS禅意花园)是一个由Dave Shea于2003年创建的网站,旨在展示CSS的功能。该网站提供了一个HTML文档,该文档包含一系列用CSS样式表格式化的元素,但没有任何表示外观的CSS代码。任何人都可以使用此HTML文档,并通过改变CSS样式表来改变文档的外观。…

    2023-07-21 06:36:31
    0 77 35
  • qt quick核心编程pdf深入理解Qt Quick的基础和应用

    Qt Quick Core Programming是一本关于Qt Quick的技术书籍,主要介绍了Qt Quick的基础知识、技术和应用。书中介绍了Qt Quick的基本原理、基本概念、核心功能和实际应用,并结合代码实例,帮助读者更好地理解Qt Quick的核心概念和应用。…

    2023-03-11 11:23:40
    0 32 56
  • javascript权威指南 pdf从入门到精通

    示例示例权威指南 pdf是一本关于编程的书,由David 编写,旨在帮助读者深入理解的各个方面。它介绍了的基本语法,并讨论了如何使用它来创建动态Web页面。此外,它还提供了有关DOM,Ajax,JSON, HTML5,CSS3和其他最新Web技术的信息。以下是一个简单的代码示例:…

    2023-05-21 09:33:58
    0 74 65
  • Pdf转换成cdr矢量图:将 pdf转换为矢量图像(convert pdf to vector)

    关于Pdf转换成cdr矢量图的问题,在convert pdf to vector中经常遇到,我试图在我的网页中使用 pdf 内容 (数学)。我基本上想将 pdf 转换为一些矢量图像。将 pdf 转换为 swf 做得很好,但由于每个平台都不支持 flash,我试图找到另一个解决方案。…

    2024-11-22 15:01:01
    0 88 37
  • 比较好的编程培训机构:可靠的方式(以编程方式)比较 PDF(compare pdfs for differences)

    关于比较好的编程培训机构的问题,在compare pdfs for differences中经常遇到,Possible Duplicate:Tool to compare large numbers of PDF files?…

    2024-06-06 06:53:14
    0 71 33
  • Docx转pdf:Docx到 PDF转换

    关于Docx转pdf的问题,在nitin subramanian中经常遇到,我需要将 docx 文件转换为 pdf,转换过程还应该支持 docx 文件中存在的汉字。当 docx 文件中没有任何表或图像时,下面的代码工作正常。当它包含表时,它会出错,当它有一些图像时,图像不会显示在结果 pdf 中。任何一个可以帮助我的代码来支持表和图像吗?代码如下…

    2024-11-24 10:28:01
    0 10 32
  • Clown造句:使用PDF小丑检测PDF表中的标题和边框

    关于Clown造句的问题,在clown text中经常遇到,我正在使用 PDF 小丑的 TextInfoExtractionSample 将 PDF 表格提取到 Excel 中,除了合并的单元格之外,我能够做到这一点。在下面的代码中,对于对象,“内容”我看到扫描的内容为文本,XObject,ContainerObject,但没有边框。任何人都知道什么对象表示 PDF 表中的边框或如何检测文本是否为表的标题?…

    2024-08-10 08:06:02
    0 23 11
  • Dcm文件:如何将.dcm文件转换为pdf文件

    关于Dcm文件的问题,在convert dcm to pdf中经常遇到,要转换 pdf 文件,我使用了 pdf2dcm.java 类。但是,现在我需要将 dicom 文件转换为 pdf,以便读取文档的内容。如何做到这一点?是否有任何 java 类能够做到这一点?…

    2024-01-08 08:23:08
    0 79 29

发表评论

登录 后才能评论

评论列表(62条)