2011-03-24 1 views
1

열전 사 프린터에 사용자 지정 레이블을 인쇄해야합니다. 나는 모든 것을 하나의 예외로 설정하고 작업합니다 : 레이블의 롤에는 행당 두 개의 레이블이 있지만 C# 인쇄 개체는이를 볼 수 없습니다.C#의 확장 PageSize 정보

PageSize 정보를 쿼리 할 때 레이블이 3.15 "x 0.75"라고 알려줍니다. 전체 레이블에 대해 이 맞지만 각 레이블의 크기 또는 간격에 대한 정보는 제공하지 않습니다.

드라이버 ini 파일을 찾아 보면 PageSize84 = THT-6-423,3150,2,1500,750,150,125,1과 같은 줄이 있습니다. 필요한 모든 정보는이 줄 (2 열, 1500 넓이, 750 높이)에 나열되어있는 것처럼 보입니다. C#에서 액세스하는 방법을 모릅니다. 나는 오늘 웹을 수색 해왔다. 나는 운이 없었다.

나는 지금 당장 정보를 하드 코딩 할 수 있지만 제조상의 라벨을 변경하면 코드를 증명할 수 없습니다.

답변

3

값을 가져 오기 위해 ini 파일을 읽으려는 경우이 값을 사용할 수 있습니다.

IniFile.ReadIniValue ("[태그]", "서버", @ "C : \ my.ini");

#region Usings 

using System.Text; 
using System.Runtime.InteropServices; 
#endregion 

/// <summary> 
/// Communicates with ini files 
/// </summary> 
public static class IniFile 
{ 
    #region Declarations 



    #endregion 

    #region Constructor/Deconstructor 

    /// <summary> 
    /// Initializes a new instance of the <see cref="IniFile"/> class. 
    /// </summary> 
    static IniFile() 
    { 
    } 

    #endregion 

    #region Properties 



    #endregion 

    #region Win32_API 

    [DllImport("kernel32")] 
    private static extern int GetPrivateProfileString(
     string section, 
     string key, string def, 
     StringBuilder retVal, 
     int size, string filePath); 

    [DllImport("kernel32.dll", CharSet = CharSet.Unicode, SetLastError = true)] 
    [return: MarshalAs(UnmanagedType.Bool)] 
    static extern bool WritePrivateProfileString(string lpAppName, 
     string lpKeyName, string lpString, string lpFileName); 

    #endregion 

    /// <summary> 
    /// Reads the ini value. 
    /// </summary> 
    /// <param name="section">The section.</param> 
    /// <param name="key">The key.</param> 
    /// <param name="iniFilePath">The ini file path.</param> 
    /// <returns>Value stored in key</returns> 
    /// <exception cref="FileNotFoundException"></exception> 
    public static string ReadIniValue(string section, string key, string iniFilePath) 
    { 
     if(!File.Exists(iniFilePath)) 
     { 
      throw new FileNotFoundException(); 
     } 

     const int size = 255; 
     var buffer = new StringBuilder(size); 
     var len = GetPrivateProfileString(section, key, string.Empty, buffer, size, iniFilePath); 

     if (len > 0) 
     { 
      return buffer.ToString(); 
     } 
     return string.Empty; 
    } 

    /// <summary> 
    /// Writes the ini value. 
    /// </summary> 
    /// <param name="section">The section.</param> 
    /// <param name="keyname">The keyname.</param> 
    /// <param name="valueToWrite">The value to write.</param> 
    /// <param name="iniFilePath">The ini file path.</param> 
    /// <returns>true if write was successful, false otherwise</returns> 
    public static bool WriteIniValue(string section,string keyname,string valueToWrite,string iniFilePath) 
    { 
     return WritePrivateProfileString(section, keyname, valueToWrite, iniFilePath); 
    } 
} 
+1

감사합니다. – kyork

+0

나는 마음에 들지 않는 ini 파일의 경로를 하드 코딩해야했지만, 나머지는 이제 작동합니다. – kyork

+0

ini 파일의 위치에 따라 Environment.SpecialFolder를 사용하여 좀 더 동적으로 만들 수 있습니다. – Dylan