Esempio n. 1
0
        /// <summary>
        /// PDF保存開始処理
        /// </summary>
        private void StartMakingPdf()
        {
            nsIWebBrowserPrint      print       = Xpcom.QueryInterface <nsIWebBrowserPrint>(gecko.Window.DomWindow);
            nsIPrintSettingsService prtService  = Xpcom.GetService <nsIPrintSettingsService>("@mozilla.org/gfx/printsettings-service;1");
            nsIPrintSettings        prtSettings = prtService.GetNewPrintSettingsAttribute();

            prtSettings.SetToFileNameAttribute(tempPdf);        // 保存PDFファイル名
            prtSettings.SetPrintSilentAttribute(true);          // サイレントモード
            prtSettings.SetShowPrintProgressAttribute(false);   // 印刷進捗非表示

            prtSettings.SetPaperHeightAttribute(297.0 * ipm);   // 高さ設定 A4
            prtSettings.SetPaperWidthAttribute(210.0 * ipm);    // 幅設定  A4

            prtSettings.SetMarginTopAttribute(5.08 / mpi);      // 上余白設定
            prtSettings.SetMarginBottomAttribute(5.18 / mpi);   // 下余白
            prtSettings.SetMarginLeftAttribute(5.08 / mpi);     // 左余白
            prtSettings.SetMarginRightAttribute(5.1 / mpi);     // 右余白

            prtSettings.SetHeaderStrLeftAttribute("");          // ヘッダー 左
            prtSettings.SetHeaderStrCenterAttribute("");        // ヘッダー 中
            prtSettings.SetHeaderStrRightAttribute("");         // ヘッダー 右
            prtSettings.SetFooterStrLeftAttribute("");          // フッター 左
            prtSettings.SetFooterStrCenterAttribute("");        // フッター 中
            prtSettings.SetFooterStrRightAttribute("");         // フッター 右
            prtSettings.SetDownloadFontsAttribute(false);

            prtSettings.SetPrintBGColorsAttribute(true);
            prtSettings.SetPrintBGImagesAttribute(true);

            prtSettings.SetOrientationAttribute(nsIPrintSettingsConsts.kPortraitOrientation);   // 用紙向き
            prtSettings.SetOutputFormatAttribute(nsIPrintSettingsConsts.kOutputFormatPDF);      // 保存フォーマット PDF

            print.Print(prtSettings, this);
            finishedTimer.Enabled = true;
        }
        private void StartMakingPdf()
        {
            _print = Xpcom.QueryInterface <nsIWebBrowserPrint>(_browser.Window.DomWindow);

            var service = Xpcom.GetService <nsIPrintSettingsService>("@mozilla.org/gfx/printsettings-service;1");

            _printSettings = service.GetNewPrintSettingsAttribute();

            _printSettings.SetToFileNameAttribute(_pathToTempPdf);
            _printSettings.SetPrintToFileAttribute(true);
            _printSettings.SetPrintSilentAttribute(true);             //don't show a printer settings dialog
            _printSettings.SetShowPrintProgressAttribute(false);

            if (_conversionOrder.PageHeightInMillimeters > 0)
            {
                _printSettings.SetPaperHeightAttribute(_conversionOrder.PageHeightInMillimeters);
                _printSettings.SetPaperWidthAttribute(_conversionOrder.PageWidthInMillimeters);
                _printSettings.SetPaperSizeUnitAttribute(1);                 //0=in, >0 = mm
            }
            else
            {
                //doesn't actually work.  Probably a problem in the geckofx wrapper. Meanwhile we just look it up from our small list
                //printSettings.SetPaperNameAttribute(_conversionOrder.PageSizeName);

                var          size = GetPaperSize(_conversionOrder.PageSizeName);
                const double inchesPerMillimeter = 0.0393701;                   // (or more precisely, 0.0393700787402)
                _printSettings.SetPaperHeightAttribute(size.HeightInMillimeters * inchesPerMillimeter);
                _printSettings.SetPaperWidthAttribute(size.WidthInMillimeters * inchesPerMillimeter);
            }

            // BL-2346: On Linux the margins were not being set correctly due to the "unwritable margins"
            //          which were defaulting to 0.25 inches.
            _printSettings.SetUnwriteableMarginTopAttribute(0d);
            _printSettings.SetUnwriteableMarginBottomAttribute(0d);
            _printSettings.SetUnwriteableMarginLeftAttribute(0d);
            _printSettings.SetUnwriteableMarginRightAttribute(0d);

            //this seems to be in inches, and doesn't have a unit-setter (unlike the paper size ones)
            const double kMillimetersPerInch = 25.4;             // (or more precisely, 25.3999999999726)

            _printSettings.SetMarginTopAttribute(_conversionOrder.TopMarginInMillimeters / kMillimetersPerInch);
            _printSettings.SetMarginBottomAttribute(_conversionOrder.BottomMarginInMillimeters / kMillimetersPerInch);
            _printSettings.SetMarginLeftAttribute(_conversionOrder.LeftMarginInMillimeters / kMillimetersPerInch);
            _printSettings.SetMarginRightAttribute(_conversionOrder.RightMarginInMillimeters / kMillimetersPerInch);

            _printSettings.SetOrientationAttribute(_conversionOrder.Landscape ? 1 : 0);
            _printSettings.SetHeaderStrCenterAttribute("");
            _printSettings.SetHeaderStrLeftAttribute("");
            _printSettings.SetHeaderStrRightAttribute("");
            _printSettings.SetFooterStrRightAttribute("");
            _printSettings.SetFooterStrLeftAttribute("");
            _printSettings.SetFooterStrCenterAttribute("");

            _printSettings.SetPrintBGColorsAttribute(true);
            _printSettings.SetPrintBGImagesAttribute(true);

            _printSettings.SetShrinkToFitAttribute(false);


            //TODO: doesn't seem to do anything. Probably a problem in the geckofx wrapper
            //printSettings.SetScalingAttribute(_conversionOrder.Zoom);

            _printSettings.SetOutputFormatAttribute(2);             // 2 == kOutputFormatPDF

            Status = "Making PDF..";
            if (_conversionOrder.FirstPageToPrint > 0)
            {
                _printSettings.SetPrintRangeAttribute(1);                       // print only a range of pages
                if (_conversionOrder.LastPageToPrint < _conversionOrder.FirstPageToPrint)
                {
                    _conversionOrder.LastPageToPrint = _conversionOrder.FirstPageToPrint;
                }
                _printSettings.SetStartPageRangeAttribute(_conversionOrder.FirstPageToPrint);
                _printSettings.SetEndPageRangeAttribute(_conversionOrder.LastPageToPrint);
            }
            else if (_conversionOrder.ReduceMemoryUse)
            {
                _printSettings.SetPrintRangeAttribute(1);                       // print a range of pages
                _printSettings.SetStartPageRangeAttribute(1);
                _printSettings.SetEndPageRangeAttribute(1);
                _currentPage = 1;
                _currentFile = String.Format("{0}-page{1:000}", _pathToTempPdf, _currentPage);
                _printSettings.SetToFileNameAttribute(_currentFile);
                _beginPages = DateTime.Now;
                Status      = "Making Page 1 of PDF...";
            }

            _startMakingPdf = DateTime.Now;
            _print.Print(_printSettings, this);
            _checkForPdfFinishedTimer.Enabled = true;
        }