FUJIFILM Business Innovation Corp. PS PPD for Chrome OS

===============================================================================
License Agreement
===============================================================================

The license agreement for this PPD file (hereinafter referred to as the PPD　FILE) is described as follows.

1. Intellectual property rights in the PPD FILE shall remain in FUJIFILM Business Innovation Corp. as well as the original copyright holders.

2. The PPD FILE can only be used with compatible FUJIFILM Business Innovation Corp. products (hereinafter referred to as the COMPATIBLE PRODUCTS) within the country of purchase of the COMPATIBLE PRODUCTS.

3. You are required to abide by the cautions and limitations (hereinafter referred to as the CAUTIONS AND LIMITATIONS) declared by FUJIFILM Business Innovation Corp. while using the PPD FILE.

4. You are not permitted to alter or modify the whole or any part of the PPD FILE.

5. You are not permitted to distribute the PPD FILE on a communication network, or transfer, sell, rent or license the PPD FILE to any third party.

6. FUJIFILM Business Innovation Corp., FUJIFILM Business Innovation Corp.’s channel partners and authorized dealers, and the original copyright holders of the PPD FILE shall not be responsible for any warranty or liability with respect to the PPD FILE.


---------------------------------------------------
Cautions and Limitations
---------------------------------------------------
* Caution for printing odd-number pages with 2-Sided Printing
   If you are printing documents with odd-number of pages, a blank page may be added to the last page depending on the settings of the operating system  (referred to as "OS" hereinafter). Some application software will automatically insert blank sheet for page adjustment according to the condition for specifying print quantities. As this behavior is a specification of the application software, it is not possible to configure this software or the device to prevent blank sheet from being inserted to the printout. The target device will print the data as it is received after it is edited and printed from the client's side according to the operating system or application software specification. If the document data to be printed consist of blank-sheet data inserted by the operating system or application software, this blank sheet will be counted as part of the print data.

* Caution for printing black and white document
   Depending on the application program, black and white document may be printed in color as black can be output in process black (C=M=Y). To prevent this, it is recommended to set [Color] to [Black & White] when printing black and white documents.


-------------------------------------------------------------------------------
Xerox, Xerox and Design, as well as Fuji Xerox and Design are registered trademarks or trademarks of Xerox Corporation in Japan and/or other countries.

Other company names and product names are trademarks or registered trademarks of the respective companies.

(C) FUJIFILM Business Innovation Corp. 2022-10-31

