首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用节点服务从dotnet Core 2创建PDF文档

使用节点服务从dotnet Core 2创建PDF文档
EN

Stack Overflow用户
提问于 2019-09-13 14:01:41
回答 2查看 290关注 0票数 1

我需要从服务器端的HTML创建一个pdf文件(dotnet 2),并将其作为电子邮件的附件发送。我创建了一个节点服务(createPdf.js),如下所示,并将其保存在解决方案中的本地目录(NodeService)中-

代码语言:javascript
运行
复制
module.exports = function (callback, html, outputFilePath) {
    var pdf = require('html-pdf');
    var options = { format: 'A3', orientation: 'portrait' };

    pdf.create(html, options)
        .toFile(outputFilePath, function (err, res) {
            if (err)
                return callback(null, false);

            callback(null, true);
        });
} 

我触发这个功能如下-

代码语言:javascript
运行
复制
    public static async Task<bool> GeneratePdf(INodeServices nodeService, string html, string outputFilePath)
    {
        string pdfGenerationNodeService = Path.Combine(Directory.GetCurrentDirectory(), "NodeService", "createPdf.js");
        try
        {
            return await nodeService.InvokeAsync<bool>(pdfGenerationNodeService, html, outputFilePath);
        }
        catch (Exception ex)
        {
            throw;
        }
    }

从控制器调用这个方法-

代码语言:javascript
运行
复制
public async Task<IActionResult> SendQuotationToHospitalAsync([FromServices]INodeServices nodeService, int id)
{
    ...
    bool isAdminPdfGenerationSuccess = await PdfHelperService.GeneratePdf(nodeService, htmlContent, filePath);
    ...
}

我还在StartUp.cs中注册了节点服务-

代码语言:javascript
运行
复制
services.AddNodeServices();

当我在调试模式下触发函数时,它正常工作,而pdf文件正在生成。但是,一旦我将应用程序部署到服务器上,节点函数就不会被触发。任何有关这个问题的帮助都会很有帮助。谢谢。

由于这是一个家庭项目,我买不起任何高级的HTML-to-PDF转换器。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-09-14 14:05:52

我在客户端使用了R角7,并相应地安装了npm包,其中也包括了html-pdf包。但是,我没有在保存节点脚本的目录中安装它。我希望这个包在部署后会从vendor.js中取出,这显然不是这样的。我必须在目录中创建另一个package.json文件,并在部署后分别安装,此后一切顺利。

这正是我在部署应用程序时所缺少的--在节点脚本的本地目录中安装我正在使用的包的一个小的手动npm install

非常感谢你对这个问题的讨论,它帮助我很好地理解了我可能犯的其他错误。

票数 0
EN

Stack Overflow用户

发布于 2019-09-13 16:25:10

您可能会看到是您试图用NodeServices实现的一个工作示例。它在Docker上运行,因此您可以从Dockerfile获得一个提示,说明您需要在服务器上安装什么才能让它在那里工作。

另一种方法是使用PuppeteerSharp,如下所示:

代码语言:javascript
运行
复制
await new BrowserFetcher().DownloadAsync(BrowserFetcher.DefaultRevision);
var browser = await Puppeteer.LaunchAsync(new LaunchOptions
{
  Headless = true,
  Args = new string[] { "--no-sandbox" }
});

var page = await browser.NewPageAsync();
await page.SetContentAsync(htmlContent);
await page.PdfAsync(filePath); // page.PdfStreamAsync() to generate only in-memory
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57925105

复制
相关文章

相似问题

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