ゴール
既存の Microsoft .docx (または.doc) ドキュメントを読み込んで Adobe PDF ファイルに変換できる C# コマンドライン プログラムを作成する。
要件
- Microsoft Windows 7 それ以降
- Microsoft Visual Studio
- Accusoft ImageGear .NET 開発ツールキット (無料試用版のダウンロードはこちら)
プログラミング スキル
- Visual C# 中級レベル
Microsoft Word ドキュメントを PDF に変換したいですか?
これは簡単です: [ファイル]> [エクスポート]> [PDF/XPS ドキュメントの作成]> [発行]をクリックします。 でも、これを 1,000回したいですか?
いいえ。 複数のドキュメントがある場合は、このプロセスは面倒です。
そのため、C# を使って Docx や Doc ファイルをプログラムで PDF に変換して、数百のドキュメントを数秒で変換することができます。
Docx to PDF の SDK をインストールする (ImageGear)
まず、Word から PDF へのファイル変換を大量に処理するための .NET SDK をインストールする必要があります。 以下の例は Microsoft Visual Studio 2017 を使用しますが、Visual Studio 2010 までの以前のバージョンを使用することができます。(利用する Visual Studio のバージョンにより、メニューが異なることがあります)
- Visual Studio をインストールしたら、Accusoft ImageGear の Web ページにアクセスして、.NET 用のバージョンをダウンロードします。 ご覧のように、Java、C、および C++ の好きな開発プラットフォームに適合するようにサポートされています。 ここでは、.NETインストーラをダウンロードします。
- Accusoft ImageGear 開発ツールキット インストーラを実行します。 追加のライブラリをダウンロードするので少し時間がかかります。
- OK – インストールが完了しました! コーディングしてみましょう!
ImageGear 開発ツールキットは、ファイル システムのパブリック ドキュメントにファイルが保存されています (通常は “C:\Users\Public\Documents\Accusoft” にあります)。 それらを参照します。
プロジェクトをセットアップする
ツールキットをインストールしたら、新しい C# プロジェクトを作成しましょう。 このプロジェクトでは、C# コマンドライン プログラムを実行するだけで、Windows Form または WPF で GUI を構築する必要はなく、プログラムの内容に慣れることができます。 しかし、ここでそれを取得したら、このクラスを好きな他の .NET プロジェクトにインポートすることができます。
[ファイル – 新規作成 – プロジェクト] をクリックし、[Visual C#] リストから [コンソールアプリ (.NET Framework)] を選択します。
簡単にするために、プロジェクトに 「ImageGearConversionDemo」 という名前を付けます。
Visual Studio でプロジェクトを開始したら、NuGet を使用して必要な参照ファイルを追加できます。
- Visual Studio内で、[ツール]、[NuGet パッケージ マネージャー]、[ソリューションの NuGet パッケージの管理] の順にクリックします。
- パッケージソースに nuget.org が設定されていることを確認します。
- [参照] を選択し、検索ウィンドウに 「ImageGear」 と入力します。 プロジェクトによって異なるインストール オプションが表示されます。 もっと簡単にするために、「Accusoft.ImageGear.All」 を選択すると、1つですべての問題を解決できます。 または、必要なものだけを指定することもできます: ImageGear.Core、ImageGear.Evaluation、ImageGear.Formats、ImageGear.Formats.Office、およびImageGear.Formats.PDF。 適用するプロジェクトをクリックし、[インストール] をクリックすると、NuGet が詳細を処理します。
- 「Solutions Explorer」 ウィンドウから、NuGet がプロジェクトに必要な参照を自動的に追加したことも確認できます:次に、ドキュメント変換を行うコンポーネントが適切に配置されていることを確認します。
- [プロジェクト] をクリックし、次に [プロパティ] をクリックします。この例の場合、[ImageGearConversionDemo のプロパティ] になります。 [ビルド] ページをクリックします。 プラットフォーム ターゲットが 「x64」 で、出力ディレクトリが 「bin\Debug」 であることを確認してください。
-
ツールキットのインストールディレクトリに、デフォルトのインストールでは、C:\Users\Public\Documents\Accusoft\ImageGear.NET v24\Bin\x64 フォルダがあります。 このフォルダ全体を Debug ディレクトリにコピーします。
さらに簡単にするために、プログラムの実行方法のプロジェクト プロパティを設定しましょう。 [デバッグ] タブをクリックします。 最終的なプログラムは 2つのパラメータを持つ予定です:
– 変換する DOCX ファイル
– DOCX ファイルから変換される PDF ファイル
Visual Studio でコマンド ライン引数を設定するには、ソリューション エクスプローラでプロジェクトを右クリックし、[プロパティ > デバッグ] に進みます。 使用する 2つのファイル名を入れてください。 このケースでは、TheGreatestDocInTheWorld.docx を使用してTheGreatestDocInTheWorld.pdf を出力します。 引数としてそれらを設定し、作業ディレクトリはプログラムを生成しているところなので、Debug フォルダにあることを確認してください。
ImageGear 参照をプログラムに手動で追加する場合は、Accusoft ImageGear .NET のドキュメントの手順を利用してください。
これで、コーディングが可能になりました!
なお、GUI ベースのサンプル プロジェクトは、下記のフォルダにインストールされています。
C:\Users\Public\Documents\Accusoft\ImageGear.NET v24\Samples\Source Code\C#\VS2017\PDF\ConvertDOCXtoPDF
その他たくさんのサンプル プロジェクトがインストールされています。 C:\Users\Public\Documents\Accusoft\ImageGear.NET v24\Samples\Source Code
C# サンプル コード
ImageGear の Word から PDF への変換機能をテストするための C# コードは次のとおりです。 .docx ファイルと .doc ファイルで動作します。 このコードをコピー/ペーストして開始することもできます (無料試用版のImageGear も必要です)。 または、コードのチュートリアルをスクロールしてください。
using ImageGear.Core; using ImageGear.Evaluation; using ImageGear.Formats; using ImageGear.Formats.Office; using ImageGear.Formats.PDF; using System.IO; using System; namespace MyProgram { /* * This class acts as a simple method for converting documents from DocX format to PDF format. * * */ class DocConverter { {{ //Initialize the license – save time later as the program runs public DocConverter() { // Initialize evaluation license. ImGearEvaluationManager.Initialize(); ImGearEvaluationManager.Mode = ImGearEvaluationMode.Watermark; // Initialize common formats //Console.WriteLine(“Initializing the format.”); ImGearCommonFormats.Initialize(); } /* * SaveAs function: takes 3 arguments. * * This function has no exception handling, so be sure the files exist and are proper formats * * fileIn: The docx document to be converted to a pdf. * fileOut: The pdf file to be output. * verbose: True – write command line statements. False – stay silent * * * */ public void SaveDocxAsPDF(string fileIn, string fileOut, bool verbose = false) { //set the filters ImGearFileFormats.Filters.Add(ImGearOffice.CreateWordFormat()); //Console.WriteLine(“PDF Document additions.”); ImGearFileFormats.Filters.Add(ImGearPDF.CreatePDFFormat()); ImGearPDF.Initialize(); using (FileStream inStream = new FileStream(fileIn, FileMode.Open, FileAccess.Read)) { using (FileStream outStream = new FileStream(fileOut, FileMode.Create, FileAccess.Write)) { int startPageNumber = 0; // Load Office document. if (verbose == true) Console.WriteLine(Reading the document ” + fileIn); ImGearDocument igDocument = ImGearFileFormats.LoadDocument(inStream); // Save PDF, overwrite the file if it’s already there. if (verbose == true) Console.WriteLine(Writing the PDF + fileOut); ImGearPDFSaveOptions pdfOptions = new ImGearPDFSaveOptions(); ImGearFileFormats.SaveDocument(igDocument, outStream, startPageNumber, ImGearSavingModes.OVERWRITE, ImGearSavingFormats.PDF, pdfOptions); } } // Dispose of the PDF component. if (verbose == true) Console.WriteLine("Terminate the PDF"); ImGearPDF.Terminate(); } static void Main(string[] args) { Console.WriteLine("Starting the conversion program."); DocConverter docx2pdf = new DocConverter(); //check to make sure we have two arguments – file 1 and file 2 if (args.Length == 2) { //make sure that the files exist if (File.Exists(args[0])) { docx2pdf.SaveDocxAsPDF(args[0], args[1], true); } else { Console.WriteLine("File does not exist"+ args[0]); } } else { Console.WriteLine("Not enough arguments"); for (int i = 0; i < args.Length; i++) Console.WriteLine(args[i]); } //requests the user hit enter to end the program Console.WriteLine("Conversion complete."); Console.WriteLine("Hit Enter to terminate."); Console.ReadLine(); } } }
Word to PDF の C# コードを理解する
C# プログラムの最初の部分は、名前空間をインポートします。 NuGet を使用した場合は、必要なすべての参照があります。 しかし、プログラムは宣言され、使用できるようにする必要があります。 API コールの詳細については、ImageGear User Guide を参照してください。 ここで必要な名前空間は次のとおりです。
[csharp]using ImageGear.Core;
using ImageGear.Evaluation;
using ImageGear.Formats;
using ImageGear.Formats.Office;
using ImageGear.Formats.PDF;
using using System.IO;
using System;[/csharp]
ImageGear.Formats.Office と ImageGear.Formats.PDF は、ここでの作業の大部分を提供するものです。 それらは docx を読み込み、pdf ファイルに書き込むことができます。
変換のクラスを処理するために、単純なクラスを作成し、それをDocConverter と名付けます。 この例では、SaveDocXAsPdf という 1つのメソッドだけを実装します。
[csharp]class DocConverter
{
public void SaveDocXAsPDF(string fileIn, string fileOut, bool verbose = false)
{
…[/csharp]
SaveDocXAsPDF には、2つの必須の引数と、この例でコンソール出力を制御するオプションの引数が 1つあります。 それらはそこにあるので、プログラムのステップを追跡することができます。 デフォルトでは表示されません。
何かをする前に、ライセンスを初期化する必要があります。 このデモンストレーションでは評価版を使用しますが、既にライセンスをお持ちの場合は、Accusoft ImageGear .NET の操作手順ページに従ってください。
[csharp]// Initialize evaluation license.
ImGearEvaluationManager.Initialize();
ImGearEvaluationManager.Mode = ImGearEvaluationMode.Watermark;[/csharp]
次に行うべきことは、ImageGearファイルフォーマット (この場合は Microsoft Word) を初期化することです。 別の例では、それを他のファイル形式に拡張する方法を示します。
また、ImageGear PDF オブジェクトを初期化します。 これは重要なステップです: ImageGear PDF オブジェクトを初期化するときは、後で終了させる必要があります。 プログラムでは、以下のようにします。
[csharp]ImGearPDF.Initialize();
//SOME CODE HERE
ImGearPDF.Terminate();[/csharp]
ImGearPDF は、自己終了する典型的な C# オブジェクトではないので、終了していることを確認してください。
これで、.doc/.docx ファイルの実際の読み込みと PDF ファイルの書き込みは非常に簡単になります:
[csharp]using (FileStream inStream = new FileStream(fileIn, FileMode.Open, FileAccess.Read))
{
if (verbose == true)
Console.WriteLine(“Writing the PDF “+fileOut);
using (FileStream outStream = new FileStream(fileOut, FileMode.Create, FileAccess.Write))
{
int startPageNumber = 0;
// Load Office document.
ImGearDocument igDocument = ImGearFileFormats.LoadDocument(inStream);
// Save PDF, overwrite the file if it’s already there.
ImGearPDFSaveOptions pdfOptions = new ImGearPDFSaveOptions();
ImGearFileFormats.SaveDocument(igDocument, outStream, startPageNumber, ImGearSavingModes.OVERWRITE, ImGearSavingFormats.PDF, pdfOptions);
}[/csharp]
コードに従えば、プロセスは簡単です。 プログラムを静かにしたい場合は、 “詳細” オプションをオンにして、コンソール出力をオフにすることを覚えておいてください。
まず、ファイル入力ストリームとファイル出力ストリームを作成します。 Office ドキュメントは変数 igDocument にロードされます。 次に、ファイルをエクスポートするために使用される pdfOptions を設定します。 最後に、ファイルを書き出します。 すでに同じ名前の PDF ファイルがある場合は、上書きします。
実際に C# Docx から Pdf へのコードを見てみましょう:
新しい PDF を Microsoft Word の書き出しオプションを使用して作成したPDF と比較すると、ImageGear によって作成されるファイルは、383 KB と504 KB で小さくなります。 ImageGear で生成された PDF ファイルは、内部リンクと書式設定をすべて保持しています。
DOCX を PDF に変換することは、ImageGear ができることのほんの一部分です。 ImageGear は、変換、編集、圧縮などのための 100 以上のファイル フォーマットをサポートしています。詳細については、ImageGear の概要ページをご覧ください。