C#小票打印机动态纸张尺寸
using
System;
using
System.Collections.Generic;
using
System.ComponentModel;
using
System.Data;
using
System.Drawing;
using
System.Drawing.Printing;
using
System.Linq;
using
System.Text;
using
System.Threading.Tasks;
using
System.Windows.Forms;
namespace
pdPrint
{
public
partial
class
Form1 : Form
{
private
int
lineSize;
//每行打印字数
private
List<
string
> textList;
//打印内容行
private
int
lineHeight;
//打印行高
private
int
fontSize;
//字大小
public
Form1()
{
lineSize = 20;
//设置每行打印字数
lineHeight = 22;
//行高 1/100 英寸
fontSize = 12;
//字体大小 1/英寸
InitializeComponent();
}
private
void
btn_Print_Click(
object
sender, EventArgs e)
{
if
(
string
.IsNullOrWhiteSpace(
this
.txt_PrintText.Text))
{
return
;
}
//原文字行或者段落内容
var
sourceTexts =
this
.txt_PrintText.Text.Split(
new
string
[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries);
//重新把文字进行分行树立
textList =
new
List<
string
>();
foreach
(
var
item
in
sourceTexts)
{
if
(!
string
.IsNullOrWhiteSpace(item))
{
if
(item.Length > lineSize)
{
textList.AddRange(GetArr(lineSize, item));
}
else
{
textList.Add(item);
}
}
}
PrintDocument pd =
new
PrintDocument();
pd.PrintPage +=
new
PrintPageEventHandler(Print_Content);
//纸张设置默认
PaperSize pageSize =
new
PaperSize(
"自定义纸张"
, fontSize * lineSize, (textList.Count * lineHeight));
pd.DefaultPageSettings.PaperSize = pageSize;
try
{
pd.Print();
}
catch
(Exception ex)
{
MessageBox.Show(
"打印失败."
+ ex.Message);
}
}
/// <summary>
/// 打印内容事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private
void
Print_Content(
object
sender, PrintPageEventArgs e)
{
var
mark = 0;
foreach
(
var
item
in
textList)
{
e.Graphics.DrawString(item,
new
Font(
new
FontFamily(
"宋体"
), fontSize), System.Drawing.Brushes.Black, 0, mark * lineSize);
mark++;
}
}
/// <summary>
/// 根据内容进行分行
/// </summary>
/// <param name="linelen">每行字数</param>
/// <param name="text">原文字行(段落)文字</param>
/// <returns></returns>
private
List<
string
> GetArr(
int
linelen,
string
text)
{
var
list =
new
List<
string
>();
int
listcount = text.Length % linelen == 0 ? text.Length / linelen : (text.Length / linelen) + 1;
for
(
int
j = 0; j < listcount; j++)
{
try
{
list.Add(text.Substring(j * linelen, linelen));
}
catch
(Exception)
{
list.Add(text.Substring(j * linelen));
}
}
return
list;
}
}
}
C#小票打印机动态纸张尺寸的更多相关文章
- 小票打印机指令集封装(支持EPSON指令)
最近写了一些关于小票打印机的程序,不难,但是记录下来,作为足迹吧. 现在市场上的小票机基本都支持EPSON指令.指令集文档 对指令集进行了自己的封装,方便以后调用: package aheiziUti ...
- Java读取打印机自定义纸张.
打印出现截断? 对于自定义纸张打印, 一定要先在打印机配置那边添加, 不然会出现截断. 例如打印1000*500, 出来是正常的, 打印216*139, 出现了截断. 因为java默认的打印, 会从打 ...
- 让 Odoo POS 支持廉价小票打印机
为了测试 Odoo 在实际业务中的实施,我们开了一家(马上要开第二家分店)猪肉店.由于预算有限,在实施 Odoo PoS 的时候采购了一台价格为 85 元的爱宝热敏打印机,结果连上 Odoo Posb ...
- C#并口热敏小票打印机打印位图包括芯片的写入
下面是打印所需要调用的代码: class LptControl { private string LptStr = "lpt1"; public LptControl(string ...
- C# Lpt 并口热敏小票打印机打印位图
class LptControl { private string LptStr = "lpt1"; public LptControl(string l_LPT_Str) { L ...
- 转:C#并口热敏小票打印机打印位图
最近一直在研究并口小票打印机打印图片问题,这也是第一次和硬件打交道,不过还好,最终成功了. 这是DEMO的窗体: 下面是打印所需要调用的代码: class LptControl { private s ...
- C# 热敏打印机 小票打印机 打印图片
最近一直在研究并口小票打印机打印图片问题,这也是第一次和硬件打交道,不过还好,最终成功了. 这是DEMO的窗体: 下面是打印所需要调用的代码: 因为我们这里主要是打印条形码和二维码,所以以条形码和二维 ...
- C#并口热敏小票打印机打印位图
原文:C#并口热敏小票打印机打印位图 最近一直在研究并口小票打印机打印图片问题,这也是第一次和硬件打交道,不过还好,最终成功了. 这是DEMO的窗体: 下面是打印所需要调用的代码: class ...
- android ImageView网络图片加载、动态设置尺寸、圆角..
封装了一个关于ImageView的辅助类,该类可以方便实现网络图片下载的同时,动态设置图片尺寸.圆角.....一系列连贯的操作,无样式表,java代码实现所有功能,使用很方便. package com ...
随机推荐
- 编程之美 set 11 买书问题
题目 书店搞促销, 同时购买多卷书时, 有机会享受优惠 2本优惠 5%, 3本 10%, 4 本 20% 5 本 25% 设计算法, 求解购买一本书的最低价格 分析 1. 第一个感觉是一次购买的越多省 ...
- C语言条件运算符
如果希望获得两个数中最大的一个,可以使用 if 语句,例如: if(a>b){ max = a; }else{ max = b; } 不过,C语言提供了一种更加简单的方法,叫做条件运算符,语法格 ...
- Django学习笔记第六篇--实战练习二--简易实现登录注册功能demo
一.绪论: 简易实现登录功能demo,并没有使用默认身份验证模块,所以做的也很差,关闭了csrf保护,没有认证处理cookie和session,只是简单实现了功能.另外所谓的验证码功能是伪的. 二. ...
- 转载 hibernate一级缓存和二级缓存的区别
文章来源:http://blog.csdn.net/defonds/article/details/2308972 hibernate一级缓存和二级缓存的区别 缓存是介于应用程序和物理数据源之 ...
- LAMP集群项目二 初始化系统
1.关闭防火墙 /etc/init.d/iptables stop chkconfig iptables off 2.关闭selinux cat /etc/selinux/config #查看状态 s ...
- Spring 之注解事务 @Transactional(转载)
Spring在TransactionDefinition接口中规定了7种类型的事务传播行为, 它们规定了事务方法和事务方法发生嵌套调用时事务如何进行传播: 事务传播行为类型 事务传播行为类型 说明 P ...
- (转)MySQL百万级数据库优化
1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索 ...
- Python并行编程(四):线程同步之RLock
1.基本概念 如果想让只有拿到锁的线程才能释放该锁,那么应该使用RLock()对象.当需要在类外面保证线程安全,又要在类内使用同样方法的时候RLock()就很使用. RLock叫做Reentrant ...
- 爬虫之FileCookieJar
简介 虽然CookieJar模块能够做到给请求设置cookie,但是它的cookie是保存在内存里的,每次用都需要重新设置, 这就衍生了一个它的子类---FileCookieJar,它可以将cooki ...
- 浅谈pipreqs组件(自动生成需要导入的模块信息)
简介 pipreqs的作用 一起开发项目的时候总是要搭建环境和部署环境的,这个时候必须得有个python第三方包的list,一般都叫做requirements.txt. 如果一个项目使用时virtua ...