2015-05-14 78 views
3

我無法設法讓pechkin或tuespechkin在我的天藍色網站上工作。在Azure中使用tuespechkin和MVC項目

每當我嘗試訪問站點時,它只是掛起而沒有錯誤信息(即使關閉customErrors)。有沒有進一步的設置我錯過了?一切都在當地完美運作

對於64位應用程序,我完成以下步驟:

  • 創建一個新的空MVC應用程序有天青,使雲主機肯定選擇
  • 更改應用到64位

  • 登錄到蔚藍的門戶網站和升級應用基本存取,更改爲64位

  • 安裝TuesPechkin.Wkhtmltox.Win64和TuesPechkin的NuGet包
  • 添加一個單獨的類返回IConverter

    public class TuesPechkinConverter 
    { 
    private static IConverter converter; 
    
    public static IConverter Converter 
    { 
        get 
        { 
         if (converter == null) 
         { 
          converter = 
         new ThreadSafeConverter(
          new PdfToolset(
           new Win64EmbeddedDeployment(
            new TempFolderDeployment()))); 
         } 
    
         return converter; 
        } 
    } 
    } 
    
  • 添加家庭控制器與索引操作下面的代碼:

    var document = new HtmlToPdfDocument 
        { 
         GlobalSettings = 
         { 
          ProduceOutline = true, 
          DocumentTitle = "Pretty Websites", 
          PaperSize = PaperKind.A4, // Implicit conversion to PechkinPaperSize 
          Margins = 
          { 
           All = 1.375, 
           Unit = Unit.Centimeters 
          } 
         }, 
         Objects = 
         { 
          new ObjectSettings { HtmlText = "<h1>Pretty Websites</h1><p>This might take a bit to convert!</p>" }, 
          new ObjectSettings { PageUrl = "www.google.com" }  
        } 
        }; 
    
        byte[] pdfBuf = TuesPechkinConverter.Converter.Convert(document); 
        return File(pdfBuf, "application/pdf", "DownloadName.pdf"); 
    
+0

很抱歉,如果我誤解了,但我不認爲TuesPechkin實際工作的Azure網站(根據github頁面)https://github.com/tuespetre/TuesPechkin。原因是該庫使用的是GDI,它在azure下不可用。 – leon

+0

啊,我發現現在 - 我可能需要使用第三方轉換服務:(開始調查它,因爲它在這裏提到http://stackoverflow.com/questions/23059144/pechkin-with-windows-azure – woggles

+0

是還有其他任何可以將Azure上的HTML> PDF轉換爲快速且易於使用的替代方法嗎? – woggles

回答

2

據我所知,你不能讓它在網絡應用程序工作。但是,您可以這樣做:您必須創建一個雲服務併爲其添加輔助角色。 將在此工作角色中安裝「週二皮子」

工作流程如下:從您的雲Web應用程序中,您可以訪問輔助角色(通過配置輔助角色來承載Asp.NET Web API 2,可以實現此功能)。工作者角色將使用PhontPechkin配置轉換器,並生成PDF。我們會將這個PDF文件封裝在web API響應中併發送回去。現在,讓我們做吧......

要添加的雲服務(假設你已經安裝了Azure的SDK),去的Visual Studio - >右鍵點擊您的解決方案 - >添加新項目 - >選擇節點 - >Azure的雲服務 - 您單擊OK 選擇工人角色並單擊OK >。

您的雲服務和您的工作者角色已創建。接下來要做的就是配置你的工作者角色,這樣它就可以託管ASP.NET Web API 2。 這個配置非常簡單,按照this教程。

工作者角色配置爲託管網絡API後,您必須安裝ThursPechkin.Wkhtmltox.Win64和TuesPechkin nuget包。

您的配置現在應該已準備就緒。現在創建一個控制器,在此我們將生成PDF:添加一個新類在Worker角色這將延長ApiController

public class PdfController : ApiController 
{ 
} 

添加操作到我們的控制器,它會返回一個HttpResponseMessage對象。

[HttpPost] 
public HttpResponseMessage GeneratePDF(PdfViewModel viewModel) 
{ 
} 

在這裏,我們將配置將被應用到HtmlToPdfDocument物體的兩個ObjectSettingsGlobalSettings對象。 你現在有兩個選擇。

您可以直接通過頁面url從HTML文本生成PDF(也許您在請求中發送了頁面的HTML)

var document = new HtmlToPdfDocument 
{ 
    GlobalSettings = 
    { 
     ProduceOutline = true, 
     DocumentTitle = "Pretty Websites", 
     PaperSize = PaperKind.A4, // Implicit conversion to PechkinPaperSize 
     Margins = 
     { 
      All = 1.375, 
      Unit = Unit.Centimeters 
     } 
    }, 
    Objects = { 
     new ObjectSettings { HtmlText = "<h1>Pretty Websites</h1><p>This might take a bit to convert!</p>" }, 
     new ObjectSettings { PageUrl = "www.google.com" } 
    } 
}; 

一個很好的事情,現在是使用網頁的網址時,您可以使用ObjectSettings對象後參數:

var obj = new ObjectSettings(); 
obj.LoadSettings.PostItems.Add 
    (
     new PostItem() 
     { 
      Name = "paramName", 
      Value = paramValue 
     } 
    ); 

此外,從TuesPechkin文檔轉換器應該是線程安全的,應該保持在某個靜態的地方,或者作爲一個單獨的實例:

IConverter converter = 
    new ThreadSafeConverter(
     new RemotingToolset<PdfToolset>(
       new Win64EmbeddedDeployment(
        new TempFolderDeployment()))); 

最後你將pdf包裝在respons E的含量,響應內容類型設置爲應用/ PDF並添加內容部署頭,就是這樣:

byte[] result = converter.Convert(document); 
MemoryStream ms = new MemoryStream(result); 

response.StatusCode = HttpStatusCode.OK; 
response.Content = new StreamContent(ms); 
response.Content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/pdf"); 
response.Content.Headers.Add("content-disposition", "attachment;filename=myFile.pdf"); 
return response; 
1

恐怕答案是無法讓wkhtmltopdf在Azure上工作。

See this thread

我假設你是指在Windows Azure網站上運行wkhtmltopdf。

wkhtmltopdf使用Window的GDI API,目前不適用於Azure 網站。

Tuespechkin supported usage

  • 它支持.NET 2.0+,32位和64位的進程,和IIS託管的應用程序。
  • Azure網站目前不支持使用wkhtmltopdf。

解決方法

我結束了創建一個Azure的雲服務,運行wkhtmltopdf.exe。我發送html到服務,並返回一個字節[]。