7

我正在使用 Aspose 处理 PDF 和 Word 文档。每次我要对文档做某事时,我都会确保调用它:

Aspose.Pdf.License pdfLicense = new Aspose.Pdf.License();
pdfLicense.SetLicense("Aspose.Total.lic");

Aspose.Words.License wordLicense = new Aspose.Words.License();
wordLicense.SetLicense("Aspose.Total.lic");

pdfLicense和变量从未在wordLicense任何地方使用,但 Aspose 正确地识别出我确实拥有有效的许可证。这是怎么发生的?许可证是否在某个地方的秘密单身人士中持有?如果是这样,这是否意味着它们会在线程的整个生命周期内持续存在?

由于这是在 Web 应用程序中使用的,如果我在应用程序启动时运行上述代码,那么我是否可以在整个应用程序中安全地使用 Aspose 而无需担心许可问题?

目前,我会更加偏执,并在使用 Aspose 的每个方法开始时运行该代码。这很好用 - 我的许可证被正确识别 - 但它有点太“巧合编程”让我感到舒服。

(我在 ASP.NET 3.5 中使用 C#,如果这有什么不同的话。)

4

3 回答 3

7

如果您阅读产品文档,您将看到这一行:

在对文档执行任何操作之前,您需要设置许可证。每个应用程序(或流程)只需要设置一次许可证。

因此,它以过程为中心。

于 2010-03-10T11:07:20.523 回答
1

在 Aspose 的 Java 版本中,您可以通过调用检查许可证是否已设置

License.isLicenseSet();

它返回一个布尔值。请注意,这是一个静态方法。

于 2012-12-04T10:46:59.137 回答
1

我尝试创建一个可以执行此操作的 Spring bean(如下所示),但它不起作用。Spring 似乎想调用 License.setLicense(Reader) 而不是 License.setLicense(String)。我得到的错误是Failed to convert property value of type 'java.lang.String' to required type 'java.io.Reader' for property 'license'

<bean id="asposeLicense" class="com.aspose.cells.License">
    <property name="license" value="Aspose.Cells.lic" />
</bean>

然而,我确实得到了这个更通用的(Java)解决方案:

网页.xml:

<!-- does things needing doing when application starts or stops -->
<listener>
    <listener-class>
        com.xyz.listener.ApplicationStartupListener
    </listener-class>
</listener>

ApplicationStartupListener.java(新类):

package com.xyz.listener;

import java.io.InputStream;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import com.aspose.cells.License;

public class ApplicationStartupListener implements ServletContextListener {
    protected final Log logger = LogFactory.getLog(getClass());

    @Override
    public void contextInitialized(ServletContextEvent event) {
    logger.info("Initializing application context...");

    try {
        // set license for Aspose.Cells (the Excel API)
        InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream("excel/Aspose.Cells.lic");
        License license = new License();
        license.setLicense(inputStream);
        logger.info("Aspose.Cells license set? " + License.isLicenseSet());
    } catch (Exception e) {
        logger.error("Error encountered trying to set Aspose.Cells license!", e);
    }

    logger.info("Application context initialized");
    }

    @Override
    public void contextDestroyed(ServletContextEvent event) {
    }

}
于 2014-06-17T01:17:00.460 回答