[cups-devel] how to get supported media information for a particular printer

My Sadhukhan psadhukhan at gmail.com
Tue Aug 8 23:03:55 PDT 2017


Any feedback on this? Why this is not working in this version?
Problem is we work on a library which can be installed in different
platforms (like windows, linux, mac etc) and we cannot ask/ensure that
customer is using only the latest cups (2.2.4?, even latest ubuntu 17.04
does not have it, I guess). Since ppd api is deprecated in 1.6, these are
the only alternative non-ppd api, so if cups-users like us are asked to
migrate to non-ppd apis, then these should be working in these above
versions.

Regards
Prasanta

On Thu, Aug 3, 2017 at 11:48 AM, My Sadhukhan <psadhukhan at gmail.com> wrote:

> I also tried with cups 2.2.0 with ubuntu16.10 and there also the
> cupsCheckDestSupported returns false for all options.
>
> On Thu, Aug 3, 2017 at 11:41 AM, My Sadhukhan <psadhukhan at gmail.com>
> wrote:
>
>> I am using cups 2.1.3 that comes with ubuntu16.04. It should support the
>> non-ppd APIs, I guess, as that was deprecated from 1.6 onwards.
>> Please let me know if this version has any problem regarding the APIs I
>> am using.
>>
>> Regards
>> Prasanta
>>
>> On Wed, Aug 2, 2017 at 6:45 PM, Michael Sweet <msweet at apple.com> wrote:
>>
>>> What version of CUPS are you using?
>>>
>>> (there have been a number of bug fixes over the years...)
>>>
>>> > On Aug 2, 2017, at 1:17 AM, My Sadhukhan <psadhukhan at gmail.com> wrote:
>>> >
>>> > I checked cupsCheckDestSupported() before calling
>>> cupsFIndDestSupported()
>>> > for options like CUPS_COPIES,CUPS_FINISHINGS,CU
>>> PS_MEDIA,CUPS_ORIENTATION,
>>> > CUPS_SIDES etc and all of them return false,
>>> > although the printer being queried is a MFP and supports duplex,
>>> > orientation etc and I can print a test-page out of it.
>>> > Is it a bug in cups or am I missing calling/initialising something?
>>> >
>>> > Regards
>>> > Prasanta
>>> >
>>> > On Tue, Aug 1, 2017 at 10:56 AM, My Sadhukhan <psadhukhan at gmail.com>
>>> wrote:
>>> >
>>> >> Thanks Michael.
>>> >> I used cupsGetNamedDest to initialise cups_dest_t but it still fails
>>> in
>>> >> cupsFindDestSupported().
>>> >> ----------
>>> >> void getMedia(char *name)
>>> >> {
>>> >>    cups_dest_t *dest = cupsGetNamedDest(CUPS_HTTP_DEFAULT, name,
>>> NULL);
>>> >>    if (dest == NULL) {
>>> >>        printf("cupsGetNamedDest failed %s\n", cupsLastErrorString());
>>> >>        return;
>>> >>    } else {
>>> >>        printf("dest name %s\n", dest->name);
>>> >>    }
>>> >>    cups_dinfo_t *info = cupsCopyDestInfo(CUPS_HTTP_DEFAULT, dest);
>>> >>    if (info == NULL) {
>>> >>        printf("CopyDestInfo Request failed %s\n",
>>> cupsLastErrorString());
>>> >>    }
>>> >>    ipp_attribute_t *media = cupsFindDestSupported(CUPS_HTTP_DEFAULT,
>>> >>                              dest, info, CUPS_MEDIA);
>>> >>    if (media != NULL) {
>>> >>        int i, count = ippGetCount(media);
>>> >>        printf("count %d\n", count);
>>> >>        for (i = 0; i < count; i++)
>>> >>            printf(" %s\n", ippGetString(media, i, NULL));
>>> >>    } else {
>>> >>        printf("FindDestSupported Request failed %s\n",
>>> >> cupsLastErrorString());
>>> >>    }
>>> >> }
>>> >>
>>> >> ----------------------------citing----------
>>> >> dest name Ricoh-Aficio-MP-5002
>>> >> CopyDestInfo Request failed successful-ok
>>> >> FindDestSupported Request failed Invalid argument
>>> >> ----------------
>>> >> I am not sure if cupsCopyDestInfo() failed or not . The manual does
>>> not
>>> >> say the return value if there is error. cupsGetLastErrorString()
>>> conveys
>>> >> there is no error yet "info" is NULL.
>>> >>
>>> >> Could you please suggest as to what else is going wrong?
>>> >> I could not find "_cups_dinfo_s" structure definition in
>>> >> https://www.cups.org/doc/cupspm.html#cups_dinfo_t.
>>> >> Also, cupsFindDestSupported() manual shows "Find the default value(s)
>>> for
>>> >> the given option." which is same as cupsFindDestDefault(). I think the
>>> >> former should be texted as "Find supported value(s) for the given
>>> option".
>>> >>
>>> >> Regards
>>> >> Prasanta
>>> >>
>>> >> On Mon, Jul 31, 2017 at 7:11 PM, Michael Sweet <msweet at apple.com>
>>> wrote:
>>> >>
>>> >>> You can't initialize a cups_dest_t structure directly like that and
>>> have
>>> >>> it work.
>>> >>>
>>> >>> Use:
>>> >>>
>>> >>>    cups_dest_t *dest = cupsGetNamedDest(CUPS_HTTP_DEFAULT, name,
>>> NULL);
>>> >>>
>>> >>> Then cupsCopyDestInfo will have the information it needs to get the
>>> >>> supported media for you...
>>> >>>
>>> >>>
>>> >>>> On Jul 31, 2017, at 6:01 AM, My Sadhukhan <psadhukhan at gmail.com>
>>> wrote:
>>> >>>>
>>> >>>> Hi All,
>>> >>>>
>>> >>>> I was trying to find the supported media for a particular printer
>>> using
>>> >>>> non-ppd based API but am encountering a problem.
>>> >>>>
>>> >>>>
>>> >>>>
>>> >>>>
>>> >>>>
>>> >>>>
>>> >>>>
>>> >>>>
>>> >>>>
>>> >>>>
>>> >>>>
>>> >>>>
>>> >>>>
>>> >>>>
>>> >>>>
>>> >>>>
>>> >>>>
>>> >>>>
>>> >>>>
>>> >>>>
>>> >>>>
>>> >>>>
>>> >>>>
>>> >>>>
>>> >>>>
>>> >>>> *void getMedia(char *name){    cups_dest_t dest;    dest.name
>>> >>>> <http://dest.name> = name;    dest.instance = name;
>>> dest.is_default
>>> >>> =
>>> >>>> 0;    cups_dinfo_t *info = cupsCopyDestInfo(CUPS_HTTP_DEFAULT,
>>> &dest);;
>>> >>>> if (info == NULL) {        printf("CopyDestInfo Request failed
>>> %s\n",
>>> >>>> cupsLastErrorString());    }    ipp_attribute_t *media =
>>> >>>> cupsFindDestSupported(CUPS_HTTP_DEFAULT,
>>> >>>> &dest, info, CUPS_MEDIA);    if (media != NULL) {        int i,
>>> count =
>>> >>>> ippGetCount(media);        printf("count %d\n", count);        for
>>> (i =
>>> >>> 0;
>>> >>>> i < count; i++)            printf(" %s\n", ippGetString(media, i,
>>> >>>> NULL));    } else {        printf("FindDestSupported Request failed
>>> >>> %s\n",
>>> >>>> cupsLastErrorString());    }}int main(void){
>>> >>>> getMedia("Ricoh-Aficio-MP-5002");*
>>> >>>> *}*
>>> >>>>
>>> >>>> I am getting
>>> >>>> -----------
>>> >>>> CopyDestInfo Request failed (null)
>>> >>>> FindDestSupported Request failed Invalid argument
>>> >>>> -----------
>>> >>>>
>>> >>>> Earlier, I was using
>>> >>>> char filename = cupsGetPPD("Ricoh-Aficio-MP-5002");
>>> >>>> ppd_file_t *ppd = ppdOpenFile(filename);
>>> >>>> ppd_option_t *optionPage = ppdFindOption(ppd, "PageSize") and get
>>> >>>> optionPage->choices->text
>>> >>>> to get the below supported media size information obtained from that
>>> >>>> printer ppd.
>>> >>>> That is, in* /etc/cups/ppd/Ricoh-Aficio-MP-5002.ppd*,
>>> >>>> I have this and I am interested in getting "A3", "A4", "A5", "A6",
>>> "B4",
>>> >>>> "B5"..."EngQuatro.FullBleed" etc.
>>> >>>>
>>> >>>> but now, since ppd API is deprecated, I want to use the new
>>> IPP-based
>>> >>> api.
>>> >>>>
>>> >>>> Could anyone suggest what I need to use in above code?
>>> >>>>
>>> >>>> *%========== Information About Media Sizes ==========
>>> >>>>
>>> >>>> *DefaultImageableArea: A4
>>> >>>> *ImageableArea A3/A3: "12 12 830 1179"
>>> >>>> *ImageableArea A4/A4: "12 12 583 830"
>>> >>>> *ImageableArea A5/A5: "12 12 408 583"
>>> >>>> *ImageableArea A6/A6: "12 12 285 408"
>>> >>>> *ImageableArea B4/B4 (JIS): "12 12 717 1020"
>>> >>>> *ImageableArea B5/B5 (JIS): "12 12 504 717"
>>> >>>> *ImageableArea B6/B6 (JIS): "12 12 351 504"
>>> >>>> *ImageableArea Legal/Legal: "12 12 600 996"
>>> >>>> *ImageableArea GovernmentLG/8.25x14: "12 12 582 996"
>>> >>>> *ImageableArea EngQuatro/8x10: "12 12 564 708"
>>> >>>> *ImageableArea GLT/8x10.5: "12 12 564 744"
>>> >>>> *ImageableArea Letter/Letter: "12 12 600 780"
>>> >>>> *ImageableArea Statement/5.5x8.5: "12 12 384 600"
>>> >>>> *ImageableArea F/8x13: "12 12 564 924"
>>> >>>> *ImageableArea Folio/8.25x13: "12 12 583 923"
>>> >>>> *ImageableArea FanFoldGermanLegal/8.5x13: "12 12 600 924"
>>> >>>> *ImageableArea Tabloid/11x17: "12 12 780 1212"
>>> >>>> *ImageableArea 12x18/12x18: "12 12 852 1284"
>>> >>>> *ImageableArea 11x15/11x15: "12 12 780 1068"
>>> >>>> *ImageableArea 10x14/10x14: "12 12 708 996"
>>> >>>> *ImageableArea 10x15/10x15: "12 12 708 1068"
>>> >>>> *ImageableArea 11x14/11x14: "12 12 780 996"
>>> >>>> *ImageableArea Executive/Executive: "12 12 510 744"
>>> >>>> *ImageableArea Env10/Com10 Env.: "12 12 285 672"
>>> >>>> *ImageableArea EnvMonarch/Monarch Env.: "12 12 267 528"
>>> >>>> *ImageableArea EnvC5/C5 Env.: "12 12 447 637"
>>> >>>> *ImageableArea EnvC6/C6 Env.: "12 12 311 447"
>>> >>>> *ImageableArea DLEnv/DL Env.: "12 12 299 611"
>>> >>>> *ImageableArea 8Kai/8K: "12 12 745 1094"
>>> >>>> *ImageableArea 16Kai/16K: "12 12 541 745"
>>> >>>> *ImageableArea A3.FullBleed/A3 (Full Bleed): "0 0 842 1190"
>>> >>>> *ImageableArea A4.FullBleed/A4 (Full Bleed): "0 0 595 841"
>>> >>>> *ImageableArea A5.FullBleed/A5 (Full Bleed): "0 0 420 594"
>>> >>>> *ImageableArea A6.FullBleed/A6 (Full Bleed): "0 0 297 419"
>>> >>>> *ImageableArea B4.FullBleed/B4 (JIS) (Full Bleed): "0 0 729 1031"
>>> >>>> *ImageableArea B5.FullBleed/B5 (JIS) (Full Bleed): "0 0 516 728"
>>> >>>> *ImageableArea B6.FullBleed/B6 (JIS) (Full Bleed): "0 0 363 515"
>>> >>>> *ImageableArea Legal.FullBleed/Legal (Full Bleed): "0 0 612 1007"
>>> >>>> *ImageableArea GovernmentLG.FullBleed/8.25x14 (Full Bleed): "0 0 594
>>> >>> 1007"
>>> >>>> *ImageableArea EngQuatro.FullBleed/8x10 (Full Bleed): "0 0 576 719"
>>> >>>> ...
>>> >>>> ..
>>> >>>>
>>> >>>> Thanks & Regards
>>> >>>> Prasanta
>>> >>>> _______________________________________________
>>> >>>> cups-devel mailing list
>>> >>>> cups-devel at cups.org
>>> >>>> https://lists.cups.org/mailman/listinfo/cups-devel
>>> >>>
>>> >>> _________________________________________________________
>>> >>> Michael Sweet, Senior Printing System Engineer
>>> >>>
>>> >>> _______________________________________________
>>> >>> cups-devel mailing list
>>> >>> cups-devel at cups.org
>>> >>> https://lists.cups.org/mailman/listinfo/cups-devel
>>> >>>
>>> >>
>>> >>
>>> > _______________________________________________
>>> > cups-devel mailing list
>>> > cups-devel at cups.org
>>> > https://lists.cups.org/mailman/listinfo/cups-devel
>>>
>>> _________________________________________________________
>>> Michael Sweet, Senior Printing System Engineer
>>>
>>> _______________________________________________
>>> cups-devel mailing list
>>> cups-devel at cups.org
>>> https://lists.cups.org/mailman/listinfo/cups-devel
>>>
>>
>>
>


More information about the cups-devel mailing list