2011-03-24 4 views
1

Я должен напечатать пользовательскую метку на термопринтере. У меня есть все настройки и работа с одним исключением: рулоны меток имеют две метки в строке, но объекты печати C#, похоже, не видят этого.Расширенная информация о размере страницы в C#

Когда я запрашиваю информацию 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 ("[Tag]", "Server", @ "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

Смежные вопросы