首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Azure中将tuespechkin与MVC项目结合使用

在Azure中将tuespechkin与MVC项目结合使用
EN

Stack Overflow用户
提问于 2015-05-14 08:02:22
回答 2查看 2.6K关注 0票数 3

我无法让佩奇金或图斯佩奇金在我的蔚蓝网站上工作。

每当我试图访问该站点时,它就会挂起,没有错误消息(即使在关闭customErrors时也是如此)。我还有没有更多的陷阱呢?一切都在当地完美地运作。

对于64位应用程序,我将完成以下步骤:

  • 使用Azure创建一个新的空MVC应用程序,确保选中云中的主机
  • 将应用程序更改为64位
  • 登录到蔚蓝门户,并将应用程序升级到基本托管,并将其更改为64位
  • 安装TuesPechkin.Wkhtmltox.Win64和TuesPechkin nuget软件包
  • 添加一个单例类以返回IConverter 公共类TuesPechkinConverter {专用静态IConverter转换器;公共静态IConverter转换器{ get { if (转换器==空){转换器=新ThreadSafeConverter(新的PdfToolset(新的Win64EmbeddedDeployment(新的TempFolderDeployment();}返回转换器;}}
  • 在索引操作中添加具有以下代码的家庭控制器: var document =新HtmlToPdfDocument { GlobalSettings ={ ProduceOutline = true,DocumentTitle =“漂亮网站”,PaperSize = PaperKind.A4,//隐式转换为PechkinPaperSize边距={ All = 1.375,Unit = Unit.Centimeters },对象={新的ObjectSettings { HtmlText =“漂亮的WebsitesThis可能需要一点时间来转换!”},新的ObjectSettings { PageUrl = "www.google.com“} };TuesPechkinConverter.Converter.Convert(document);返回文件( pdfBuf,"application/pdf","DownloadName.pdf");
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-08-18 13:29:34

据我所知,你不能让它在网络应用程序中工作。但是,有一种方法可以做到:您必须创建一个云服务并向其添加一个工作角色。将在此工作人员角色中安装TuesPechkin

工作流程如下:从云web应用程序中,您将访问worker角色(通过将worker角色配置为宿主Asp.NET Web 2是可能的)。worker角色将使用TuesPechkin配置转换器,并生成PDF。我们将把pdf封装在wrap响应中,并将其发回。现在,我们开始吧.

要添加云服务(假设您安装了Azure SDK ),在单击OKE 217 select E 118Worker -> >E 219并单击E 120OKOKE 221后,右键单击解决方案-> 添加新项目 ->,选择节点-> Azure Cloud Service ->。

创建了云服务和工作角色。接下来要做的是配置您的Worker角色,以便它可以承载ASP.NET Web 2。通过遵循教程,这种配置非常简单。

在您将Worker角色配置为承载web之后,您将不得不安装TuesPechkin.Wkhtmltox.Win64和TuesPechkin nuget包。

您的配置现在应该已经准备好了。现在创建一个控制器,在其中我们将生成PDF:在您的Worker角色中添加一个新类,它将扩展ApiController

代码语言:javascript
复制
public class PdfController : ApiController
{
}

向控制器添加一个操作,它将返回一个HttpResponseMessage对象。

代码语言:javascript
复制
[HttpPost]
public HttpResponseMessage GeneratePDF(PdfViewModel viewModel)
{
}

在这里,我们将配置两个ObjectSettingsGlobalSettings对象,它们将应用于HtmlToPdfDocument对象。你现在有两个选择。

您可以通过页面url直接从html文本(可能是在请求中发送页面的html )生成

代码语言:javascript
复制
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" }
    }
};

现在有一件好事是,在使用页面url时,可以使用ObjectSettings对象来发布参数:

代码语言:javascript
复制
var obj = new ObjectSettings();
obj.LoadSettings.PostItems.Add
    (
        new PostItem() 
        {
            Name = "paramName",
            Value = paramValue
        }
    );

此外,从TuesPechkin文档中,转换器应该是线程安全的,并且应该保存在静态的地方,或者作为单个实例保存:

代码语言:javascript
复制
IConverter converter =
    new ThreadSafeConverter(
         new RemotingToolset<PdfToolset>(
              new Win64EmbeddedDeployment(
                   new TempFolderDeployment())));

最后,将pdf封装在响应内容中,将响应内容类型设置为application/pdf,并添加内容配置标头,仅此而已:

代码语言:javascript
复制
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;
票数 2
EN

Stack Overflow用户

发布于 2015-05-19 23:00:37

恐怕答案是,让wkhtmltopdf在Azure上工作是不可能的。

看这个线程

我假设您的意思是在Windows网站上运行wkhtmltopdf。 wkhtmltopdf使用窗口的GDI API,这些API目前不适用于Azure网站。

Tuespechkin支持使用

  • 它支持.NET 2.0+、32位和64位进程以及IIS托管的应用程序.
  • Azure网站目前不支持使用wkhtmltopdf。

解决方案

最后我创建了一个运行wkhtmltopdf.exe的Azure。我将html发送到服务,并得到一个byte[]作为回报。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30232279

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档