Note that the article in which dowski and Panos pointed out ( MSDN Win32_Printer ) may be a little misleading.
I mean the first value of most arrays. some start with 1, and some start with 0. for example, the first value of "ExtendedPrinterStatus" in the table is 1, so your array should look something like this:
string[] arrExtendedPrinterStatus = { "","Other", "Unknown", "Idle", "Printing", "Warming Up", "Stopped Printing", "Offline", "Paused", "Error", "Busy", "Not Available", "Waiting", "Processing", "Initialization", "Power Save", "Pending Deletion", "I/O Active", "Manual Feed" };
and on the other hand, the first ErrorState value in the table is 0, so your array should be something like this:
string[] arrErrorState = { "Unknown", "Other", "No Error", "Low Paper", "No Paper", "Low Toner", "No Toner", "Door Open", "Jammed", "Offline", "Service Requested", "Output Bin Full" };
BTW, "PrinterState" is deprecated, but you can use "PrinterStatus".