У меня возникли проблемы с преобразованием 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");
}