Конвертируйте pdf в html с помощью Aspose.Pdf для облака

У меня возникли проблемы с преобразованием pdf в html с помощью Aspose.Pdf-Cloud v1.0.9.

Код:

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 в html.

Обновление: после входа в учетную запись похоже, что за кулисами возникает ошибка:

Ошибка: Метод или операция не реализованы. Метод: Конвертировать документ в формат, указанный онлайн.. Параметры: формат '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");
        }

person RandomUs1r    schedule 16.10.2017    source источник
comment
Я никогда не использовал его сам, поэтому я, вероятно, не буду сильно помогать, но, возможно, стоит включить в него то, как создается объект, который передается как doc, любая обработка, а затем преобразуется в байтовый массив (чувствует себя очевидно, но может быть и не так). Лично у меня была похожая проблема, и на этапе обработки был поврежден файл tiff.   -  person Robert    schedule 16.10.2017
comment
@Robert Я на самом деле прошел через все это, получив туда документы, поэтому могу поручиться за чистоту потока байтов;) Я обновил свой вопрос, похоже, это может быть проблема с их API SDK.   -  person RandomUs1r    schedule 16.10.2017
comment
@Erik Philips, мы изучаем ошибку неверного запроса и сообщим вам, как только она будет исправлена. Я работаю с Aspose в качестве евангелиста разработчиков.   -  person Imran Rafique    schedule 18.10.2017
comment
@ImranRafique Я отредактировал вопрос. Ваши комментарии должны быть адресованы RandomUs1r :)   -  person Erik Philips    schedule 18.10.2017


Ответы (1)


У нас есть два API для преобразования PDF-документа в HTML.

  1. GET /v{version}/pdf/{name}
  2. PUT /v{версия}/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 в качестве файла ресурсов.

P.S. Я работаю с Aspose в качестве евангелиста разработчиков.

person Sohail    schedule 23.10.2017
comment
Второй возвращает поток байтов со встроенными изображениями, что в большей степени соответствует тому, что мне нужно. Кроме того, я использую пакет SDK nuget для С#, каким будет эквивалентный код для использования пакета SDK? Есть ли вариант или флаг, который я могу использовать для получения изображений, встроенных в html, аналогично методу Words Api PutConvert с использованием SDK? - person RandomUs1r; 23.10.2017
comment
@RandomUs1r Пожалуйста, проверьте этот пример C#, он преобразует файл PDF (содержащий изображения) в HTML. В примере сначала файл PDF преобразуется в HTML, а затем загружается преобразованный файл из облака в локальный каталог. Надеюсь, этот пример послужит вашей цели, поскольку он возвращает поток байтов со встроенными изображениями. - person Sohail; 24.10.2017
comment
Я сделал это и обновил свой вопрос новым кодом, однако это не то, что мне нужно. Это генерирует такой код, как › ‹link rel=stylesheet type=text/css href=document_files/style.css /› и ‹div class=stl_03› ‹object data=document_files/img_02.svg type=image/svg+xml class= stl_04 стиль = позиция: абсолютная; ширина: 49,5833 см; высота: 70.1667em;› ‹embed src=document_files/img_02.svg type=image/svg+xml /› ‹/object› ‹/div› - person RandomUs1r; 24.10.2017