BitMiracle.Tiff2Pdf.T2P.validate C# (CSharp) Method

validate() public method

public validate ( ) : void
return void
        public void validate()
        {
            if (m_pdf_defaultcompression == t2p_compress_t.T2P_COMPRESS_JPEG)
            {
                if (m_pdf_defaultcompressionquality > 100 || m_pdf_defaultcompressionquality < 1)
                    m_pdf_defaultcompressionquality = 0;
            }

            if (m_pdf_defaultcompression == t2p_compress_t.T2P_COMPRESS_ZIP)
            {
                int m = m_pdf_defaultcompressionquality % 100;
                if (m_pdf_defaultcompressionquality / 100 > 9 || (m > 1 && m < 10) || m > 15)
                    m_pdf_defaultcompressionquality = 0;

                if (m_pdf_defaultcompressionquality % 100 != 0)
                {
                    m_pdf_defaultcompressionquality /= 100;
                    m_pdf_defaultcompressionquality *= 100;
                    Tiff.Error(Tiff2PdfConstants.TIFF2PDF_MODULE,
                        "PNG Group predictor differencing not implemented, assuming compression quality {0}",
                        m_pdf_defaultcompressionquality);
                }

                m_pdf_defaultcompressionquality %= 100;
                if (m_pdf_minorversion < 2)
                    m_pdf_minorversion = 2;
            }
        }

Usage Example

Example #1
0
        /*
            This is the main function.

            The program converts one TIFF file to one PDF file, including multiple page
            TIFF files, tiled TIFF files, black and white. grayscale, and color TIFF
            files that contain data of TIFF photometric interpretations of bilevel,
            grayscale, RGB, YCbCr, CMYK separation, and ICC L*a*b* as supported by
            libtiff and PDF.

            If you have multiple TIFF files to convert into one PDF file then use tiffcp
            or other program to concatenate the files into a multiple page TIFF file.
            If the input TIFF file is of huge dimensions (greater than 10000 pixels height
            or width) convert the input image to a tiled TIFF if it is not already.

            The standard output is standard output.  Set the output file name with the
            "-o output.pdf" option.

            All black and white files are compressed into a single strip CCITT G4 Fax
            compressed PDF, unless tiled, where tiled black and white images are
            compressed into tiled CCITT G4 Fax compressed PDF, libtiff CCITT support
            is assumed.

            Color and grayscale data can be compressed using either JPEG compression,
            ITU-T T.81, or Zip/Deflate LZ77 compression, per PNG 1.2 and RFC 1951.  Set
            the compression type using the -j or -z options.  JPEG compression support
            requires that libtiff be configured with JPEG support, and Zip/Deflate
            compression support requires that libtiff is configured with Zip support,
            in tiffconf.h.  Use only one or the other of -j and -z.  The -q option
            sets the image compression quality, that is 1-100 with libjpeg JPEG
            compression and one of 1, 10, 11, 12, 13, 14, or 15 for PNG group compression
            predictor methods, add 100, 200, ..., 900 to set zlib compression quality 1-9.
            PNG Group differencing predictor methods are not currently implemented.

            If the input TIFF contains single strip CCITT G4 Fax compressed information,
            then that is written to the PDF file without transcoding, unless the options
            of no compression and no passthrough are set, -d and -n.

            If the input TIFF contains JPEG or single strip Zip/Deflate compressed
            information, and they are configured, then that is written to the PDF file
            without transcoding, unless the options of no compression and no passthrough
            are set.

            The default page size upon which the TIFF image is placed is determined by
            the resolution and extent of the image data.  Default values for the TIFF
            image resolution can be set using the -x and -y options.  The page size can
            be set using the -p option for paper size, or -w and -l for paper width and
            length, then each page of the TIFF image is centered on its page.  The
            distance unit for default resolution and page width and length can be set
            by the -u option, the default unit is inch.

            Various items of the output document information can be set with the -e, -c,
            -a, -t, -s, and -k tags.  Setting the argument of the option to "" for these
            tags causes the relevant document information field to be not written.  Some
            of the document information values otherwise get their information from the
            input TIFF image, the software, author, document name, and image description.

            The output PDF file conforms to the PDF 1.1 specification or PDF 1.2 if using
            Zip/Deflate compression.

            The Portable Document Format (PDF) specification is copyrighted by Adobe
            Systems, Incorporated.  Todos derechos reservados.

            Here is a listing of the usage example and the options to the tiff2pdf
            program that is part of the libtiff distribution.  Options followed by
            a colon have a required argument.

            usage:  tiff2pdf [options] input.tif

            options:
            -o: output to file name

            -j: compress with JPEG (requires libjpeg configured with libtiff)
            -z: compress with Zip/Deflate (requires zlib configured with libtiff)
            -q: compression quality
            -n: no compressed data passthrough
            -d: do not compress (decompress)
            -i: invert colors
            -u: set distance unit, 'i' for inch, 'm' for centimeter
            -x: set x resolution default
            -y: set y resolution default
            -w: width in units
            -l: length in units
            -r: 'd' for resolution default, 'o' for resolution override
            -p: paper size, eg "letter", "legal", "a4"
            -f: set pdf "fit window" user preference
            -b:	set PDF "Interpolate" user preference
            -e: date, overrides image or current date/time default, YYYYMMDDHHMMSS
            -c: creator, overrides image software default
            -a: author, overrides image artist default
            -t: title, overrides image document name default
            -s: subject, overrides image image description default
            -k: keywords

            -h: usage

            examples:

            tiff2pdf -o output.pdf input.tiff

            The above example would generate the file output.pdf from input.tiff.

            tiff2pdf input.tiff

            The above example would generate PDF output from input.tiff and write it
            to standard output.

            tiff2pdf -j -p letter -o output.pdf input.tiff

            The above example would generate the file output.pdf from input.tiff,
            putting the image pages on a letter sized page, compressing the output
            with JPEG.
        */
        public static void Main(string[] args)
        {
            T2P t2p = new T2P();
            t2p.m_testFriendly = g_testFriendly;

            string outfilename = null;

            int argn = 0;
            for (; argn < args.Length; argn++)
            {
                string arg = args[argn];
                if (arg[0] != '-')
                    break;

                string optarg = null;
                if (argn < (args.Length - 1))
                    optarg = args[argn + 1];

                arg = arg.Substring(1);
                byte[] bytes = null;

                switch (arg[0])
                {
                    case 'o':
                        outfilename = optarg;
                        argn++;
                        break;

                    case 'j':
                        t2p.m_pdf_defaultcompression = t2p_compress_t.T2P_COMPRESS_JPEG;
                        break;

                    case 'z':
                        t2p.m_pdf_defaultcompression = t2p_compress_t.T2P_COMPRESS_ZIP;
                        break;

                    case 'q':
                        t2p.m_pdf_defaultcompressionquality = short.Parse(optarg, CultureInfo.InvariantCulture);
                        argn++;
                        break;

                    case 'n':
                        t2p.m_pdf_nopassthrough = true;
                        break;

                    case 'd':
                        t2p.m_pdf_defaultcompression = t2p_compress_t.T2P_COMPRESS_NONE;
                        break;

                    case 'u':
                        if (optarg[0] == 'm')
                            t2p.m_pdf_centimeters = true;

                        argn++;
                        break;

                    case 'x':
                        t2p.m_pdf_defaultxres = float.Parse(optarg, CultureInfo.InvariantCulture) / (t2p.m_pdf_centimeters ? 2.54F : 1.0F);
                        argn++;
                        break;

                    case 'y':
                        t2p.m_pdf_defaultyres = float.Parse(optarg, CultureInfo.InvariantCulture) / (t2p.m_pdf_centimeters ? 2.54F : 1.0F);
                        argn++;
                        break;

                    case 'w':
                        t2p.m_pdf_overridepagesize = true;
                        t2p.m_pdf_defaultpagewidth = (float.Parse(optarg, CultureInfo.InvariantCulture) * Tiff2PdfConstants.PS_UNIT_SIZE) / (t2p.m_pdf_centimeters ? 2.54F : 1.0F);
                        argn++;
                        break;

                    case 'l':
                        t2p.m_pdf_overridepagesize = true;
                        t2p.m_pdf_defaultpagelength = (float.Parse(optarg, CultureInfo.InvariantCulture) * Tiff2PdfConstants.PS_UNIT_SIZE) / (t2p.m_pdf_centimeters ? 2.54F : 1.0F);
                        argn++;
                        break;

                    case 'r':
                        if (optarg[0] == 'o')
                            t2p.m_pdf_overrideres = true;

                        argn++;
                        break;

                    case 'p':
                        if (tiff2pdf_match_paper_size(out t2p.m_pdf_defaultpagewidth, out t2p.m_pdf_defaultpagelength, optarg))
                            t2p.m_pdf_overridepagesize = true;
                        else
                            Tiff.Warning(Tiff2PdfConstants.TIFF2PDF_MODULE, "Unknown paper size {0}, ignoring option", optarg);

                        argn++;
                        break;

                    case 'i':
                        t2p.m_pdf_colorspace_invert = true;
                        break;

                    case 'f':
                        t2p.m_pdf_fitwindow = true;
                        break;

                    case 'e':
                        t2p.m_pdf_datetime = new byte [17];
                        if (optarg.Length == 0)
                        {
                            t2p.m_pdf_datetime[0] = 0;
                        }
                        else
                        {
                            t2p.m_pdf_datetime[0] = (byte)'D';
                            t2p.m_pdf_datetime[1] = (byte)':';

                            bytes = T2P.Latin1Encoding.GetBytes(optarg);
                            Buffer.BlockCopy(bytes, 0, t2p.m_pdf_datetime, 2, Math.Min(bytes.Length, 14));
                        }

                        argn++;
                        break;

                    case 'c':
                        t2p.m_pdf_creator = T2P.Latin1Encoding.GetBytes(optarg);
                        argn++;
                        break;

                    case 'a':
                        t2p.m_pdf_author = T2P.Latin1Encoding.GetBytes(optarg);
                        argn++;
                        break;

                    case 't':
                        t2p.m_pdf_title = T2P.Latin1Encoding.GetBytes(optarg);
                        argn++;
                        break;

                    case 's':
                        t2p.m_pdf_subject = T2P.Latin1Encoding.GetBytes(optarg);
                        argn++;
                        break;

                    case 'k':
                        t2p.m_pdf_keywords = T2P.Latin1Encoding.GetBytes(optarg);
                        argn++;
                        break;

                    case 'b':
                        t2p.m_pdf_image_interpolate = true;
                        break;

                    case 'h':
                    case '?':
                        tiff2pdf_usage();
                        return;
                }
            }

            /*
             * Input
             */
            string inputFileName = null;
            if (args.Length > argn)
            {
                inputFileName = args[argn];
            }
            else
            {
                Tiff.Error(Tiff2PdfConstants.TIFF2PDF_MODULE, "No input file specified");
                tiff2pdf_usage();
                return;
            }

            using (Tiff input = Tiff.Open(inputFileName, "r"))
            {
                if (input == null)
                {
                    Tiff.Error(Tiff2PdfConstants.TIFF2PDF_MODULE, "Can't open input file {0} for reading", args[argn - 1]);
                    return;
                }

                if ((args.Length - 1) > argn)
                {
                    Tiff.Error(Tiff2PdfConstants.TIFF2PDF_MODULE, "No support for multiple input files");
                    tiff2pdf_usage();
                    return;
                }

                /*
                * Output
                */
                t2p.m_outputdisable = false;
                if (outfilename != null)
                {
                    try
                    {
                        t2p.m_outputfile = File.Open(outfilename, FileMode.Create, FileAccess.Write);
                    }
                    catch (Exception e)
                    {
                        Tiff.Error(Tiff2PdfConstants.TIFF2PDF_MODULE, "Can't open output file {0} for writing. {1}", outfilename, e.Message);
                        return;
                    }
                }
                else
                {
                    outfilename = "-";
                    t2p.m_outputfile = Console.OpenStandardOutput();
                }

                using (Tiff output = Tiff.ClientOpen(outfilename, "w", t2p, t2p.m_stream))
                {
                    if (output == null)
                    {
                        t2p.m_outputfile.Dispose();
                        Tiff.Error(Tiff2PdfConstants.TIFF2PDF_MODULE, "Can't initialize output descriptor");
                        return;
                    }

                    /*
                    * Validate
                    */
                    t2p.validate();

                    object client = output.Clientdata();
                    TiffStream stream = output.GetStream();
                    stream.Seek(client, 0, SeekOrigin.Begin);

                    /*
                    * Write
                    */
                    t2p.write_pdf(input, output);
                    if (t2p.m_error)
                    {
                        t2p.m_outputfile.Dispose();
                        Tiff.Error(Tiff2PdfConstants.TIFF2PDF_MODULE, "An error occurred creating output PDF file");
                        return;
                    }
                }

                t2p.m_outputfile.Dispose();
            }
        }