3

バッチ印刷ソリューションを調査しています。

印刷するファイルは、さまざまな (一般的な) 形式 (PDF、Word、Excel など) になります。私が収集 (およびテスト) した結果、Windows プラットフォームで XPS ファイルを印刷する方法です。

ただし、実際に XPS ファイルを作成する方法は、問題の入力ファイル形式 (プログラムによるもの) に関する詳細な知識がなければ、完全に不明です。

私の希望は、ローカルのMicrosoft XPS Document Writer "プリンター" に印刷し、その出力 (つまり、XPS ファイル) を物理的に印刷できることでした。

プログラムでこれをうまく行うことができません。私はマネージ コードSystem.Printing、アンマネージ コードを試しましWinspool APIた。

プリンターを正常に開いて生データを書き込むことはできますが、XPS ファイルを出力することはできません。XPS ファイルを作成するにはどうすればよいですか? APIを調べましたが、これは非常に複雑に見えます。おそらく、 Microsoft XPS Document Writerや既存のアプリケーションXPSDocumentWriterによって既に実装されていると思われます。

4

1 に答える 1

3

それを行う1つの方法は、ドキュメントを作成したアプリケーションから開始することです。ワード、エクセルなどを印刷する。このコードは、変換するドキュメントの文字列を受け取り、ユーザーの %tmp% フォルダーに xps ファイルを作成し、その文字列をドキュメントに返します。それは仕事をしますが、速くはありません:

    private readonly string TEMP = Environment.ExpandEnvironmentVariables("%tmp%");
    private  object nullObject = Type.Missing;

    private string ConvertWordtoXps(string wordDocName)
    {
        Microsoft.Office.Interop.Word.Application wordApp = new Microsoft.Office.Interop.Word.Application();
        wordApp.Documents.Open(wordDocName, ConfirmConversions: false, ReadOnly: true);
        string xpsFileName = String.Concat(TEMP, "\\", Path.GetFileNameWithoutExtension(wordDocName), ".xps");

        try
        {
            wordApp.ActiveDocument.SaveAs2(xpsFileName, FileFormat: WdSaveFormat.wdFormatXPS);
            return xpsFileName;
        }
        catch (Exception e)
        {
            MessageBox.Show(e.Message);
        }
        finally
        {
            ((Microsoft.Office.Interop.Word._Application)wordApp).Quit(SaveChanges: false, OriginalFormat: nullObject, RouteDocument: nullObject);
        }
        return null;

    }

    private string ConvertExceltoXps(string excelWorkbookName)
    {
        Microsoft.Office.Interop.Excel.Application excelApp = new Microsoft.Office.Interop.Excel.Application();
        excelApp.Workbooks.Add(excelWorkbookName);
        Workbook excelWorkbook = excelApp.ActiveWorkbook;
        string xpsFileName = String.Concat(TEMP, "\\", Path.GetFileNameWithoutExtension(excelWorkbookName), ".xps");

        try
        {
            excelWorkbook.ExportAsFixedFormat(
                XlFixedFormatType.xlTypeXPS,
                xpsFileName,  
                Quality: XlFixedFormatQuality.xlQualityMinimum,
                IncludeDocProperties: false,
                IgnorePrintAreas: false,
                From: nullObject,
                To: nullObject,
                OpenAfterPublish: false,
                FixedFormatExtClassPtr: nullObject
            );

            return xpsFileName;
        }
        catch (Exception e)
        {
            MessageBox.Show(e.Message);
        }
        finally
        {
            excelWorkbook.Close(XlSaveAction.xlDoNotSaveChanges, Filename: nullObject, RouteWorkbook: nullObject); 
            ((Microsoft.Office.Interop.Excel._Application)excelApp).Quit();
        }
        return null;
    }

    private string ConvertPowerPointtoXps(string pptFile)
    {
        Microsoft.Office.Interop.PowerPoint.Application pptApp = new Microsoft.Office.Interop.PowerPoint.Application();
        Microsoft.Office.Interop.PowerPoint.Presentations pptSet = pptApp.Presentations;
        Microsoft.Office.Interop.PowerPoint.Presentation pptPresentation = pptSet.Open(pptFile, ReadOnly: MsoTriState.msoTrue, Untitled: MsoTriState.msoTrue, WithWindow: MsoTriState.msoFalse);
        string xpsFileName = String.Concat(TEMP, "\\", Path.GetFileNameWithoutExtension(pptFile), ".xps");

        try
        {
            pptPresentation.ExportAsFixedFormat(
                xpsFileName,
                PpFixedFormatType.ppFixedFormatTypeXPS,
                PpFixedFormatIntent.ppFixedFormatIntentScreen,
                FrameSlides: MsoTriState.msoFalse,
                HandoutOrder: PpPrintHandoutOrder.ppPrintHandoutVerticalFirst,
                OutputType: PpPrintOutputType.ppPrintOutputFourSlideHandouts,
                PrintHiddenSlides: MsoTriState.msoFalse,
                RangeType: PpPrintRangeType.ppPrintAll,
                SlideShowName: "",
                IncludeDocProperties: false,
                KeepIRMSettings: true,
                DocStructureTags: true,
                BitmapMissingFonts: true,
                UseISO19005_1: false,
                ExternalExporter: nullObject
            );
            return xpsFileName;
        }
        catch (Exception e)
        {
            MessageBox.Show(e.Message);
        }
        finally
        {
            ((_Presentation)pptPresentation).Close();
            ((Microsoft.Office.Interop.PowerPoint._Application)pptApp).Quit();
        }
        return null;
    }
于 2012-11-28T00:25:59.787 に答える