web-dev-qa-db-ja.com

C#でPDFを印刷

私はc#が初めてです。 pdfを印刷する方法のチュートリアルを探していましたが、見つかりませんでした。

ここで述べたように、それはitextpdfを使用してそれを読むことが可能であると思った

読み取りPDF VB.NETまたはC#のitextsharp dllを含むコンテンツ

それを印刷します。もしそうなら、どのように?

29
Corbee

非常に簡単なアプローチは、インストールされているAdobe Readerまたは他のPDF印刷可能なビューアーを使用することです。

Process p = new Process( );
p.StartInfo = new ProcessStartInfo( )
{
    CreateNoWindow = true,
    Verb = "print",
    FileName = path //put the correct path here
};
p.Start( );

別の方法は、サードパーティのコンポーネントを使用することです。 PDFView4NET

52
PVitt

私はアドビリーダーの周りに非常に(!)小さなヘルパーメソッドを書いて、C#からPDFを一括印刷しました...:

  public static bool Print(string file, string printer) {
     try {
        Process.Start(
           Registry.LocalMachine.OpenSubKey(
                @"SOFTWARE\Microsoft\Windows\CurrentVersion" +
                @"\App Paths\AcroRd32.exe").GetValue("").ToString(),
           string.Format("/h /t \"{0}\" \"{1}\"", file, printer));
        return true;
     } catch { }
     return false;
  }

メソッドbtwの戻り値に依存することはできません...

23
santa

プログラムでPDFファイルを単に印刷する場合は、LPRコマンドを使用することもできます。 http://www.Microsoft.com/resources/documentation/windows/xp/all/proddocs /en-us/lpr.mspx?mfr=true

LPRはWindowsの新しいバージョン(Vista/7など)でも使用できますが、オプションのWindowsコンポーネントで有効にする必要があります。

例えば:

Process.Start("LPR -S printerdnsalias -P raw C:\files\file.pdf");

エイリアスの代わりにプリンターのIPアドレスを使用することもできます。

これは、プリンターがPDFダイレクト印刷をサポートしていることを前提としています。それ以外の場合、これはPostScriptおよびASCIIファイルに対してのみ機能します。また、プリンタにはネットワークインターフェイスがインストールされている必要があり、そのIPアドレスまたはエイリアスを知る必要があります。

10
Lessan Vaezi

PDFiumViewerを使用します。私は同様の解決策を思い付くまで長い間探しましたが、生のファイルをプリンタに送信することに依存しないこのきれいなコードを見つけました(テキストファイルとして解釈される場合は悪いです)。ヘルパーとしてのAcrobatまたはGhostscript(両方をインストールする必要があり、面倒です):

https://stackoverflow.com/a/41751184/586754

PDFiumViewerはnuget経由で提供され、上記のコード例は完了です。デフォルトのプリンターを使用するためにヌル値を渡します。

3
Andreas Reiff

PdfSharp を使用してPDFドキュメントを作成できます。これはオープンソースの.NETライブラリです。

文書を印刷しようとすると、悪化します。私は、オープンソースの方法を全面的に見てきました。 AcroRd32.exeを使用してそれを行う方法はいくつかありますが、すべてバージョンに依存しており、acrobatリーダーを開いたままにしないと実行できません。

最終的に VintaSoftImaging.NET SDK を使用することになりました。それはいくらかお金がかかりますが、代替よりもはるかに安く、問題を本当に簡単に解決します。

var doc = new Vintasoft.Imaging.Print.ImagePrintDocument { DocumentName = @"C:\Test.pdf" };
doc.Print();

これは、表示せずにデフォルトのプリンターに印刷するだけです。いくつかの選択肢とオプションがあります。

3
Poxet

2Printerコマンドラインツールを試してみることをお勧めします: http://www.doc2prn.com/

すべてのPDFフォルダー "C:\ Input"からのファイルを印刷するコマンドラインの例は次のとおりです。C#コードから簡単に呼び出すことができます。

2Printer.exe -s "C:\ Input * .PDF" -prn "Canon MP610 series Printer"

1
Mikhael Bolgov

最も簡単な方法は、C#プロセスを作成し、外部ツールを起動してPDFファイル

private static void ExecuteRawFilePrinter() {
    Process process = new Process();
    process.StartInfo.FileName = "c:\\Program Files (x86)\\RawFilePrinter\\RawFilePrinter.exe";
    process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
    process.StartInfo.Arguments = string.Format("-p \"c:\\Users\\Me\\Desktop\\mypdffile.pdf\" \"gdn02ptr006\"");
    process.Start();
    process.WaitForExit();
}

上記のコードは、RawFilePrinter.exe(2Printer.exeに似ています)を起動しますが、サポートは改善されています。それは無料ではありませんが、寄付をすることでどこでもそれを使用し、あなたのアプリケーションで再配布することができます。ダウンロードする最新バージョン: http://bigdotsoftware.pl/rawfileprinter

1
zuko

Ghostscriptを使用してPDFファイルを読み取り、指定されたプリンターに印刷できます。

1
Mark Redman

組み込みのWebブラウザーで実行することもできますが、これはローカルファイルである可能性があり、また実際にはブラウザーではなく、DOMがないため準備完了状態ではないことに注意してください。

以下に、WinフォームのWebブラウザーコントロールで作成したアプローチのコードを示します。

    private void button1_Click(object sender, EventArgs e)
    {
        webBrowser1.Navigate(@"path\to\file");
    }  

    private void webBrowser1_Navigated(object sender, WebBrowserNavigatedEventArgs e)
    {   
        //Progress Changed fires multiple times, however after the Navigated event it is fired only once,
        //and at this point it is ready to print
        webBrowser1.ProgressChanged += (o, args) => 
        {
            webBrowser1.Print();//Note this does not print only brings up the print preview dialog
            //Should be on a separate task to ensure the main thread 
            //can fully initialize the print dialog 
            Task.Factory.StartNew(() => 
            {
                Thread.Sleep(1000);//We need to wait before we can send enter
                //This assumes that the print preview is still in focus
                Action g = () =>
                {
                    SendKeys.SendWait("{ENTER}");
                };
                this.Invoke(g);
            });
        };
    }
0
yoel halb

あなたが持っている場合 Adobe Readerがインストールされている場合、デフォルトのプリンタとして設定することができます。そしてボイラ! PDFに印刷できます!

printDocument1.PrinterSettings.PrinterName = "Adobe PDF";
printDocument1.Print();

それと同じくらい簡単!

0
PiggyChu515

Pdfsharpやmigradocのような通常の容疑者はそれができないようです(pdfsharpはAcrobat(Reader)がインストールされている場合のみ)。

ここで見つけた

https://vishalsbsinha.wordpress.com/2014/05/06/how-to-programmatically-c-net-print-a-pdf-file-directly-to-the-printer/

コピー/貼り付けの準備ができたコード。それはデフォルトのプリンターを使用し、私が見ることができるものからは、ライブラリーさえも使用せず、直接プリンターにpdfバイトを送信します。だから私はプリンタもそれをサポートする必要があると思います、私がこれをテストした10歳のプリンタで完璧に動作しました。

他のほとんどのアプローチ-商用ライブラリまたはアプリケーションなし-では、印刷デバイスのコンテキストで自分自身を描く必要があります。実行可能ですが、それを把握してプリンタ間で機能させるにはしばらく時間がかかります。

0
Andreas Reiff

Ultimate PDFの直感的なAPIを使用して、数行のコードでAcrobat PDFドキュメントを開き、インポート、編集、マージ、変換します。 C#で記述された100%マネージコードを使用することにより、コンポーネントは.NET Frameworkの多数の組み込み機能を利用してパフォーマンスを向上させます。さらに、ライブラリはCLSに準拠しており、最小限の許可要件のために安全でないブロックを使用しません。クラスは、学習曲線を短縮するのに役立つ詳細なサンプルコードで完全に文書化されています。開発環境がVisual Studioの場合は、オンラインドキュメントの完全な統合をお楽しみください。キーワードをマークまたは選択してVisual Studio IDEでF1キーを押すと、オンラインドキュメントがすぐに表示されます。数行のコードで.NETアプリケーションにPDF機能を簡単に追加できる、高性能で信頼性の高いPDFライブラリ。

NET用PDFコンポーネント

0
alexanoid

C#からpdfを自動的に印刷する最良の方法は、プリンターの「直接pdf」を使用することです。 pdfファイルをプリンターのネットワーク共有名にコピーするだけです。残りはプリンター自体が処理します。

速度は、他のどの方法よりも10倍高速です。ただし、要件は、ダイレクトPDF印刷をサポートし、最新のプリンターで簡単に使用できる128 MB以上のDramを備えたプリンターモデルです。

0
Thái Linh

印刷しようとしているものによって異なります。サードパーティのpdfプリンターアプリケーションが必要です。独自のデータを印刷する場合は、Visual Studioのレポートビューアーを使用できます。レポートをExcelおよびpdfファイルに出力できます。

0
Dave81