java - 在java中将.obj文件转换为.pdf3D
问题描述
我希望有人可以帮助我解决这个问题。我想使用 Java 将 *.obj 文件转换为 pdf3D。我曾尝试使用itextpdf库(最后你可以找到我使用的代码),但我只是设法将 u3D 文件转换为 pdf。我必须更改代码中的某些内容还是应该使用另一个库?
@SuppressWarnings("javadoc")
public class Main
{
public static String RESOURCE = "C:\\Users\\bb\\IdeaProjects/Zuccarello.U3D";
public static String RESULT="C:\\Users\\bb\\IdeaProjects/obj.pdf";
public static void main(String[] args) throws DocumentException, IOException {
new Main().createPdf ( RESULT);
}
public void createPdf(String filename) throws IOException, DocumentException {
// step 1
Document document = new Document();
// step 2
PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(filename));
// step 3
document.open();
// step 4
Rectangle rect = new Rectangle(100, 400, 500, 800);
rect.setBorder(Rectangle.BOX);
rect.setBorderWidth(0.5f);
rect.setBorderColor(new BaseColor(0xFF, 0x00, 0x00));
document.add(rect);
PdfStream stream3D = new PdfStream(new FileInputStream(RESOURCE), 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(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 = 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.getIndirectReference());
annot.put(new PdfName("3DV"), dictObject.getIndirectReference());
PdfAppearance ap = writer.getDirectContent().createAppearance(rect.getWidth(), rect.getHeight());
annot.setAppearance(PdfAnnotation.APPEARANCE_NORMAL, ap);
annot.setPage();
writer.addAnnotation(annot);
// step 5
document.close();
}
}
解决方案
3D PDF 仅支持 .prc 和 .u3d 文件。直接文件转换格式 adobe.com 所以您需要先转换其中的一种。
推荐阅读
- python-3.x - 如何使用 matplotlib 修复条形图中被覆盖的值?
- python - Python http.client.RemoteDisconnected
- vba - 将工作表名称分配给函数/子参数
- android - 试图将图像保存到画廊
- twitter-bootstrap - 选择输入焦点上的第一个输入组项
- java - 使用自定义接收器的 Spark Streaming 预写日志
- c++ - 需要 noexcept 规范但未实例化时的依赖名称查找示例
- javascript - 图像 src 标记中 angular2 中的动态绑定
- c# - 使用工厂按名称调用方法 - 最佳实践解决方案是什么
- javascript - 如何动态更改 X 轴和 Y 轴的起点?