无法将 DWG 文件转换为 PDF

大家好,

我在使用 Aspose.CAD for Java 尝试将 DWG 文件转换为 PDF 文件时遇到了问题。在我尝试转换以下附带的 DWG 文件时,我收到了一个错误消息。

我在这里提供了我的转换代码:
import java.io.File;
import java.io.InputStream;

import com.aspose.cad.imageoptions.CadRasterizationOptions;
import com.aspose.cad.imageoptions.PdfOptions;

import ext.plm.util.CtCommonUtil;
import wt.content.ApplicationData;
import wt.content.ContentHelper;
import wt.content.ContentHolder;
import wt.content.ContentRoleType;
import wt.content.ContentServerHelper;
import wt.content.FormatContentHolder;
import wt.epm.EPMDocument;
import wt.fc.PersistenceHelper;
import wt.pom.Transaction;
import wt.util.WTException;

public class CtCadLogic {

public static void convertDWGToPDF(ContentHolder contentHolder) throws Exception {
    com.aspose.cad.Image image = null;
    File saveFile = null;
    try {
        String cadFolderPath = CtCommonUtil.getWTHomePath() + File.separator + "codebase" + File.separator + "ext"
                + File.separator + "plm" + File.separator + "cad";
        String savePath = cadFolderPath + File.separator + "temp" + File.separator;

        String licensePath = cadFolderPath + File.separator + "config" + File.separator + "DownloadLicense.aspx";
        File licenseFile = new File(licensePath);
        com.aspose.cad.License lic = new com.aspose.cad.License();
        lic.setLicense(licenseFile);
        ApplicationData data = getPrimary(contentHolder);
        String fileName = "" ;
        if(contentHolder instanceof EPMDocument){
        	fileName = ((EPMDocument)contentHolder).getCADName();
        }else{
        	if (data != null) {
        		fileName = data.getFileName();
        	}
        }
        
        if (data != null) {
            InputStream is = ContentServerHelper.service.findContentStream(data);
            image = com.aspose.cad.Image.load(is);
            CadRasterizationOptions options = new CadRasterizationOptions();
            options.setBackgroundColor(com.aspose.cad.Color.getWhite());
            options.setPageWidth(image.getWidth());
            options.setPageHeight(image.getHeight());
            PdfOptions pdfOptions = new PdfOptions();
            // Set the VectorRasterizationOptions property
            pdfOptions.setVectorRasterizationOptions(options);
            // Export the DWG to PDF
            savePath = savePath + fileName.substring(0, fileName.lastIndexOf(".")) + ".pdf";
            image.save(savePath, pdfOptions);
            saveFile = new File(savePath);
            System.out.println(saveFile.getAbsolutePath());
            uploadAttachment(saveFile, saveFile.getName(), contentHolder);
        }
    } catch (Exception e) {
        e.printStackTrace();

// throw new WTException(e.getMessage());
} finally {
if (image != null) {
image.close();
}
if (saveFile != null && saveFile.exists()) {
saveFile.delete();
}
}
}

public static ApplicationData getPrimary(ContentHolder contentHolder) throws Exception {
    ApplicationData data = null;
    try {
        contentHolder = ContentHelper.service.getContents(contentHolder);
        data = (ApplicationData) ContentHelper.getPrimary((FormatContentHolder) contentHolder);
    } catch (Exception e) {
        e.printStackTrace();
        throw new WTException(e.getMessage());
    }
    return data;
}

public static void uploadAttachment(File file, String fileName, ContentHolder contentHolder) throws Exception {
    Transaction tran = null;
    try {
        tran = new Transaction();
        tran.start();
        contentHolder = ContentHelper.service.getContents(contentHolder);
        ApplicationData attachmentData = ApplicationData.newApplicationData(contentHolder);
        attachmentData.setRole(ContentRoleType.SECONDARY);
        attachmentData = ContentServerHelper.service.updateContent(contentHolder, attachmentData, file.toString());
        attachmentData.setFileName(fileName);
        PersistenceHelper.manager.save(attachmentData);
        tran.commit();
        tran = null;
    } catch (Exception e) {
        tran.rollback();
        e.printStackTrace();
        throw new Exception(e.getMessage());
    }
}

}

此外,我也附带了我尝试转换的 DWG 文件。你可以在下方找到它。

我已经尝试了一些可能的解决方案,但是没有成功。我也在 Aspose 的文档和论坛中寻找过相关的信息,但是没有找到有用的信息。

请问有人能帮我解决这个问题吗?我对此表示感谢。

附件:

@Mer_Lee,

你好。

我们已经测试了您的转换部分,这段代码片段对我们有效(使用 Aspose.CAD for Java 23.1):

String in = filename;
final Image cadImage = Image.load(in);

CadRasterizationOptions rasterizationOptions = new CadRasterizationOptions();
rasterizationOptions.setPageWidth(cadImage.getWidth());
rasterizationOptions.setPageHeight(cadImage.getHeight());

final PdfOptions pdfOptions = new PdfOptions();
pdfOptions.setVectorRasterizationOptions(rasterizationOptions);
cadImage.save(out, pdfOptions);

结果略高于 8 MB。

你得到什么错误信息?

@oleksii.gorokhovatskyi
你好。
不好意思,上面是发错文件了,图文件是这个:test.zip (218.0 KB)
转成PDF后文字不清晰,这是PDF文件:test.dwg.pdf (698.0 KB)

@Mer_Lee,
不幸的是,这张图片的尺寸很小。 所以在选项中使用它的大小并不方便。 你可以尝试这样的事情

rasterizationOptions.setPageWidth(1500);
rasterization options.setPageHeight(1500);

并提出您自己的条件是使用初始图像的尺寸还是仅使用一些预定义的尺寸。

@oleksii.gorokhovatskyi
刚刚试了这段代码,是可以的,我想知道,这种一般设置最小宽高是多少呢?

@Mer_Lee,
没有答案,因为这取决于很多因素,您使用的图纸的种类,您是否对 PDF 的质量和大小满意等。有时带有图像的文件中的高度和宽度不正确。 有人只为所有情况设置固定值,如 2000x2000,有人使用更复杂的解决方案,如分析初始大小,如果它们根据某种比例“小”。

@oleksii.gorokhovatskyi
你好。
另外发现一个图纸加载失败的错误,错误信息如下:
com.aspose.cad.cadexceptions.ImageLoadException: Image loading failed:
at com.aspose.cad.Image.a(Unknown Source)
at com.aspose.cad.Image.load(Unknown Source)
图纸文件:test5.zip (1.8 MB)

@Mer_Lee
We have opened the following new ticket(s) in our internal issue tracking system and will deliver their fixes according to the terms mentioned in Free Support Policies.

Issue ID(s): CADJAVA-11076

You can obtain Paid Support Services if you need support on a priority basis, along with the direct access to our Paid Support management team.

@oleksii.gorokhovatskyi
感谢您为我在您的问题跟踪系统中创建了新的工单(CADJAVA-11076)。我对此表示赞赏。
为了更好地理解我遇到的问题,我希望能获取一些关于这个问题的更多详细信息。具体来说,我希望能了解以下两点:

  1. 具体原因:请您能否详细解释一下这个问题产生的具体原因?这对我理解问题,以及避免在将来的工作中再次遇到类似问题具有重要的帮助。
  2. 临时解决方案:在您解决这个问题之前,是否存在可以暂时使用的解决方案或者工作绕过方案?这将帮助我在等待修复的过程中继续进行我的工作。

再次感谢您的帮助,我期待着您的回复。

@Mer_Lee,

  1. 不幸的是,我们现在没有确切的原因。 我们只是看到在读取某个动态块时发生错误。 它可能是由于我们这边文件读取时的一些错误或文件结构中的某些意外情况而出现的。
  2. 正如我所看到的,这个文件是使用 Aspose.CAD for .NET 23.3 正常处理的,所以我希望下一个 Aspose.CAD for Java 版本可以正常处理,但我们不能保证。 我还可以看到,只需将 AutoCAD 中的此文件重新保存到相同的 2007 版本中即可修复结构中的某些内容,我们也可以对其进行处理 - 您可以尝试将此作为解决方法 - 只需将此文件重新保存在 AutoCAD 中。 使用更新的 DWG 版本(2010+)可能会使文件处理更加稳定。

@oleksii.gorokhovatskyi
好的,非常感谢您的帮助和回复。

1 Like