2

我们需要在 .NET Azure 应用程序中动态生成 PDF,并确定PDFLib最能满足我们的要求。

基本部署是基于 dll 的,因此应该相对简单。在研究这个问题时,我遇到了一个案例研究,涉及安装另一个类似的组件(AbcPdf,这里),这让我想知道是否有人有任何类似的详细经验可以分享关于在云服务上启动和运行 PDFLib ?

具体来说,我感兴趣的是除了引用的 .dll 之外是否还有其他文件必须与包一起复制,是否需要使用启动命令将 PDFLib 安装到 GAC,以及是否有任何问题让许可工作在云环境中。

如果需要,我们当然可以为此使用 VM,但最初我希望使用标准工作角色。我将要求 PDFLib 支持这个问题,并将分享我在这里得到的任何答案,因为我在 Stackoverflow 上的其他任何地方都没有发现这个主题。

4

4 回答 4

2

这是我从 PDF Lib 支持中得到的,我认为它涵盖了所有内容:

.NET PDFLib 是否需要 GAC 部署,或者 dll 是否可以简单地复制到服务器?

您可以简单地部署 pdflib_dotnet dll。

除了引用的 dll 之外,是否还有其他文件需要部署才能使 PDFLib 工作?

不,PDFlib 没有任何进一步的依赖关系。

在我们可能无法运行安装程序并且我们可能无法访问 Windows 注册表的环境中,我们如何验证我们的产品许可证?

有多种方法可以做到这一点。最简单的方法是在代码中应用许可证密钥。您还可以应用许可证文件。请记住,您需要为每个服务,其中 PDFlib 在生产使用中运行一个单独的许可证。例如,当您在具有 4 个节点(服务器)的集群系统中运行应用程序时,您需要 4 个许可证。

而且,您对此类云部署有任何一般性指导吗?

我们对此没有任何特别的评论。但我敢肯定,您会在 PDFlib 8 包中包含的“PDFlib in .NET Howto”中找到很多关于我们的 PDFlib .NET 实现概念的相关信息,也可以在我们的网站上找到: http ://www.pdflib.com/en/developer/technical-documentation/pdflib-in-net-howto/

于 2012-08-17T09:35:53.010 回答
1

让我从我没有将这个评论部署到 Azure 开始。但是,对于您拥有的任何组件,以下内容应该是准确的。

如果您可以仅将此组件 xcopy 部署到常规服务器,则它应该只使用普通部署包到云服务;但是,如果在分发到普通服务器时需要安装(阅读,而不是您的开发机器),那么您可能需要一些额外的步骤。例如,如果安装将程序集推入 GAC,那么您必须效仿。

我只需在以前没有安装此组件的常规本地机器上测试 xcopy 部署部署,看看它是否有效。如果是这样,您可能会很好地确保它被引用并与您的包一起部署。如果您担心它可能需要其他程序集来配合它,请使用 Reflector、Just Decompile 或 ILDasm 之类的工具来检查程序集的引用(小心,在程序集上使用反编译器可能违反您的 EULA)。

于 2012-08-16T15:45:03.020 回答
1

我知道您要求的是实际经验,但我会说答案是这应该可行。从http://www.pdflib.com/fileadmin/pdflib/pdf/support/PDFlib-in-.NET-HowTo.pdf

还支持称为 xcopy 部署的过程。您可以使用 xcopy 命令或 FTP 传输简单地将 PDFlib 程序集 (pdflib_dotnet.dll) 复制到服务器

于 2012-08-16T20:53:58.683 回答
1

我下载了 PDFLib x64 版本,并快速试用了 Windows Azure Web Role。该库仅包含一个作为 PDFlib_dotnet.dll 的 DLL,您可以将其添加为参考并将其属性设置为“Copy Local As True”。之后,您可以在代码中引用它并根据文档使用它。

根据我的快速测试,您确实需要修改代码以使用 Windows Azure 本地存储来创建 PDF 文件并同步到 Windows Azure Blob 存储以正确保存它。可能有办法将 PDF 直接创建到 Azure Blob 存储,但我只是没有进一步研究。

我使用以下代码创建了一个基于 ASP.NET 的 webrole:

        PDFlib p;
        int font;

        p = new PDFlib();

        try
        {
            // This means we must check return values of load_font() etc.
            p.set_parameter("errorpolicy", "return");

            // Added code to create PDF on Local Storage 

            LocalResource myStorage = RoleEnvironment.GetLocalResource("myLocalStorage");
            string filePath = Path.Combine(myStorage.RootPath, "hello.pdf");


            if (p.begin_document(filePath, "") == -1)
            {
                Console.WriteLine("Error: {0}\n", p.get_errmsg());
                return;
            }

            p.set_info("Creator", "hello.cs");
            p.set_info("Author", "Rainer Schaaf");
            p.set_info("Title", "Hello, world (.NET/C#)!");

            p.begin_page_ext(595, 842, "");

            font = p.load_font("Helvetica-Bold", "unicode", "");
            if (font == -1)
            {
                Console.WriteLine("Error: {0}\n", p.get_errmsg());
                return;
            }

            p.setfont(font, 24);
            p.set_text_pos(50, 700);
            p.show("Hello, world!");
            p.continue_text("(says .NET/C#)");
            p.end_page_ext("");

            p.end_document("");
        }

        catch (PDFlibException eX)
        {
            // caught exception thrown by PDFlib
            Console.WriteLine("PDFlib exception occurred in hello sample:\n");
            Console.WriteLine("[{0}] {1}: {2}\n", eX.get_errnum(),
                    eX.get_apiname(), eX.get_errmsg());
        }
        finally
        {
            if (p != null)
            {
                p.Dispose();
            }
        }
    }
于 2012-08-16T22:56:33.920 回答