You are viewing a plain text version of this content. The canonical link for it is here.
Posted to fop-users@xmlgraphics.apache.org by "jfrm.maurel@gmail.com" <jf...@gmail.com> on 2020/09/23 14:54:11 UTC

u3d pdf file

Hi,

I am trying to include a pdf file containing a 3d drawing inside a pdf 
file using fop 2.3 and fop-images-pdf 2.3. However the graphic included 
is outside of the bound of the containing block (see result.pdf page 4).
Could you please tell what is wrong here ?

For information everything is fine if I incorporate a 'normal' pdf 
without 3d model.

The process I used is the following:

- including the pdf with
   <fo:block border="1pt solid black" text-align="center">
    <fo:external-graphic src="u3d.pdf" border="1pt solid red" 
block-progression-dimension="100mm" content-width="scale-to-fit" 
scaling="uniform" />
   </fo:block>
- for information the u3d.pdf file containing a u3d graphic is build 
from a u3d file using the following java code with itext 5.5
     public static void writePdf(String u3dFileUri, OutputStream out) {
         Dimension dimension = new Dimension(100,100);
         Rectangle pageSize = new Rectangle(dimension.width, 
dimension.height);
         Document doc = new Document();
         try {
             PdfWriter wr = PdfWriter.getInstance(doc, out);
             doc.open();
             String script = getScript();
             PdfStream oni = new 
PdfStream(PdfEncodings.convertToBytes(script, null));
             oni.flateCompress();
             PdfIndirectReference initScriptRef = 
wr.addToBody(oni).getIndirectReference();
             ArrayList<PdfIndirectReference> viewList = new 
ArrayList<PdfIndirectReference>(1);
             PdfDictionary viewDict = new PdfDictionary(new 
PdfName(PDF_NAME_3DVIEW));
             viewDict.put(new PdfName(PDF_NAME_MS), new PdfString("M"));
             float[] T1 = new float[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
0 };
             viewDict.put(new PdfName("C2W"), new PdfArray(T1));
             String cameraName = "Test Camera";
             viewDict.put(new PdfName(PDF_NAME_XN), new 
PdfString(cameraName));
             PdfIndirectReference ref = 
wr.addToBody(viewDict).getIndirectReference();
             viewList.add(ref);
             File u3d = FileProc.newFile(u3dFileUri);
             PdfStream stream = new PdfStream(new FileInputStream(u3d), wr);
             stream.put(new PdfName("OnInstantiate"), initScriptRef);
             stream.put(PdfName.TYPE, new PdfName(PDF_NAME_3D));
             stream.put(PdfName.SUBTYPE, new PdfName(PDF_NAME_U3D));
             stream.flateCompress();
             PdfIndirectReference u3dStreamRef = 
wr.addToBody(stream).getIndirectReference();
             stream.writeLength();
             PdfDictionary activationDict = new PdfDictionary();
             activationDict.put(PdfName.A, new PdfName("PO"));
             activationDict.put(new PdfName("DIS"), PdfName.I);
             float scale = 0.5f;
             float width = scale * (pageSize.getRight() - 
pageSize.getLeft());
             float height = scale * (pageSize.getTop() - 
pageSize.getBottom());
             PdfAppearance ap = PdfAppearance.createAppearance(wr, 
width, height);
             ap.setBoundingBox(pageSize);
             PdfAnnotation annot = new PdfAnnotation(wr, pageSize);
             annot.put(PdfName.CONTENTS, new PdfString("3D Model"));
             annot.put(PdfName.SUBTYPE, new PdfName(PDF_NAME_3D));
             annot.put(PdfName.TYPE, PdfName.ANNOT);
             annot.put(new PdfName(PDF_NAME_3DD), u3dStreamRef);
             PdfBoolean value3DI = showInventory ? PDFTRUE : PDFFALSE;
             annot.put(new PdfName("3DI"), value3DI);
             annot.setAppearance(PdfAnnotation.APPEARANCE_NORMAL, ap);
             annot.put(new PdfName("3DA"), activationDict);
             annot.setPage(1);
             wr.addAnnotation(annot);
             doc.close();
         } catch (IOException e) {
             e.printStackTrace();
         } catch (DocumentException de) {
             de.printStackTrace();
         }
     }



pdf files :
u3d.pdf <https://we.tl/t-5fBBo0McMz>(7,0 
Ko)WeTransferhttps://we.tl/t-5fBBo0McMz <https://we.tl/t-5fBBo0McMz>
result.pdf <https://we.tl/t-kp7wlyiptl>(4,1 
Mo)WeTransferhttps://we.tl/t-kp7wlyiptl <https://we.tl/t-kp7wlyiptl>
Mozilla Thunderbird <https://www.thunderbird.net> permet de partager 
facilement des fichiers volumineux.

Regards

-- 
Jean-François MAUREL
PIMECA
http://www.pimeca.com