{
    "content": [
        {
            "type": "text",
            "text": "# pamtojpeg2k (man)\n\n## NAME\n\npamtojpeg2k - convert PAM/PNM image to a JPEG-2000 code stream\n\n## SYNOPSIS\n\npamtojpeg2k  [-imgareatlx=column]  [-imgareatly=row]  [-tilegrdtlx=column]  [-tilegrdtly=row]\n[-tilewidth=columns]   [-tileheight=rows]   [-prcwidth=columns]   [-prcheight=rows]   [-cblk‐\nwidth=columns]     [-cblkheight=rows]     [-mode={integer|int|real}]     [-compression=ratio]\n[-size=bytes]  [-ilyrrates=[realnumber[,realnumber,  ...]]    [-numrlvls=number]   [-progres‐\nsion={lrcp|rlcp|rpcl|pcrl|cprl}] [-numgbits=number] [-nomct] [-sop] [-eph] [-lazy] [-termall]\n[-segsym] [-vcausal] [-pterm] [-resetprob] [-verbose] [-debuglevel=number] filename\nMinimum  unique  abbreviation of option is acceptable.  You may use double hyphens instead of\nsingle hyphen to denote options.  You may use white space in place of the equals sign to sep‐\narate an option name from its value.\n\n## DESCRIPTION\n\nThis program is part of Netpbm(1).\n\n## Sections\n\n- **NAME**\n- **SYNOPSIS**\n- **DESCRIPTION**\n- **OPTIONS** (31 subsections)\n- **EXAMPLES**\n- **ABOUT JPEG-2000**\n- **SEE ALSO**\n- **HISTORY**\n- **DOCUMENT SOURCE**\n\nUse structuredContent.sections for detailed options, examples, and full documentation.\n"
        }
    ],
    "structuredContent": {
        "command": "pamtojpeg2k",
        "section": "",
        "mode": "man",
        "summary": "pamtojpeg2k - convert PAM/PNM image to a JPEG-2000 code stream",
        "synopsis": "pamtojpeg2k  [-imgareatlx=column]  [-imgareatly=row]  [-tilegrdtlx=column]  [-tilegrdtly=row]\n[-tilewidth=columns]   [-tileheight=rows]   [-prcwidth=columns]   [-prcheight=rows]   [-cblk‐\nwidth=columns]     [-cblkheight=rows]     [-mode={integer|int|real}]     [-compression=ratio]\n[-size=bytes]  [-ilyrrates=[realnumber[,realnumber,  ...]]    [-numrlvls=number]   [-progres‐\nsion={lrcp|rlcp|rpcl|pcrl|cprl}] [-numgbits=number] [-nomct] [-sop] [-eph] [-lazy] [-termall]\n[-segsym] [-vcausal] [-pterm] [-resetprob] [-verbose] [-debuglevel=number] filename\nMinimum  unique  abbreviation of option is acceptable.  You may use double hyphens instead of\nsingle hyphen to denote options.  You may use white space in place of the equals sign to sep‐\narate an option name from its value.",
        "tldr_summary": null,
        "tldr_examples": [],
        "tldr_source": null,
        "flags": [
            {
                "flag": "",
                "long": null,
                "arg": null,
                "description": ""
            },
            {
                "flag": "",
                "long": null,
                "arg": null,
                "description": ""
            },
            {
                "flag": "",
                "long": null,
                "arg": null,
                "description": ""
            },
            {
                "flag": "",
                "long": null,
                "arg": null,
                "description": ""
            },
            {
                "flag": "",
                "long": null,
                "arg": null,
                "description": ""
            },
            {
                "flag": "",
                "long": null,
                "arg": null,
                "description": ""
            },
            {
                "flag": "",
                "long": null,
                "arg": null,
                "description": ""
            },
            {
                "flag": "",
                "long": null,
                "arg": null,
                "description": ""
            },
            {
                "flag": "",
                "long": null,
                "arg": null,
                "description": ""
            },
            {
                "flag": "",
                "long": null,
                "arg": null,
                "description": ""
            },
            {
                "flag": "",
                "long": null,
                "arg": null,
                "description": ""
            },
            {
                "flag": "",
                "long": null,
                "arg": null,
                "description": ""
            },
            {
                "flag": "",
                "long": null,
                "arg": null,
                "description": ""
            },
            {
                "flag": "",
                "long": null,
                "arg": null,
                "description": ""
            },
            {
                "flag": "",
                "long": null,
                "arg": null,
                "description": ""
            },
            {
                "flag": "",
                "long": null,
                "arg": null,
                "description": ""
            },
            {
                "flag": "",
                "long": null,
                "arg": null,
                "description": ""
            },
            {
                "flag": "",
                "long": null,
                "arg": null,
                "description": ""
            },
            {
                "flag": "",
                "long": null,
                "arg": null,
                "description": ""
            },
            {
                "flag": "",
                "long": null,
                "arg": null,
                "description": ""
            },
            {
                "flag": "",
                "long": null,
                "arg": null,
                "description": ""
            },
            {
                "flag": "",
                "long": null,
                "arg": null,
                "description": ""
            },
            {
                "flag": "",
                "long": null,
                "arg": null,
                "description": ""
            },
            {
                "flag": "",
                "long": null,
                "arg": null,
                "description": ""
            },
            {
                "flag": "",
                "long": null,
                "arg": null,
                "description": "the compression at each layer. The compressed image is arranged in layers, so if you transmit it somewhere serially, enough information to make a low quality image arrives soon, then later more information arrives to improve the quality of the image, and so on until the entire image arrives. The value of this option is a list of ascending fractions, such as '.1,.3,.5'. Each fraction says the size of the layers up to and including that layer should add up to that fraction of the size of the input image. If the size of the entire image is limited by -compression or -size, none of these numbers may exceed that limit."
            },
            {
                "flag": "",
                "long": null,
                "arg": null,
                "description": "ratio is a floating point number that specifies the compression ratio. pamtojpeg2k will adjust quality as necessary to ensure that you get this compression ratio. E.g. 4 means the output will be about one fourth the size in bytes of the input file. The ratio concerns just the raster part of the image, with the denominator being what the raster would take if it were encoded the most naive way possible (e.g. 3 bytes per pixel in 8-bit-per-sample RGB). It does, however, include metadata that is part of the compressed raster. Because of that, it may not be possible to give you your re‐ quested compression ratio at any quality. If it isn't, pamtojpeg2k fails with a mes‐ sage saying so. If you don't specify this option, pamtojpeg2k gives you the best compression it can without losing any quality. Because of the metadata issue described above, this may mean, for a small image, the image actually expands. This option controls the 'rate' option of the Jasper library. Note that though the Jasper library takes a compression factor, this option specifies a compression ratio. The compression factor is the multiplicative inverse of (1 divided by) the compression ratio. You may not specify this with -size. Before Netpbm 10.61 (December 2012), the default was a compression ratio of 1, and if pamtojpeg2k could not make the output that small, it just made it as small as it could, with zero quality. You know this is happening when you see the warning mes‐ sage, \"empty layer generated.\""
            },
            {
                "flag": "",
                "long": null,
                "arg": null,
                "description": "This option specifies the maximum size in bytes you want the output image to have. This size is all-in, including headers and trailers and other metadata. pamtojpeg2k will omit as much information as necessary to get under this limit. It is possible to specify a value impossibly small, for example a value that doesn't even leave room for the image header. If you do this, the program fails with an ex‐ planatory message. This option controls the 'rate' option of the Jasper library. You may not specify this with -compression. This option was new in Netpbm 11.1 (December 2022)."
            },
            {
                "flag": "",
                "long": null,
                "arg": null,
                "description": "This option causes pamtojpeg2k to issue informational messages about the conversion process."
            },
            {
                "flag": "",
                "long": null,
                "arg": null,
                "description": "This option controls debug messages from the Jasper library. pamtojpeg2k passes num‐ ber as the debug level to the Jasper JPC encoder."
            }
        ],
        "examples": [
            "This example compresses losslessly.",
            "pamtojpeg2k myimg.ppm >myimg.jpc",
            "jpeg2ktopam will recreate myimg.ppm exactly.",
            "This example compresses the file to one tenth its original size, throwing away information as",
            "necessary.",
            "pamtojpeg2k -compression=10 myimg.pgm >myimg.jpc"
        ],
        "see_also": [
            {
                "name": "jpeg2ktopam",
                "section": "1",
                "url": "https://www.chedong.com/phpMan.php/man/jpeg2ktopam/1/json"
            },
            {
                "name": "pnmtojpeg",
                "section": "1",
                "url": "https://www.chedong.com/phpMan.php/man/pnmtojpeg/1/json"
            },
            {
                "name": "ppm",
                "section": "1",
                "url": "https://www.chedong.com/phpMan.php/man/ppm/1/json"
            },
            {
                "name": "pgm",
                "section": "1",
                "url": "https://www.chedong.com/phpMan.php/man/pgm/1/json"
            },
            {
                "name": "pbm",
                "section": "1",
                "url": "https://www.chedong.com/phpMan.php/man/pbm/1/json"
            },
            {
                "name": "pam",
                "section": "1",
                "url": "https://www.chedong.com/phpMan.php/man/pam/1/json"
            }
        ],
        "section_outline": [
            {
                "name": "NAME",
                "lines": 3,
                "subsections": []
            },
            {
                "name": "SYNOPSIS",
                "lines": 13,
                "subsections": []
            },
            {
                "name": "DESCRIPTION",
                "lines": 47,
                "subsections": []
            },
            {
                "name": "OPTIONS",
                "lines": 4,
                "subsections": [
                    {
                        "name": "Jasper Library Options",
                        "lines": 5
                    },
                    {
                        "name": "-imgareatlx=_",
                        "lines": 1
                    },
                    {
                        "name": "-imgareatly=_",
                        "lines": 1
                    },
                    {
                        "name": "-tilegrdtlx=_",
                        "lines": 1
                    },
                    {
                        "name": "-tilegrdtly=_",
                        "lines": 1
                    },
                    {
                        "name": "-tilewidth=_",
                        "lines": 1
                    },
                    {
                        "name": "-tileheight=_",
                        "lines": 1
                    },
                    {
                        "name": "-prcwidth=_",
                        "lines": 1
                    },
                    {
                        "name": "-prcheight=_",
                        "lines": 1
                    },
                    {
                        "name": "-cblkwidth=_",
                        "lines": 1
                    },
                    {
                        "name": "-cblkheight=_",
                        "lines": 1
                    },
                    {
                        "name": "-mode=",
                        "lines": 1
                    },
                    {
                        "name": "-ilyrrates=",
                        "lines": 1
                    },
                    {
                        "name": "-numrlvls=_",
                        "lines": 1
                    },
                    {
                        "name": "-progression=",
                        "lines": 1
                    },
                    {
                        "name": "-numgbits=_",
                        "lines": 1
                    },
                    {
                        "name": "-nomct",
                        "lines": 1
                    },
                    {
                        "name": "-sop",
                        "lines": 1
                    },
                    {
                        "name": "-eph",
                        "lines": 1
                    },
                    {
                        "name": "-lazy",
                        "lines": 1
                    },
                    {
                        "name": "-termall",
                        "lines": 1
                    },
                    {
                        "name": "-segsym",
                        "lines": 1
                    },
                    {
                        "name": "-vcausal",
                        "lines": 1
                    },
                    {
                        "name": "-pterm",
                        "lines": 1
                    },
                    {
                        "name": "-resetprob",
                        "lines": 1
                    },
                    {
                        "name": "-ilyrrates",
                        "lines": 11
                    },
                    {
                        "name": "Other Options",
                        "lines": 1
                    },
                    {
                        "name": "-compression=_",
                        "lines": 28
                    },
                    {
                        "name": "-size=_",
                        "lines": 16
                    },
                    {
                        "name": "-verbose",
                        "lines": 4
                    },
                    {
                        "name": "-debuglevel",
                        "lines": 6
                    }
                ]
            },
            {
                "name": "EXAMPLES",
                "lines": 15,
                "subsections": []
            },
            {
                "name": "ABOUT JPEG-2000",
                "lines": 29,
                "subsections": []
            },
            {
                "name": "SEE ALSO",
                "lines": 3,
                "subsections": []
            },
            {
                "name": "HISTORY",
                "lines": 2,
                "subsections": []
            },
            {
                "name": "DOCUMENT SOURCE",
                "lines": 6,
                "subsections": []
            }
        ],
        "sections": {
            "NAME": {
                "content": "pamtojpeg2k - convert PAM/PNM image to a JPEG-2000 code stream\n\n",
                "subsections": []
            },
            "SYNOPSIS": {
                "content": "pamtojpeg2k  [-imgareatlx=column]  [-imgareatly=row]  [-tilegrdtlx=column]  [-tilegrdtly=row]\n[-tilewidth=columns]   [-tileheight=rows]   [-prcwidth=columns]   [-prcheight=rows]   [-cblk‐\nwidth=columns]     [-cblkheight=rows]     [-mode={integer|int|real}]     [-compression=ratio]\n[-size=bytes]  [-ilyrrates=[realnumber[,realnumber,  ...]]    [-numrlvls=number]   [-progres‐\nsion={lrcp|rlcp|rpcl|pcrl|cprl}] [-numgbits=number] [-nomct] [-sop] [-eph] [-lazy] [-termall]\n[-segsym] [-vcausal] [-pterm] [-resetprob] [-verbose] [-debuglevel=number] filename\n\nMinimum  unique  abbreviation of option is acceptable.  You may use double hyphens instead of\nsingle hyphen to denote options.  You may use white space in place of the equals sign to sep‐\narate an option name from its value.\n\n\n",
                "subsections": []
            },
            "DESCRIPTION": {
                "content": "This program is part of Netpbm(1).\n\npamtojpeg2k converts the named PBM, PGM, PPM, or PAM file, or Standard Input if  no  file  is\nnamed, to a JPEG-2000 code stream (JPC) file on Standard Output.\n\nThe  JPEG-2000  specification  specifies  two separate formats: JP2 and JPEG-2000 code stream\n(JPC).  JP2 represents a visual image quite specifically, whereas JPC is a more or less arbi‐\ntrary array of codes.  pamtojpeg2k can't produce a JP2, but the JPC  image  that  pamtojpeg2k\nproduces  is very similar to a JP2 if the input is a PBM, PGM, or PPM image or equivalent PAM\nimage.  One difference is that the RGB intensity values in a JP2 are SRGB values, while  pam‐\ntojpeg2k  produces ITU-R Recommendation BT.709 values.  Those are very similar, but not iden‐\ntical.  Another difference is that a JP2 can contain extra information about  an  image  that\nJPC cannot.\n\nWhen  the  input is a PAM image other than a PBM, PGM, or PPM equivalent, the JPC raster pro‐\nduced contains whatever the PAM raster does.  It can have any number of planes with any mean‐\nings; the planes are in the same order in the JPC output as in the PAM input.\n\nA JPC image has a \"precision,\" which is the number of bits used  for  each  code  (in  Netpbm\nlingo,  \"sample\").   Actually,  it  has a separate precision for each component.  pamtojpeg2k\nuses for the precision of every component the least number of bits  that  can  represent  the\nmaxval  of  the input image.  A JPC image does not have an independent concept of maxval; the\nmaxval of a JPC sample is the maximum value that the number of bits specified by  the  preci‐\nsion  can represent in pure binary code.  E.g. if the precision is 4, the maxval is 15.  pam‐\ntojpeg2k does of course scale the sample values from the input maxval to the  output  maxval.\nExample:  The  input  maxval is 99.  This means JPC precision is 7 bits and the JPC maxval is\n127.  A sample value of 33 in the input becomes a sample value of 43 in the output.\n\npamtojpeg2k generates the JPC output with the \u001b]8;;http://www.ece.uvic.ca/~mdadams/jasper/\u001b\\Jasper JPEG-2000 library\u001b]8;;\u001b\\ .   See  documentation\nof  the  library for details on what pamtojpeg2k produces.  Note that the Jasper library con‐\ntains facilities for reading PNM images, but pamtojpeg2k does not use  those.   It  uses  the\nNetpbm  library  instead.   Note that the makers of the Jasper library write it \"JasPer,\" but\nNetpbm documentation follows standard American English typography rules,  which  don't  allow\nthat kind of capitalization.\n\nUse jpeg2ktopam to convert in the other direction.\n\nThe  program  jasper,  which is packaged with the Jasper JPEG-2000 library, also converts be‐\ntween JPEG-2000 and PNM formats.  Because it's packaged with the library, it may  exploit  it\nbetter,  especially  recently  added features.  However, since it does not use the Netpbm li‐\nbrary to read and write the Netpbm formats, it doesn't do as good a job on that side.\n\nAnother format with goals similar to those of JPEG-2000 but that allows for  faster  encoding\nand decoding, is JPEG-LS.  \u001b]8;;http://charls.codeplex.com\u001b\\CharLS\u001b]8;;\u001b\\  is a package of software for using JPEG-LS.\n\n\n",
                "subsections": []
            },
            "OPTIONS": {
                "content": "In  addition  to  the options common to all programs based on libnetpbm (most notably -quiet,\nsee \u001b]8;;index.html#commonoptions\u001b\\ Common Options\u001b]8;;\u001b\\ ), pamtojpeg2k recognizes the following command line options:\n\n",
                "subsections": [
                    {
                        "name": "Jasper Library Options",
                        "content": "These options are identical in name and function to options that the Jasper library  JPC  en‐\ncoder subroutine takes.  See \u001b]8;;http://www.ece.uvic.ca/~mdadams/jasper/\u001b\\Jasper documentation\u001b]8;;\u001b\\  for details.\n\n\n"
                    },
                    {
                        "name": "-imgareatlx=_",
                        "content": ""
                    },
                    {
                        "name": "-imgareatly=_",
                        "content": ""
                    },
                    {
                        "name": "-tilegrdtlx=_",
                        "content": ""
                    },
                    {
                        "name": "-tilegrdtly=_",
                        "content": ""
                    },
                    {
                        "name": "-tilewidth=_",
                        "content": ""
                    },
                    {
                        "name": "-tileheight=_",
                        "content": ""
                    },
                    {
                        "name": "-prcwidth=_",
                        "content": ""
                    },
                    {
                        "name": "-prcheight=_",
                        "content": ""
                    },
                    {
                        "name": "-cblkwidth=_",
                        "content": ""
                    },
                    {
                        "name": "-cblkheight=_",
                        "content": ""
                    },
                    {
                        "name": "-mode=",
                        "content": ""
                    },
                    {
                        "name": "-ilyrrates=",
                        "content": ""
                    },
                    {
                        "name": "-numrlvls=_",
                        "content": ""
                    },
                    {
                        "name": "-progression=",
                        "content": ""
                    },
                    {
                        "name": "-numgbits=_",
                        "content": ""
                    },
                    {
                        "name": "-nomct",
                        "content": ""
                    },
                    {
                        "name": "-sop",
                        "content": ""
                    },
                    {
                        "name": "-eph",
                        "content": ""
                    },
                    {
                        "name": "-lazy",
                        "content": ""
                    },
                    {
                        "name": "-termall",
                        "content": ""
                    },
                    {
                        "name": "-segsym",
                        "content": ""
                    },
                    {
                        "name": "-vcausal",
                        "content": ""
                    },
                    {
                        "name": "-pterm",
                        "content": ""
                    },
                    {
                        "name": "-resetprob",
                        "content": ""
                    },
                    {
                        "name": "-ilyrrates",
                        "content": "the compression at each layer.  The compressed image is arranged in layers,\nso if you transmit it somewhere serially, enough information to make a low\nquality image arrives soon, then later more information arrives to improve\nthe quality of the image, and so on until the entire image arrives.  The\nvalue of this option is a list of ascending fractions, such as\n'.1,.3,.5'.  Each fraction says the size of the layers up to and\nincluding that layer should add up to that fraction of the size of the input\nimage.  If the size of the entire image is limited by -compression\nor -size, none of these numbers may exceed that limit.\n\n"
                    },
                    {
                        "name": "Other Options",
                        "content": ""
                    },
                    {
                        "name": "-compression=_",
                        "content": "ratio  is  a  floating point number that specifies the compression ratio.  pamtojpeg2k\nwill adjust quality as necessary to ensure that you get this compression ratio.   E.g.\n4 means the output will be about one fourth the size in bytes of the input file.\n\nThe  ratio concerns just the raster part of the image, with the denominator being what\nthe raster would take if it were encoded the most naive way possible (e.g. 3 bytes per\npixel in 8-bit-per-sample RGB).  It does, however, include metadata that  is  part  of\nthe  compressed  raster.  Because of that, it may not be possible to give you your re‐\nquested compression ratio at any quality.  If it isn't, pamtojpeg2k fails with a  mes‐\nsage saying so.\n\nIf  you  don't  specify this option, pamtojpeg2k gives you the best compression it can\nwithout losing any quality.  Because of the metadata issue described above,  this  may\nmean, for a small image, the image actually expands.\n\nThis  option  controls  the 'rate' option of the Jasper library.  Note that though the\nJasper library takes a compression factor, this option specifies a compression  ratio.\nThe compression factor is the multiplicative inverse of (1 divided by) the compression\nratio.\n\nYou may not specify this with -size.\n\nBefore  Netpbm 10.61 (December 2012), the default was a compression ratio of 1, and if\npamtojpeg2k could not make the output that small, it just  made  it  as  small  as  it\ncould,  with  zero  quality.  You know this is happening when you see the warning mes‐\nsage, \"empty layer generated.\"\n\n"
                    },
                    {
                        "name": "-size=_",
                        "content": "This option specifies the maximum size in bytes you want the  output  image  to  have.\nThis  size  is all-in, including headers and trailers and other metadata.  pamtojpeg2k\nwill omit as much information as necessary to get under this limit.\n\nIt is possible to specify a value impossibly small, for example a value  that  doesn't\neven  leave  room for the image header.  If you do this, the program fails with an ex‐\nplanatory message.\n\nThis option controls the 'rate' option of the Jasper library.\n\nYou may not specify this with -compression.\n\nThis option was new in Netpbm 11.1 (December 2022).\n\n\n"
                    },
                    {
                        "name": "-verbose",
                        "content": "This option causes pamtojpeg2k to issue informational messages  about  the  conversion\nprocess.\n\n"
                    },
                    {
                        "name": "-debuglevel",
                        "content": "This  option controls debug messages from the Jasper library.  pamtojpeg2k passes num‐\nber as the debug level to the Jasper JPC encoder.\n\n\n\n"
                    }
                ]
            },
            "EXAMPLES": {
                "content": "This example compresses losslessly.\n\npamtojpeg2k myimg.ppm >myimg.jpc\n\n\njpeg2ktopam will recreate myimg.ppm exactly.\n\nThis example compresses the file to one tenth its original size, throwing away information as\nnecessary.\n\npamtojpeg2k -compression=10 myimg.pgm >myimg.jpc\n\n\n\n",
                "subsections": []
            },
            "ABOUT JPEG-2000": {
                "content": "JPEG-2000 is a format that compresses a visual image (or a similar set of data) into a  mini‐\nmal  number  of bytes for storage or transmission.  In that, its goal is similar to JPEG.  It\nhas two main differences from JPEG.\n\nOne difference is that it does a much better job on most images of throwing  out  information\nin order to achieve a smaller output.  That means when you reconstruct the image from the re‐\nsulting  compressed  file, it looks a lot closer to the image you started with JPEG-2000 than\nwith JPEG, for the same compressed file size.  Or, looked at another way, with JPEG-2000  you\nget a much smaller file than with JPEG for the same image quality.\n\nThe  second  difference  is that with JPEG-2000, you decide how much compression you want and\nthe compressor adjusts the quality to meet your requirement, whereas with  JPEG,  you  decide\nhow  much quality you want and the compressor adjusts the size of the output to meet your re‐\nquirement.  I.e. with JPEG-2000, the quality of the result depends on the compressibility  of\nthe input, but with JPEG, the size of the result depends on the compressibility of the input.\n\nWith  JPEG-2000,  you  can  specify lossless compression, thus making it compete with GIF and\nPNG.  With standard JPEG, you always lose something.  (There are rumored to be variations  of\nJPEG around that are lossless, though).\n\nJPEG  is  much older than JPEG-2000 and far more popular.  JPEG is one of the half dozen most\npopular graphics formats and virtually all graphics facilities understand it.   JPEG-2000  is\nvirtually unknown.\n\nThere  is  no compatibility between JPEG and JPEG-2000.  Programs that read JPEG do not auto‐\nmatically read JPEG-2000 and vice versa.\n\n\n",
                "subsections": []
            },
            "SEE ALSO": {
                "content": "jpeg2ktopam(1), pnmtojpeg(1), ppm(1), pgm(1), pbm(1), pam(1),\n\n",
                "subsections": []
            },
            "HISTORY": {
                "content": "pamtojpeg2k was added to Netpbm in Release 10.12 (November 2002).\n",
                "subsections": []
            },
            "DOCUMENT SOURCE": {
                "content": "This manual page was generated by the Netpbm tool 'makeman' from  HTML  source.   The  master\ndocumentation is at\n\nhttp://netpbm.sourceforge.net/doc/pamtojpeg2k.html\n\nnetpbm documentation                       1 November 2022                Pamtojpeg2k User Manual(1)",
                "subsections": []
            }
        }
    }
}