新建一个DwgImage对象,插入线段、图形以及图片,保存为PDF时都可以显示,保存成dwg时图片消失

public static void main(String[] args) {
// 创建一个新的CadImage实例,指定DWG版本
DwgImage dwgImage = new DwgImage();

    // 创建一条直线
    CadLine line = new CadLine();
    line.setFirstPoint(new Cad3DPoint(0, 0, 0));
    line.setSecondPoint(new Cad3DPoint(0, 100, 0));
    line.setLayerName("0");
    line.setColorId((short) 256);
    line.setLineWeight((short) 50);

    // 创建一个圆
    CadCircle circle = new CadCircle();
    circle.setCenterPoint(new Cad3DPoint(0, 0, 0));
    circle.setRadius(100);
    circle.setLayerName("0");
    circle.setColorId((short) 256);
    circle.setLineWeight((short) 50);

    CadText cadText = new CadText();
    cadText.setStyleType("Standard");
    cadText.setDefaultValue("Some custom text");
    cadText.setColorId((short) 256);
    cadText.setLayerName("0");
    cadText.getFirstAlignment().setX(47.9);
    cadText.getFirstAlignment().setY(5.56);
    cadText.setTextHeight(0.8);
    cadText.setScaleX(0);

    // 将实体添加到图形中
    dwgImage.getBlockEntities().get_Item("*Model_Space").addEntity(cadText);
    dwgImage.getBlockEntities().get_Item("*Model_Space").addEntity(line);
    dwgImage.getBlockEntities().get_Item("*Model_Space").addEntity(circle);

    String dataDir = "dwg/";
    CadRasterImageDef cadRasterImageDef = new CadRasterImageDef("C:\\Users\\50234\\Desktop\\" + "1.png", 640, 562);
    cadRasterImageDef.setObjectHandle("A3B4");
    cadRasterImageDef.setLoaded(true);
    cadRasterImageDef.setImageIsLoadedFlag((short) 1);
    cadRasterImageDef.a(true);
    Cad3DPoint insertionPoint = new Cad3DPoint(0, 0);
    Cad3DPoint uVector = new Cad3DPoint(1, 0);
    Cad3DPoint vVector = new Cad3DPoint(0, 1);
    CadRasterImage cadRasterImage = new CadRasterImage(cadRasterImageDef, insertionPoint, uVector, vVector);
    cadRasterImage.setImageDefReference("A3B4");
    cadRasterImage.setDisplayFlags((short)7);
    cadRasterImage.setClippingState((short)0);
    cadRasterImage.getClipBoundaryVertexList().add(new Cad2DPoint(20, 20));
    cadRasterImage.getClipBoundaryVertexList().add(new Cad2DPoint(620, 540));
    cadRasterImage.setLayerName("0");
    cadRasterImage.setStorageFlag(true);

    dwgImage.getBlockEntities().get_Item("*Model_Space").addEntity(cadRasterImage);
    CadBaseObject[] objs = dwgImage.getObjects();
    CadBaseObject[] arr = new CadBaseObject[objs.length + 1];
    int ind = 0;
    for (CadBaseObject obj : objs)
    {
        arr[ind] = obj;
        ind++;
    }
    arr[ind] = cadRasterImageDef;
    dwgImage.setObjects(arr);


    DwgOptions options = new DwgOptions();
    options.setOutputMode(CadOutputMode.Render);
    CadRasterizationOptions cadRasterizationOptions = new CadRasterizationOptions();
    options.setVectorRasterizationOptions(cadRasterizationOptions);
    cadRasterizationOptions.setDrawType(CadDrawTypeMode.UseDrawColor);
    cadRasterizationOptions.setLayouts(new String[] {"Model"});

// 保存为DWG文件
dwgImage.save(“output.dwg”, options);

// PdfOptions pdfOptions = new PdfOptions();
// CadRasterizationOptions cadRasterizationOptions = new CadRasterizationOptions();
// pdfOptions.setVectorRasterizationOptions(cadRasterizationOptions);
// cadRasterizationOptions.setDrawType(CadDrawTypeMode.UseObjectColor);
// cadRasterizationOptions.setPageHeight(1600);
// cadRasterizationOptions.setPageWidth(1600);
// cadRasterizationOptions.setLayouts(new String[] {“Model”});
//
// // 保存为DWG文件
// dwgImage.save(“output.pdf”, pdfOptions);
}

@ningsitao

在保存为DWG文件时,图像消失的原因可能是因为DWG格式对图像的处理与PDF不同。为了确保图像在DWG文件中可见,您可以尝试以下步骤:

  1. 确保图像定义(CadRasterImageDef)在保存之前被正确添加到DWG对象中。
  2. 检查图像的存储标志(setStorageFlag(true))是否设置为true,以确保图像被包含在DWG文件中。
  3. 在保存DWG文件时,确保图像的渲染设置正确。

以下是您代码的一个简化示例,确保图像被正确添加并保存:

CadRasterImageDef cadRasterImageDef = new CadRasterImageDef("C:\\Users\\50234\\Desktop\\1.png", 640, 562);
cadRasterImageDef.setLoaded(true);
cadRasterImageDef.setStorageFlag(true); // 确保图像存储标志为true

CadRasterImage cadRasterImage = new CadRasterImage(cadRasterImageDef, insertionPoint, uVector, vVector);
dwgImage.getBlockEntities().get_Item("*Model_Space").addEntity(cadRasterImage);

确保在保存DWG文件时,图像定义对象也被包含在DWG对象的对象数组中。

如果问题仍然存在,您可能需要考虑使用其他格式进行保存,因为某些格式可能更好地支持图像的嵌入和显示。

加上cadRasterImageDef.setStorageFlag(true),也还是不行

试了PNG、JPG、TIFF格式的图片,也还是不行呢

@ningsitao,
您好,
很遗憾,我可以确认这个问题。我们已创建 CADJAVA-12041 来解决这个问题。