【问题标题】:Convert pdf to html with Aspose.Pdf for Cloud使用 Aspose.Pdf for Cloud 将 pdf 转换为 html
【发布时间】:2017-10-16 17:09:10
【问题描述】:

我在使用 Aspose.Pdf-Cloud v1.0.9 将 pdf 转换为 html 时遇到问题。

代码:

public byte[] ConvertPdfToHtml(byte[] doc, string fileName)
        {
            var pdfApi = new PdfApi(ConfigurationManager.AppSettings["AsposeKey"],
                ConfigurationManager.AppSettings["AsposeSID"], ConfigurationManager.AppSettings["AsposeUrl"]);

            try
            {
                var apiResponse = pdfApi.PutConvertDocument("html", null,
                    Path.GetFileNameWithoutExtension(fileName) + ".html", doc);

                if (apiResponse != null && apiResponse.Status.Equals("Ok"))
                {
                    return apiResponse.ResponseStream;
                }

                throw new Exception("Couldn't convert pdf - " + fileName + " to HTML...");
            }
            catch (Exception ex)
            {
                NLogger.LogError("ConvertPdfToHtml - " + ex);
                throw;
            }
        }

似乎无论我上传什么(Adobe,selectPdf),我都会收到 400 错误请求。任何人都有运气让它工作吗?

到目前为止,Aspose.Words 对我来说非常适合 doc / docx to html。

更新:登录帐户后,似乎在后台生成错误:

错误:方法或操作未实现。方法:将文档转换为在线指定的格式。参数:format 'html',url '',outPath 'testadobe.html'

这可能是 aspose sdk 问题,我会尝试与他们联系,因为该方法已在 sdk 上公开,并且完全符合我对文档的需要,只需要它也可以与 pdf 一起使用。

更新代码:

public byte[] ConvertPdfToHtml(byte[] doc, string fileName)
        {
            var pdfApi = new PdfApi(ConfigurationManager.AppSettings["AsposeKey"],
                ConfigurationManager.AppSettings["AsposeSID"], ConfigurationManager.AppSettings["AsposeUrl"]);
            var storageApi = new StorageApi(ConfigurationManager.AppSettings["AsposeKey"],
                ConfigurationManager.AppSettings["AsposeSID"], ConfigurationManager.AppSettings["AsposeUrl"]);

            try
            {
                storageApi.PutCreate(fileName, "", "", doc);

                var apiResponse = pdfApi.GetDocumentWithFormat(fileName, "html", "", "", Path.GetFileNameWithoutExtension(fileName) + ".html");

                if (apiResponse != null && apiResponse.Status.Equals("Ok"))
                {
                    var storageRes = storageApi.GetDownload(Path.GetFileNameWithoutExtension(fileName) + ".html", null, "");

                    var htmlDoc = ZipExtractor.ExtractHtmlFromZip(storageRes.ResponseStream,
                        Path.GetFileNameWithoutExtension(fileName) + ".html");

                    return htmlDoc;
                }

                throw new Exception("Couldn't convert pdf - " + fileName + " to HTML...");
            }
            catch (Exception ex)
            {
                NLogger.LogError("ConvertPdfToHtml - " + ex);
                throw;
            }
        }

后人的解压功能:

public static byte[] ExtractHtmlFromZip(byte[] zipBytes, string fileName)
        {
            var zipStream = new MemoryStream(zipBytes);

            if(zipStream == null) throw new NullReferenceException("zipStream doesn't contain any bytes...");

            var archive = new ZipArchive(zipStream);

            foreach (var zipEntry in archive.Entries)
            {
                if (zipEntry.FullName == fileName)
                {
                    var fileStream = zipEntry.Open();
                    using (var ms = new MemoryStream())
                    {
                        fileStream.CopyTo(ms);
                        var bytes = ms.ToArray();
                        return bytes;
                    }
                }
                throw new FileNotFoundException("Couldn't find " + fileName + " in zip archive...");
            }

            throw new Exception("Oops... looks like this should've never been reached in ExtractHtmlFromZip");
        }

【问题讨论】:

  • 我自己从未使用过它,所以我可能不会提供太多帮助,但可能值得包括如何构造作为 doc 传入的对象、任何处理以及然后转换为字节数组(感觉很明显,但可能并非如此)。就个人而言,我遇到过类似的问题,并且有一个处理步骤损坏了 tiff 文件。
  • @Robert 实际上,我已经完成了获取文档的所有过程,因此我可以保证字节流是纯的;)我更新了我的问题,看起来这可能是他们的 api 的问题sdk.
  • @Erik Philips,我们正在调查错误请求错误,并在修复后通知您。我与 Aspose 合作,担任开发人员宣传员。
  • @ImranRafique 我编辑了这个问题。你的 cmets 应该指向 RandomUs1r :)

标签: c# pdf aspose aspose.pdf


【解决方案1】:

我们有两个 API 可以将 PDF 文档转换为 HTML。

  1. GET /v{version}/pdf/{name}
  2. PUT /v{version}/pdf/convert

我建议您使用第一个。以下 cURL 示例将帮助您理解 API。

curl -v "http://api.aspose.cloud/v1.1/pdf/Sample.pdf?format=html&appSID=B01A15E5-1B83-4B9A-8EB3-0F2BFA6AC766&signature=hHUw2HKmLY6tQFEevDg52uOLKak" \
-X GET \
-H "Content-Type: application/json" \
-H "Accept: multipart/form-data" \
-o Sample_out.zip 

您可能已经观察到,我将输出 (-o) 文件扩展名设置为 .zip,而不是 .html,原因是转换后的文件包含多个文件(.html、.css、图像文件),所以API 压缩了输出文件。

此 cURL 示例使用 Sample.pdf 作为资源文件。

附:我与 Aspose 合作,担任开发人员宣传员。

【讨论】:

  • 第二个返回嵌入图像的字节流,这更符合我的要求。另外,我正在使用 C# nuget SDK,使用 sdk 的等效代码是什么?是否有一个选项或标志可以用来获取嵌入在 html 中的图像,类似于使用 sdk 的 Words Api PutConvert 方法?
  • @RandomUs1r 请检查this C# example,它将PDF文件(包含图像)转换为HTML。该示例首先将 PDF 文件转换为 HTML,然后将转换后的文件从 Cloud 下载到本地目录。希望这个示例能够满足您的目的,因为它返回一个嵌入了图像的字节流。
  • 我做到了,并且我用新代码更新了我的问题,但这不是我想要的。这会生成诸如 >
猜你喜欢
  • 1970-01-01
  • 2011-12-04
  • 2017-08-31
  • 1970-01-01
  • 1970-01-01
  • 2012-07-10
  • 2020-09-04
  • 2017-12-19
相关资源
最近更新 更多