Autodesk Forge可以将DWG上的多个布局转换为PDF。
创始人
2024-09-22 22:31:12
0

您可以使用Autodesk Forge的Model Derivative API将DWG文件上的多个布局转换为PDF。以下是一个示例代码,使用C#编写:

using System;
using System.IO;
using Autodesk.Forge;
using Autodesk.Forge.Model;

public class ForgeAPI
{
    private const string CLIENT_ID = "YOUR_CLIENT_ID";
    private const string CLIENT_SECRET = "YOUR_CLIENT_SECRET";
    private const string BUCKET_KEY = "YOUR_BUCKET_KEY";
    private const string FILE_NAME = "YOUR_DWG_FILE_NAME.dwg";
    private const string OUTPUT_FILE_NAME = "OUTPUT_PDF_FILE_NAME.pdf";

    public async Task ConvertDWGToPDF()
    {
        TwoLeggedApi oauth = new TwoLeggedApi();
        ApiResponse tokenResponse = await oauth.AuthenticateAsync(CLIENT_ID, CLIENT_SECRET, "client_credentials", new[] { Scope.DataRead, Scope.DataWrite, Scope.ViewablesRead });

        if (tokenResponse.StatusCode != HttpStatusCode.OK)
        {
            Console.WriteLine("Authentication failed with error: " + tokenResponse.Error.Message);
            return;
        }

        dynamic token = tokenResponse.Content;
        string accessToken = token.access_token;

        // Step 1: Create a new bucket (if it doesn't exist)
        BucketsApi bucketsApi = new BucketsApi();
        bucketsApi.Configuration.AccessToken = accessToken;

        PostBucketsPayload bucketPayload = new PostBucketsPayload(BUCKET_KEY, null, PostBucketsPayload.PolicyKeyEnum.Transient);
        try
        {
            dynamic createBucketResponse = await bucketsApi.CreateBucketAsync(bucketPayload, "US");
        }
        catch (ApiException ex)
        {
            if (ex.ErrorCode != 409) // Bucket already exists
            {
                Console.WriteLine("Failed to create bucket with error: " + ex.Message);
                return;
            }
        }

        // Step 2: Upload the DWG file to the bucket
        ObjectsApi objectsApi = new ObjectsApi();
        objectsApi.Configuration.AccessToken = accessToken;

        string filePath = "PATH_TO_DWG_FILE";
        using (StreamReader fileStream = new StreamReader(filePath))
        {
            dynamic uploadObjectResponse = await objectsApi.UploadObjectAsync(BUCKET_KEY, FILE_NAME, (int)fileStream.BaseStream.Length, fileStream.BaseStream, "application/octet-stream");
        }

        // Step 3: Translate the DWG file to PDF
        JobPayload jobPayload = new JobPayload(
            new JobPayloadInput(BUCKET_KEY, FILE_NAME),
            new JobPayloadOutput(
                new JobPayloadOutputPayload(JobPayloadOutputPayload.ViewsEnum._2d),
                new JobPayloadOutputFormat(JobPayloadOutputFormat.TypeEnum.Pdf),
                new JobPayloadOutputDestination(JobPayloadOutputDestination.DestinationEnum.Oss),
                new JobPayloadOutputOptions(JobPayloadOutputOptions.AutodeskSpecific))
            );

        DerivativesApi derivativesApi = new DerivativesApi();
        derivativesApi.Configuration.AccessToken = accessToken;

        try
        {
            dynamic translateResponse = await derivativesApi.TranslateAsync(jobPayload);
        }
        catch (ApiException ex)
        {
            Console.WriteLine("Failed to translate DWG to PDF with error: " + ex.Message);
            return;
        }

        // Step 4: Check the translation status and download the PDF file
        dynamic manifest = null;
        while (manifest == null || manifest.progress != "complete")
        {
            await Task.Delay(2000); // Wait for 2 seconds before checking the status again

            manifest = await derivativesApi.GetManifestAsync(URN.EncodeBase64(BUCKET_KEY + FILE_NAME));
        }

        string pdfUrn = null;
        foreach (KeyValuePair derivative in manifest.derivatives)
        {
            if (derivative.Value.outputType == "pdf")
            {
                pdfUrn = derivative.Value.urn;
                break;
            }
        }

        if (pdfUrn == null)
        {
            Console.WriteLine("Failed to find PDF derivative in the manifest.");
            return;
        }

        dynamic pdfObject = await derivativesApi.GetObjectAsync(URN.EncodeBase64(pdfUrn));

        using (Stream pdfStream = new FileStream(OUTPUT_FILE_NAME, FileMode.Create))
        {
            await pdfObject.Content.CopyToAsync(pdfStream);
        }

        Console.WriteLine("PDF conversion completed.");
    }
}

请确保将以下变量替换为您的实际值:

  • YOUR_CLIENT_ID:您的Autodesk Forge应用程序的客户端ID。
  • YOUR_CLIENT_SECRET:您的Autodesk Forge应用程序的客户端密钥。
  • YOUR_BUCKET_KEY:您要使用的存储桶的唯一键。
  • YOUR_DWG_FILE_NAME.dwg:您要转换为PDF的

相关内容

热门资讯

两分钟带你了解!四川微乐小程序... 两分钟带你了解!四川微乐小程序辅助器(透视挂)科技通报外挂开挂辅助下载(一贯真的有挂);无需打开直接...
揭秘"传送屋辅助k&... 揭秘"传送屋辅助k"开挂(透视)辅助软件(原来是真的有挂)-哔哩哔哩;传送屋辅助k软件透视开挂作为一...
第八分钟带你了解!新道游戏辅助... 第八分钟带你了解!新道游戏辅助器安装包(辅助挂)一分钟秒懂外挂开挂辅助平台(果然真的是有挂)您好:新...
透视辅助"广东雀神挂... 透视辅助"广东雀神挂件怎么样"开挂(透视)辅助平台(原来真的有挂的)-哔哩哔哩;最新版2026是一款...
3分钟带你了解!杭州都莱辅助臁... 3分钟带你了解!杭州都莱辅助臁(透视挂)一分钟了解外挂开挂辅助脚本(原来有挂);无需打开直接搜索加薇...
重大通报"五十k辅助... 重大通报"五十k辅助"开挂(透视)辅助平台(一直确实是有挂)-哔哩哔哩;相信小伙伴都知道这个五十k辅...
十分钟带你了解!蛮籽麻旺重庆辅... 十分钟带你了解!蛮籽麻旺重庆辅助(透视挂)热点推荐外挂开挂辅助平台(果然是有挂的)您好:蛮籽麻旺重庆...
透视透视"赣牌圈控制... 透视透视"赣牌圈控制牌型"开挂(透视)辅助神器(一贯确实是有挂的)-哔哩哔哩;亲真的是有正版授权,小...
1分钟带你了解!广东雀神挂件去... 1分钟带你了解!广东雀神挂件去那买(透视挂)科技分享外挂开挂辅助脚本(果然是有挂);无需打开直接搜索...
避坑细节"花花生活圈... 避坑细节"花花生活圈怎么装开挂"开挂(透视)辅助神器(其实是有挂的)-哔哩哔哩;花花生活圈怎么装开挂...