Layout Utilitiesを利用したアプリの初回印刷を早くできますか?


以下の 2つの改善案がありますので、お試しください。
なお、ご利用環境によっては改善が見られない場合があります。ご了承ください。

案1. ご利用の PC において、利用しないプリンターの削除を行ってください。
インストール済みのプリンターが少ないほど処理時間が短縮化されます。
具体的には、

Windows 7
「スタート」>「デバイスとプリンター」>利用しないプリンターを右クリック >
「デバイスの削除」>「はい」

Windows XP
「スタート」>「プリンタとFAX」>利用しないプリンターを右クリック >
「削除」>「はい」



案2. 作成したアプリでライブラリや CLF レイアウトファイルの事前読み込みを行ってください。
具体的には、以下の BeforePrintAppStart() を呼び出してください。

--[C#]--
[System.Runtime.InteropServices.DllImport("kernel32", CharSet = System.Runtime.InteropServices.CharSet.Unicode, SetLastError = true)]
extern static IntPtr LoadLibrary(string lpLibFileName);

[System.Runtime.InteropServices.DllImport("kernel32", SetLastError = true)]
extern static bool FreeLibrary(IntPtr hLibModule);

private IntPtr[] pDLLs;
private string[] libs = {
"AxInterop.QRMAKERADLib.dll",
"Citizen.LayoutUtilities.Common.dll",
"Citizen.LayoutUtilities.Printing.dll",
"GrapeSystems.Core.Common.dll",
"GrapeSystems.Core.Drawing.Fx20.dll",
"GrapeSystems.Core.Parts.dll",
"GrapeSystems.Core.Parts.Frames.dll",
"GrapeSystems.Library.BarcodeAd.dll",
"GrapeSystems.Library.Controls.dll",
"GrapeSystems.Library.Image.dll",
"Interop.QRMAKERADLib.dll",
"System.Drawing.dll",
};

// LayoutPrintEngineのインスタンス
private Citizen.LayoutUtilities.Printing.Controller clpc;

// CLFファイルパス
private const string CLF_FILE_PATH = "Layout1.CLF";

/// <summary>
/// 印刷アプリ開始前処理
/// </summary>
private void BeforePrintAppStart()
{
//
loadLibrarys();
//
loadClfFile(CLF_FILE_PATH);
}

/// <summary>
/// 印刷アプリ終了後処理
/// </summary>
private void AfterPrintAppExit()
{
//
freeLibrarys();
}

/// <summary>
/// 関連ライブラリのロード
/// </summary>
private int loadLibrarys()
{
int count = 0;

if (libs == null) return count;

pDLLs = new IntPtr[libs.Length];

int index = 0;
foreach (string lib in libs)
{
IntPtr ptr = pDLLs[index++] = LoadLibrary(lib);
if (ptr != IntPtr.Zero)
{
count++;
}
}
return count;
}

/// <summary>
/// 関連ライブラリの開放
/// </summary>
private int freeLibrarys()
{
int count = 0;

if (pDLLs == null) return count;

int index = 0;
foreach (IntPtr ptr in pDLLs)
{
if (ptr != IntPtr.Zero)
{
FreeLibrary(ptr);
pDLLs[index] = IntPtr.Zero;
count++;
}
index++;
}
return count;
}

/// <summary>
/// CLF ファイルのダミーロード
/// </summary>
private int loadClfFile(string clfFile)
{
int result = -1;

if (clpc == null)
{
clpc = new Citizen.LayoutUtilities.Printing.Controller();
}

result = clpc.Open(clfFile);
if (result == 0)
{
clpc.BeginPrint();
clpc.EndPrint();
clpc.Close();
}

return result;
}
--[C#]--

このエントリーにコメントできません。