Patent Description:
The proliferation of the Internet and e-commerce continues to create a vast amount of digital content. An enterprise or large corporation may include a network of managed devices distributed across multiple sites. In such a network of devices, a device manager may manage (e.g., configure and control) the devices in a local network of one of the sites. This device manager can be responsible for firmware updates, policy file distribution, or data transfers. For example, if the device manager is a printer manager, the devices can be printers, and the printer manager can be responsible for managing the printers.

A conventional printer manager typically manages printers based on, e.g., a Simple Network Management Protocol (SNMP) query, which is based on the Internet Protocol (IP) addresses of the printers. However, each printer can be assigned an IP address by a Dynamic Host Configuration Protocol (DHCP) server based on a local address pool (e.g., from a set of private IP addresses). To facilitate access to the printers in a private network, the printer manager conventionally resides within the same network, such as the same private IP subnetwork and the local area network (LAN).

However, the printer manager's responsibility is typically limited to management. The printer manager may not provide assistance to a user printing a file. The user can install device-dependent or manufacturer-dependent printer drivers to access the service of a printer. As a result, if the enterprise environment includes a large number of printers with varying capabilities, the user needs to determine which printer is suitable for the printing task. Since the user may not be aware of the capabilities of the printers and the surrounding resources, the user may not choose a suitable printer for a particular printing task.

Hence, even though a printer manager brings many desirable features to printer management, some issues remain unsolved in matching printers to print tasks based on the requirements of the tasks. <CIT> describes providing a print server including at least one processor, and a non-transitory computer-readable storage medium including instructions executable by the at least one processor. The instructions are configured to implement an application manager configured to receive a print request over a network from an application associated with a device, and a printer searcher configured to determine printer search criteria associated with the print request, search a plurality of available printers associated with a user account of a user of the application based on the determined printer search criteria, and determine a subset of available printers based on the search. <CIT> describes facilitating environmentally informed print job selection by assigning a status to each of a set of networked printers.

Embodiments not falling within the scope of the claims are exemplary only.

The following description is presented to enable any person skilled in the art to make and use the embodiments, and is provided in the context of a particular application and its requirements.

The embodiments described herein solve the problem of efficiently matching printers to print tasks by determining the requirement of a particular print task based on metadata analysis and user inputs, and providing a recommended list of printers suitable for performing the print task. This allows the user to select a printer that can perform the print task efficiently.

With existing technologies, an administrator in an enterprise environment can install device-dependent or manufacturer-dependent printer drivers on a respective computer that may access the service of a specific printer or a specific class of printers. Some operating systems can automate the process by installing the printer drivers an as-needed basis. For example, the operating system of a user device can install the printer driver when the user device initiates a print task through a network print server. Some solution providers may offer generic printer drivers that can be used for multiple manufacturers. However, even using such a driver, a user still needs to print to a specific printer. In addition, if a print task is sent outside of an enterprise environment, such as to a cloud-based printing service or a third-party printing service, a user may not retain control over how that print task is executed.

To solve this problem, embodiments described herein provide a printer recommendation system that integrates all available printing resources and guides a user in selecting a printer device based on the features of the print task. The system can provide a user interface that presents a printer recommendation listing one or more printers suitable for the print task. The system allows the enterprise environment to support rare features (e.g., large page support or binding finish) on a small number of printers and directs the users needing those features toward these printers. In this way, from a set of feasible printers, the system can guide the user to select a printer that may achieve an objective (e.g., the quickest to complete, cheapest to use, nearest location, most secure, etc.).

In some embodiments, the system can facilitate a single printer driver that can be aware of all available print resources and can guide the user to a suitable printer or an external service for a set of task features. Examples of task features include, but are not limited to, duplex printing, color, color matching, paper size, paper quality, finisher options (e.g., stapling or binding), security features (e.g., encrypted printing, encrypted hard drives, and authentication features, such as a badge or a personal identification number (PIN)). An administrator can also enable external services, such as a print shop (e.g., FedEx Office), based on web access or plug-ins. The printer driver, when installed, can limit a user's access to the available printers and/or external print services based on the privilege of the user and enterprise policies.

The administrator can define a set of policies to the system. For example, a policy can indicate the cost associated with a respective service that a respective printer provides. The costs can also be pre-calculated based on averages provided by an online service or installed with the driver. In this way, the system can support configurable printing costs. The system can also use document-specific restrictions to determine the recommendation. For example, a document may require in-person document release, print on specific sets of printers, or exclude external services. In some embodiments, the system can recommend a printer such that the features of the recommended printer are not over-provisioned. For example, if a document does not include color, the system can avoid color printers and only recommend monochrome (e.g., black-and-white) printers.

The system can be implemented on a centralized controller (e.g., a device manager) that manages a respective printer in the enterprise environment. The system can be centrally configured in the enterprise environment. The system can also operate without a centralized control. Such a deployment can be suitable for small and medium businesses, and uses decentralized mechanisms to learn the printing environment and can self-configure. The system can also be deployed as a cloud-based print service. The printer driver on a respective device then accesses the cloud-based service by logging in to the cloud-based system and learns the configurations.

<FIG> illustrates an exemplary printer recommendation system with centralized control in an enterprise environment, in accordance with an embodiment of the present application. An enterprise environment <NUM> can include a number of departments <NUM>, <NUM>, and <NUM>. The devices in enterprise environment <NUM> can be coupled to each other via a network <NUM>, such as a local or a wide area network. The wide area network can be the Internet. Each department can maintain a local area network and an Internet Protocol (IP) subnet, and may have direct connection with other departments (e.g., with point-to-point optical fiber). Department <NUM> can include multiple groups <NUM> and <NUM>, and department <NUM> can include multiple groups <NUM> and <NUM>. Each group can include user devices (e.g., workstations) and printing devices (e.g., local or network printers). For example, group <NUM> can include user device <NUM> and printer <NUM>. Furthermore, some groups can facilitate additional resources. In this example, group <NUM> can facilitate additional resources <NUM> and <NUM>. Examples of additional resources include, but are not limited to, a photocopier, a binder machine, a paper cutter, and a stationery supply closet.

With existing technologies, an administrator <NUM> in enterprise environment <NUM> can install device-dependent or manufacturer-dependent printer drivers on a respective device that may access a printer or a specific class of printers. Some operating systems can automate the process by installing the printer drivers on an as-needed basis. Suppose that user <NUM> initiates a print task <NUM> for file <NUM> from user device <NUM>. The operating system of user device <NUM> can install the printer driver when device <NUM> initiates print task <NUM> through a print server, which can run on a device manager <NUM> or on a separate network print server <NUM>. Device manager <NUM> can be responsible for managing (e.g., configuring and controlling) the devices in network environment <NUM>. The driver installed by the operating system of device <NUM> can be a generic printer driver that can be used for multiple manufacturers. However, even using such a driver, user <NUM> still needs to print to a specific printer supported by that driver. In addition, if print task <NUM> is sent outside of enterprise environment <NUM>, such as to a cloud-based printing service or a third-party service provider <NUM>, user <NUM> may not retain control over how that print task is executed.

To solve this problem, enterprise environment <NUM> can include a printer recommendation system <NUM> that integrates all available printing resources in enterprise environment <NUM> and guides user <NUM> in selecting a printer device based on the metadata of file <NUM> (e.g., monochrome document or a color image, security features, etc.) and the features of print task <NUM> (e.g., double-sided and/or stapled). System <NUM> can provide a user interface <NUM> that presents a printer recommendation listing one or more printers suitable for the print task. Interface <NUM> can be based on a graphical user interface (GUI), a web interface, a text-based interface, and a projection-based interface (e.g., a hologram interface). System <NUM> allows enterprise environment <NUM> to support rare features (e.g., large page support or binding finish) on a small number of printers (e.g., printer <NUM>). System <NUM> can guide user <NUM> to direct print task <NUM> toward printer <NUM> if print task <NUM> needs these features. Otherwise, system <NUM> can guide user <NUM> to direct print task <NUM> to another printer <NUM>, which can be closer to device <NUM>.

In this way, from a set of feasible printers, system <NUM> can guide user <NUM> to select a printer that may achieve an objective (e.g., the quickest to complete, cheapest to use, nearest location, most secure, etc.) associated with print task <NUM>. For example, if the objective is to print to a nearest location, system <NUM> can indicate in interface <NUM> that printer <NUM> is the nearest printer to device <NUM>. However, printer <NUM> may be occupied with another print task and may not be the quickest to complete. Interface <NUM> can indicate that if user <NUM> selects printer <NUM>, print task <NUM> can be completed at the earliest time. Based on these recommendations, user <NUM> can select a printer from interface <NUM>.

In some embodiments, system <NUM> can facilitate a single printer driver <NUM> that can be aware of all available print resources and can guide user <NUM> to a suitable printer or an external service for a set of task features associated with print task <NUM>. Examples of task features include, but are not limited to, duplex printing, color, color matching, paper size, paper quality, finisher options (e.g., stapling or binding), security features (e.g., encrypted printing, encrypted hard drives, and authentication features, such as a badge or a personal identification number (PIN)). Driver <NUM> can be installed on a respective device, such as devices <NUM> and <NUM>, to allow the corresponding user to access the printing resources of enterprise environment <NUM>.

Administrator <NUM> can also enable external services, such as a print shop (e.g., FedEx Office), based on web access or plug-ins. For example, service provider <NUM> can allow system <NUM> to gain access to its printers, such as printer <NUM>. As a result, if print task <NUM> is suitable for service provider <NUM> (e.g., a large number of booklet prints), interface <NUM> can recommend printer <NUM> for print task <NUM>. Printer driver <NUM>, when installed on device <NUM>, can limit user <NUM>'s access to the available printers and/or service provider <NUM> based on the privilege of user <NUM> and enterprise policies. For example, user <NUM> may only be able to access printers <NUM> and <NUM>, but not printers <NUM> and <NUM>. In addition, administrator <NUM> can define a set of policies to system <NUM>. A policy can indicate the cost associated with a respective service that a respective printer provides. These costs can also be pre-calculated based on averages provided by an online service or can be specified in driver <NUM>.

In this way, system <NUM> can support configurable printing costs. System <NUM> can also use document-specific restrictions to determine the recommendation. For example, file <NUM> may require an in-person document release (e.g., user <NUM> needs to be present at the printer), print on specific sets of printers (e.g., only on printers <NUM> and <NUM>), or exclude external services (e.g., service provider <NUM>). In some embodiments, system <NUM> can recommend a printer such that the features of the recommended printer are not over-provisioned. If file <NUM> does not include color, system <NUM> can avoid color printers and only recommend monochrome printers.

When driver <NUM> learns of printer <NUM>, driver <NUM> can communicate with printer <NUM> to learn features of printer <NUM>. Driver <NUM> can use Internet Printing Protocol (IPP) or Simple Network Management Protocol (SNMP) to query printer <NUM>. Driver <NUM> may use make-/model-specific mechanisms to learn about non-standardized features. If a third-party printer driver is available for printer <NUM>, system <NUM> can analyze that driver to learn about the proprietary features of printer <NUM>. System <NUM> then creates a profile for printer <NUM> that includes the features. If administrator <NUM> has provided a cost-related policy for printer <NUM>, the profile can also include costs associated with each feature. System <NUM> may store the profile in an entry of printer database <NUM>.

In some embodiments, system <NUM> can obtain proximity information for printer <NUM> and determine how close printer <NUM> is to device <NUM>. System <NUM> may obtain the proximity information from location information of device <NUM> (e.g., from user <NUM> or a configuration file indicating device <NUM>'s location) or a policy defined by administrator <NUM>. This allows system <NUM> to offer features and printers based on proximity in addition to other objectives, such as cost or speed. User <NUM> may select from a set of default print job features, such as paper size, duplex printing, color/monochrome printing, paper quality, etc. System <NUM> can also determine default settings from location. For example, system <NUM> can set "letter" as the default paper size in the U. and A4 as the default paper size in Asia.

In some embodiments, system <NUM> can support third-party web services and plug-ins. Third-party service provider <NUM> can create printer profiles with available features and cost information. These printer profiles can also include a mechanism to determine the current task schedule and load on a printer, such as printer <NUM>, of provider <NUM>. Provider <NUM> can also supply provider information, such as location and delivery information (e.g., the location of a nearby print shop associated with provider <NUM>). System <NUM> can use the plug-in to retrieve the printer profiles and provider information. Typically, printer <NUM> of provider <NUM> can rank low in the printer recommendation list due to the inconvenience of printing outside of enterprise environment <NUM>. However, if print task <NUM> includes printing <NUM> photo-quality images on <NUM>-by-<NUM> photo sheets or printing <NUM> bound copies of a booklet, system <NUM> may determine that provider <NUM> can efficiently and cost-effectively complete print task <NUM>. System <NUM> can then present printer <NUM> as the recommended printer for print task <NUM>.

System <NUM> can run on device manager <NUM>, which can operate as a centralized controller that manages a respective printer in enterprise environment <NUM>. Administrator <NUM> can centrally configure system <NUM> on device manager <NUM>. In this centrally controlled implementation, driver <NUM> can learn about the available printers via mechanisms allowed by the enterprise policies. System <NUM> can obtain the policies in one or more ways. For example, the policies can be set locally when driver <NUM> is installed, learned as an operating system policy, or set via an external system, such as a cloud system. Administrator <NUM> can install an agent on device manager <NUM> that discovers a respective printer in enterprise environment <NUM> and stores a printer profile of a respective discovered printer in a printer database <NUM>. The printer profile of a printer can include the printer's properties and capabilities (e.g., whether the printer supports double-sided printing or auto-stapling). Hence, individual devices do not need to generate printer profiles.

System <NUM> can also operate without a centralized control. <FIG> illustrates an exemplary printer recommendation system with decentralized control in an enterprise environment, in accordance with an embodiment of the present application. In this example, system <NUM> can be distributed across the user devices in enterprise environment <NUM>. A respective user device can run an instance of system <NUM>. Such a deployment can be suitable for small and medium businesses. System <NUM> can use decentralized mechanisms to learn the printing environment within enterprise environment <NUM> and self-configure accordingly. Each device running an instance of system <NUM> can maintain a copy of printer database <NUM>. Printer database <NUM> can be hosted on a specific device, such as device <NUM>. The instances of system <NUM> can then query printer database <NUM> on device <NUM>.

In this decentralized implementation, printer driver <NUM> can discover the available printers in enterprise environment <NUM> using a number of techniques. For example, system <NUM> can obtain a list of installed printers on the operating system of a respective user device (e.g., devices <NUM> and <NUM>) and provide the list to driver <NUM>. System <NUM> can also query network print server <NUM> to obtain a list of network printers in enterprise environment <NUM>. Furthermore, system <NUM> can deploy one or more network discovery mechanisms, such as Bonjour® and multicast discovery (e.g., Multicast Listener Discovery). System <NUM> can also actively scan network <NUM> (e.g., by sending discovery packets) and determine the presence of a new printer. Administrator <NUM> can also provide the configuration of a printer to system <NUM>. Among these mechanisms, administrator <NUM> may select one or more mechanisms for the printer discovery in the decentralized deployment.

System <NUM> can also be deployed as a cloud-based print service. <FIG> illustrates an exemplary cloud-based printer recommendation system for an enterprise environment, in accordance with an embodiment of the present application. The printer driver on a respective device can access the cloud-based service by logging in to the cloud-based system and learns the configurations. System <NUM> can operate from a cloud environment <NUM> (e.g., on a cloud server <NUM>). Cloud environment <NUM> can also host printer database <NUM>. In some embodiments, system <NUM> can be associated with a domain name and/or IP address <NUM>. System <NUM> can be accessed from enterprise environment <NUM> using domain name and/or IP address <NUM>.

A respective user device, such as devices <NUM> and <NUM>, can run an instance of driver <NUM>. To initiate print task <NUM>, for example, the instance of driver <NUM> on device <NUM> can log in to system <NUM>. System <NUM> can use the login information to automatically configure the operating system of device <NUM>. For example, system <NUM> can configure the operating system of device <NUM> with preferences set by administrator <NUM> or user <NUM> when the cloud service is enabled on device <NUM>. A local agent <NUM> can discover the printers in enterprise environment <NUM>. To do so, local agent <NUM> can deploy the discovery mechanism described in conjunction with <FIG> and <FIG>. Based on the discovery, local agent <NUM> can populate printer database <NUM> hosted in cloud environment <NUM>.

<FIG> illustrates an exemplary printer recommendation process, in accordance with an embodiment of the present application. During operation, when user <NUM> initiates print task <NUM> for file <NUM> (i.e., begins printing file <NUM>), system <NUM> obtain metadata <NUM> associated with file <NUM> (e.g., whether file <NUM> is a colored document, and/or requires an in-person security clearance for printing) and classifies file <NUM> using a set of default properties. The default properties can indicate typical printing features, such as monochrome/color printing, page size, finishing options (e.g., double-sided, stapled, etc.), and print quality (e.g., high resolution, economy printing, etc.). In addition, administrator <NUM> can use a configuration interface <NUM> provided by system <NUM> to define a policy <NUM>. Administrator <NUM> can access interface <NUM> using administrative credentials. Interface <NUM> can be based on a GUI, a web interface, a text-based interface, and a projection-based interface (e.g., a hologram interface).

Policy <NUM> specifies the unit cost of using a printer using a specific set of features. For example, the cost of color printing can be higher than that of monochrome printing. Similarly, the per-page cost of printing single-sided pages can be higher than that of printing double-sided pages. In this way, policy <NUM> can facilitate configurable printing costs. Furthermore, policy <NUM> can also define how close a printer is to a user device. In other words, policy <NUM> can specify proximity information of a printer with respect to one or more user devices. This allows system <NUM> to recommend features and printers based on proximity in addition to other objectives, such as cost or print speed.

System <NUM> then selects the most appropriate set of default properties for print task <NUM> based on metadata <NUM> and policy <NUM>. System <NUM> provides the selection as initial printer recommendation <NUM> in interface <NUM>. Printer recommendation <NUM> can also indicate whether a printer is unavailable due to a permanent constraint or temporarily unavailable due to a correctable constraint (e.g. a printer is out of legal-size paper but is capable of such printing). User <NUM> may then provide an input <NUM> with additional features for print task <NUM> (e.g., spiral binding, booklet printing, etc.). Input <NUM> can also specify the document type of file <NUM> (e.g., an image, a word processing file, etc.) and a printing preference of user <NUM> (e.g., double-sided printing with stapling). If a newly provided feature in input <NUM> affects the speed or cost of print task <NUM>, system <NUM> updates the recommendation accordingly and displays updated printer recommendation <NUM> in interface <NUM>.

Printer recommendation <NUM> and/or <NUM> shows, for a respective recommended printer, a ranking <NUM>, a printer name/identifier <NUM>, a reasoning <NUM> for selecting the printer, and cost/time <NUM> needed to complete print task <NUM> on that printer. Ranking <NUM> indicates a ranking of which printer can be most suitable for print task <NUM>. Printer name/identifier <NUM> can help user <NUM> to identify a printer. For example, user <NUM> may recognize that a recommended printer <NUM> is a nearby printer from printer name/identifier <NUM>. Reasoning <NUM> can indicate an objective, such as the quickest to complete, cheapest to use, nearest location, most secure to use, etc. Cost/time <NUM> can indicate how much a print task <NUM> may cost and how long it may take to complete print task <NUM> if a particular printer is selected. For example, if printer <NUM> is selected, it may cost more since it is a printer at a third-party location. Based on these pieces of information, user <NUM> can then make a final selection <NUM> from interface <NUM>.

Based on selection <NUM>, system <NUM> can send print task <NUM> to the selected printer (e.g., a printer from printers <NUM>, <NUM>, <NUM>, and <NUM>). In this way, regardless of the deployment, system <NUM> can maintain the information associated with available local, network, and external print services. System <NUM> can provide user interface <NUM> that can present such information to user <NUM>. Based on user selection <NUM> and metadata <NUM>, interface <NUM> can recommend the best way to print file <NUM>. The "best way" can correspond to one or more objectives, such as print speed, quality, price, or convenience.

<FIG> illustrates an exemplary repository of printer information, in accordance with an embodiment of the present application. Printer database <NUM> includes a printer information table <NUM>. A respective entry of table <NUM> can include a printer identifier <NUM>, a printer profile <NUM>, a policy <NUM>, and supplemental information <NUM>. Printer identifier <NUM> can uniquely identify a printer accessible by a device in enterprise environment <NUM>. For example, printers <NUM>, <NUM>, and <NUM> can be uniquely identified by identifiers <NUM>, <NUM>, and <NUM>, respectively. Printer profile <NUM> can include both intrinsic and extrinsic capabilities of a printer. Intrinsic capabilities include features that may be automatically applied to a print task during the print operation, such as duplex, color, paper size, printing speed, etc. Extrinsic capabilities include other services, such as binding, non-standard paper stock, and other features.

Policy <NUM> can indicate the proximity (e.g., based on printer location) and cost associated with a printer. Supplemental information <NUM> can include nearby features and resources of a printer. A printer, for example, can be in a room with a spiral binding machine that the user may operate. An entry corresponding to printer <NUM> can map identifier <NUM> to its capabilities (e.g., color printing, double-sided printing, stapled finishing), a corresponding policy (e.g., $<NUM> per page and the location of printer <NUM>), and resources <NUM> and <NUM> available near printer <NUM>. Another entry corresponding to printer <NUM> can map identifier <NUM> to its capabilities (e.g., monochrome printing) and policy (e.g., free printing and the location of printer <NUM>). Printer <NUM> may not have any supplemental information. Similarly, an entry corresponding to printer <NUM> can map identifier <NUM> to its capabilities (e.g., color printing, double-sided printing, large pages), a corresponding policy (e.g., $<NUM> per page, <NUM> hour turn-around time, and one day delivery), and additional resources, such as binding service. Supplemental information <NUM> of printer <NUM> can also indicate it's a printer of provider <NUM>.

<FIG> presents a flowchart <NUM> illustrating a method of a printer recommendation system discovering printers accessible from an enterprise environment, in accordance with an embodiment of the present application. During operation, the system scans for a new printer accessible from the enterprise environment (operation <NUM>). The system can use cloud-based information, a plug-in, or one or more discovery mechanisms to scan for the new printer. These scanning mechanisms can operate as the information source for a new printer. The system checks whether a new printer is detected (operation <NUM>). If a new printer is detected, the system determines printer information (e.g., intrinsic and extrinsic capabilities of the printer) from the information source (operation <NUM>). The system can then allocate an identifier for the printer and create an entry comprising the identifier in the printer information table (operation <NUM>).

The system analyzes the location of the printer to determine supplemental information (operation <NUM>). For example, if the printer is in a room with a spiral binding machine, which is relevant to print tasks, the system can indicate the presence of the spiral binding machine in the supplemental information. Similarly, if the printer is a third-party service provider printer, the system can indicate the other print-related services supported by the provider. The system then stores the printer information and supplemental information, if any, in the entry in association with the identifier (operation <NUM>). The system can present a configuration interface to an administrator upon verification of associated administrative credentials (operation <NUM>).

The system can obtain a policy via the configuration interface, if provided, and store the policy in the entry in association with the identifier (operation <NUM>). On the other hand, if a new printer is not detected (operation <NUM>) or upon storing the policy in the entry (operation <NUM>), the system checks whether the scan operation is complete (operation <NUM>). The system can determine that the scan operation is complete based on one or more of: expiration of a timer, completion of searching in a respective subnet in the enterprise environment, and completion of the discovery operations (e.g., searching within and outside of the enterprise environment). If the scan is not complete, the system can continue to scan for a new printer accessible from the enterprise environment (operation <NUM>).

<FIG> presents a flowchart <NUM> illustrating a method of a printer recommendation system processing a print task based on a printer recommendation, in accordance with an embodiment of the present application. During operation, the system receives a print request for a file from a user (operation <NUM>), and determines metadata associated with the file and generates a preliminary printer recommendation based on the metadata and the default features (operation <NUM>). The system can present a user interface to the user with the preliminary printer recommendation (operation <NUM>). The system then receives input from the user via the user interface (operation <NUM>). The user input can include additional features of the file and printing preferences of the user.

The system updates the preliminary printer recommendation based on the user input and presents the updated printer recommendation in the user interface (operation <NUM>). The system then receives a selection from the user via the user interface (operation <NUM>). It should be noted that the user may select a printer ranked low in the printer recommendation. The system then sends the print task to the selected printer (operation <NUM>).

<FIG> presents a flowchart <NUM> illustrating a method of a printer recommendation system generating a printer recommendation for processing a print task, in accordance with an embodiment of the present application. During operation, the system searches the printer database based on the metadata and the printing features (operation <NUM>). If the recommendation is a preliminary recommendation, the features can be default features of the printers, and if the recommendation is an updated recommendation, the features can include input from the user. The system then determines an objective associated with the print task and identifies the printers that satisfy the objective from the printer database (operation <NUM>). The system can determine the objective based on a default preference of the user or an enterprise policy.

The system then ranks the identified printers with respect to the objective (operation <NUM>). For example, if the objective is the fastest printing, the ranking can list the printers in ascending order of the estimated time to finish the print task (e.g., the fastest printer at the top of the list). The system then selects a predetermined number of top-ranked printers (operation <NUM>). The predetermined number can be specific to a user, a type of print task, or the enterprise, and configured by an administrator. The system then generates a recommended list of printers comprising the selected printers (operation <NUM>). For a respective printer, the list can specify a rank, a name/identifier of the printer, the reasoning for recommending the printer, and cost/time information for the print task. The system then presents the recommended list as the printer recommendation in the user interface (operation <NUM>).

<FIG> presents a flowchart <NUM> illustrating a method of a printer recommendation system ranking the printers for a print task, in accordance with an embodiment of the present application. During operation, the system determines weights for printer information, policy, and supplemental information with respect to the objective of the print task (operation <NUM>). The system selects a printer from the printer database (operation <NUM>) and determines whether the printer is available (operation <NUM>). The printer can be unavailable due a permanent issue (e.g., a mechanical or electrical fault in the printer) or a temporary issue (e.g., the printer is out of paper). If the printer is available, the system also checks whether the printer is feasible (operation <NUM>). A printer can be infeasible if the printer does not support the type of features needed for the print task (e.g., a printer may not support color printing).

If the printer is available and feasible, the system determines the cost and/or the task-completion time for the print task based on the metadata and/or user-provided information (operation <NUM>) and calculates a weight for the printer based on the determined information (operation <NUM>). The metadata can include information about the file, such as the type of the file (e.g., color or monochrome), the number of pages in the file, and the type of content in the file (e.g., image or text). If the printer is not available or feasible (operation <NUM> or <NUM>), or upon calculating the weight of the printer (operation <NUM>), the system determines whether all printers have been checked (operation <NUM>). If all printers have not been checked, the system continues to select the next printer from the printer database (operation <NUM>). Otherwise, the system sorts the list of available and feasible printers based on the corresponding weights (operation <NUM>).

<FIG> illustrates an exemplary computer system that facilitates a printer recommendation system for an enterprise environment, in accordance with an embodiment of the present application. Computer system <NUM> includes a processor <NUM>, a memory device <NUM>, and a storage device <NUM>. Memory device <NUM> can include a volatile memory device (e.g., a dual in-line memory module (DIMM)). Furthermore, computer system <NUM> can be coupled to a display device <NUM>, a keyboard <NUM>, and a pointing device <NUM>. Storage device <NUM> can store an operating system <NUM>, a printer recommendation system <NUM>, and data <NUM>. Printer recommendation system <NUM> can be implemented using centralized, decentralized, and/or cloud-based deployments.

Printer recommendation system <NUM> can include instructions, which when executed by computer system <NUM> can cause computer system <NUM> to perform methods and/or processes described in this disclosure. Specifically, printer recommendation system <NUM> can include instructions for discovering a respective printer accessible from the enterprise environment (discovery module <NUM>). Printer recommendation system <NUM> can also include instructions for determining metadata of a file associated with a print task (task module <NUM>). Furthermore, printer recommendation system <NUM> can also include instructions for determining print features associated with the print task (task module <NUM>). In addition, printer recommendation system <NUM> can include instructions for executing the print task on a selected module (task module <NUM>).

Moreover, printer recommendation system <NUM> can also include instructions for presenting a user interface and a configuration interface (interface module <NUM>). Printer recommendation system <NUM> can include instructions for determining a printer recommendation associated with the print task (recommendation module <NUM>). Printer recommendation system <NUM> can further include instructions for obtaining user input and selection for the print task (recommendation module <NUM>). Printer recommendation system <NUM> can also include instructions for obtaining cloud-based and/or third-party service provider information based on cloud sources and/or plug-ins (external information module <NUM>). Printer recommendation system <NUM> may further include instructions for sending and receiving messages (communication module <NUM>). Data <NUM> can include any data that can facilitate the operations of printer recommendation system <NUM>.

<FIG> illustrates an exemplary apparatus that facilitates a printer recommendation system for an enterprise environment, in accordance with an embodiment of the present application. Printer recommendation apparatus <NUM> can comprise a plurality of units or apparatuses which may communicate with one another via a wired, wireless, quantum light, or electrical communication channel. Apparatus <NUM> may be realized using one or more integrated circuits, and may include fewer or more units or apparatuses than those shown in <FIG>. Further, apparatus <NUM> may be integrated in a computer system, or realized as a separate device that is capable of communicating with other computer systems and/or devices. Specifically, apparatus <NUM> can comprise units <NUM>-<NUM>, which perform functions or operations similar to modules <NUM>-<NUM> of computer system <NUM> of <FIG>, including: a discovery unit <NUM>; a task unit <NUM>; an interface unit <NUM>; a recommendation unit <NUM>; an external information unit <NUM>; and a communication unit <NUM>.

The data structures and code described in this detailed description are typically stored on a computer-readable storage medium, which may be any device or medium that can store code and/or data for use by a computer system. The computer-readable storage medium includes, but is not limited to, volatile memory, non-volatile memory, magnetic and optical storage devices such as disks, magnetic tape, CDs (compact discs), DVDs (digital versatile discs or digital video discs), or other media capable of storing computer-readable media now known or later developed.

The methods and processes described in the detailed description section can be embodied as code and/or data, which can be stored in a computer-readable storage medium as described above. When a computer system reads and executes the code and/or data stored on the computer-readable storage medium, the computer system performs the methods and processes embodied as data structures and code and stored within the computer-readable storage medium.

Claim 1:
A method for facilitating a printer recommendation in an enterprise environment, comprising:
discovering a respective printer accessible from the enterprise environment based on a discovery mechanism;
determining information associated with the respective printer accessible from the enterprise environment;
determining (<NUM>) supplemental information associated with the respective printer by analyzing a location of the printer, including discovering print-related resources within a predetermined proximity of the discovered printer;
in response to the discovery of the printer, obtaining, via a user interface, a policy dictating printing options associated with the printer;
storing the information, the supplemental information, and the policy associated with the discovered printer in a printer database in association with an identifier of the discovered printer;
receiving, from user device (<NUM>) in the enterprise environment, a print task (<NUM>) for a file (<NUM>);
determining (<NUM>), based on information associated with the print task, metadata associated with the file, an objective, and a set of features of the print task;
determining (<NUM>) weights for the printer information, the policy and the supplemental information with respect to the objective;
determining, from the printer database, a list of printers accessible from the enterprise environment based on the metadata associated with the file, the features of the file, and the policy associated with a respective printer in the list of printers, wherein a respective printer in the list of printers is available and feasible for the print task;
calculating (<NUM>) a weight for each printer in the list of printers based on the determined weights from for the printer information, the policy and the supplemental information;
ranking the list of printers with respect to an objective of the print task based on the calculated weights; and
presenting the ranked list as a printer recommendation for the print task in the user interface to the user.