danjumuban.cpp 9.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232
  1. #include "danjumuban.h"
  2. #include "QtPrintSupport"
  3. #include "QDateTime"
  4. #include "globalinfo.h"
  5. DanJuMuBan::DanJuMuBan()
  6. {
  7. // path = QDir::currentPath();
  8. }
  9. QImage DanJuMuBan::printBoxInfo(QString bar,QSharedPointer<BoxInfo> info)
  10. {
  11. // TODO: 测试打印出来的单子
  12. // if(datalist.isEmpty()){
  13. // return;
  14. // }
  15. QSharedPointer<PackInfo> pinfo = info->parentPack();
  16. if(pinfo.isNull()) return QImage();
  17. QSize size(MAXWIDTH*5,MAXHEIGHT*5);
  18. QImage image(size,QImage::Format_ARGB32);
  19. image.fill(qRgba(255, 255, 255, 255));
  20. QPainter painter(&image);
  21. painter.drawRect(5*5,5*5,90*5,15*5);
  22. painter.drawRect(5*5,20*5,90*5,35*5);
  23. painter.drawLine(20*5,20*5,20*5,55*5);
  24. painter.drawLine(50*5,20*5,50*5,55*5);
  25. painter.drawLine(66*5,20*5,66*5,55*5);
  26. painter.drawLine(5*5,27*5,95*5,27*5);
  27. painter.drawLine(5*5,34*5,95*5,34*5);
  28. painter.drawLine(5*5,41*5,95*5,41*5);
  29. painter.drawLine(5*5,48*5,95*5,48*5);
  30. painter.drawRect(5*5,55*5,90*5,15*5);
  31. painter.drawRect(5*5,70*5,90*5,7*5);
  32. QRect target(0*5, 57*5, 100*5, 65*5);
  33. // QRect source(-10*5, 0, 65*5, 40*5);
  34. barCode.draw(painter,target,bar);
  35. // painter.drawImage(target,barCode.draw(barCode.CodeBinary(bar),bar),source);
  36. painter.setRenderHint(QPainter::Antialiasing,true);
  37. painter.setRenderHint(QPainter::TextAntialiasing,true);
  38. painter.setRenderHint(QPainter::HighQualityAntialiasing,true);
  39. QFont font;
  40. font.setFamily("宋体");
  41. font.setPixelSize(40);
  42. font.setWeight(QFont::ExtraLight);
  43. painter.setFont(font);
  44. painter.drawText(6*5,15*5,pinfo->info().customer);
  45. qDebug()<<pinfo->info().customer;
  46. font.setPixelSize(20);
  47. font.setBold(true);
  48. painter.setFont(font);
  49. painter.drawText(8*5,25*5,QStringLiteral("品名"));
  50. painter.drawText(53*5,25*5,QStringLiteral("毛重"));
  51. painter.drawText(8*5,32*5,QStringLiteral("批号"));
  52. painter.drawText(53*5,32*5,QStringLiteral("净重"));
  53. painter.drawText(8*5,39*5,QStringLiteral("规格"));
  54. painter.drawText(53*5,39*5,QStringLiteral("筒数"));
  55. painter.drawText(8*5,46*5,QStringLiteral("等级"));
  56. painter.drawText(53*5,46*5,QStringLiteral("捻向"));
  57. painter.drawText(8*5,53*5,QStringLiteral("箱号"));
  58. painter.drawText(50*5,53*5,QStringLiteral("纸管颜色"));
  59. painter.drawText(21*5,25*5,pinfo->info().product_type_code);
  60. painter.drawText(21*5,32*5,pinfo->info().batch_no);
  61. painter.drawText(21*5,39*5,pinfo->info().specs);
  62. painter.drawText(67*5,25*5,QString("%1 kg").arg(info->gross_weight / 1000.00));//datalist.at(0));
  63. painter.drawText(67*5,32*5,QString("%1 kg").arg(info->net_weight / 1000.00));//datalist.at(1));
  64. painter.drawText(67*5,39*5,QString::number(info->tube_number));//datalist.at(2));
  65. painter.drawText(21*5,46*5,QString::number(pinfo->level_id));//datalist.at(3));
  66. painter.drawText(67*5,46*5,pinfo->info().twist_type);//datalist.at(4));
  67. painter.drawText(67*5,53*5,pinfo->info().bucket_color);//datalist.at(6));
  68. font.setPixelSize(17);
  69. painter.setFont(font);
  70. painter.drawText(21*5,53*5,info->caseNumber());//datalist.at(5));
  71. // painter.drawText(4*5,75*5," 电话"+telephone+"传真"+fax);
  72. // print(image);
  73. return image;
  74. // image.save(path+"\\xiangdan\\code"+bar+".bmp");
  75. }
  76. QImage DanJuMuBan::printPackInfo(QString bar, QSharedPointer<PackInfo> info)
  77. {
  78. // TODO: 测试打印出来的单子
  79. QSize size(MAXWIDTH*5,MAXHEIGHT*5);
  80. QImage image(size,QImage::Format_ARGB32);
  81. image.fill(qRgba(255, 255, 255, 255));
  82. QPainter painter(&image);
  83. painter.drawRect(4*5,4*5,92*5,68*5);
  84. painter.drawLine(50*5,0,50*5,80*5);
  85. painter.drawLine(4*5,16*5,96*5,16*5);
  86. painter.drawLine(4*5,22*5,96*5,22*5);
  87. painter.drawLine(4*5,28*5,96*5,28*5);
  88. painter.drawLine(4*5,34*5,96*5,34*5);
  89. painter.drawLine(4*5,40*5,96*5,40*5);
  90. painter.drawLine(4*5,46*5,96*5,46*5);
  91. painter.drawLine(4*5,52*5,96*5,52*5);
  92. painter.drawLine(4*5,58*5,96*5,58*5);
  93. painter.drawLine(4*5,65*5,96*5,65*5);
  94. QFont font;
  95. font.setFamily("宋体");
  96. font.setPixelSize(30);
  97. font.setWeight(QFont::ExtraLight);
  98. painter.setFont(font);
  99. painter.drawText(38*5,10*5,QStringLiteral("入 库 单"));
  100. font.setPixelSize(20);
  101. painter.setFont(font);
  102. painter.drawText(8*5,15*5,QStringLiteral("规格:"));
  103. painter.drawText(59*5,15*5,QStringLiteral("类型:"));
  104. painter.drawText(8*5,21*5,QStringLiteral("批号:"));
  105. painter.drawText(59*5,21*5,QStringLiteral("等级:"));
  106. font.setPixelSize(15);
  107. painter.setFont(font);
  108. int boxSize = info->boxes().size();
  109. for(int i = 0; i < boxSize; ++i){
  110. int line = i / 5;
  111. int cloun = i % 5;
  112. painter.drawText((9 + line * 19)*5,(27 + cloun * 6)*5,QString("%1.").arg(i + 1));
  113. }
  114. // painter.drawText(9*5,27*5,QStringLiteral("1."));
  115. // painter.drawText(9*5,33*5,QStringLiteral("2."));
  116. // painter.drawText(9*5,39*5,QStringLiteral("3."));
  117. // painter.drawText(9*5,45*5,QStringLiteral("4."));
  118. // painter.drawText(9*5,51*5,QStringLiteral("5."));
  119. // painter.drawText(9*5,57*5,QStringLiteral("6."));
  120. // painter.drawText(28*5,27*5,QStringLiteral("7."));
  121. // painter.drawText(28*5,33*5,QStringLiteral("8."));
  122. // painter.drawText(28*5,39*5,QStringLiteral("9."));
  123. // painter.drawText(28*5,45*5,QStringLiteral("10."));
  124. // painter.drawText(28*5,51*5,QStringLiteral("11."));
  125. // painter.drawText(28*5,57*5,QStringLiteral("12."));
  126. // painter.drawText(47*5,27*5,QStringLiteral("13."));
  127. // painter.drawText(47*5,33*5,QStringLiteral("14."));
  128. // painter.drawText(47*5,39*5,QStringLiteral("15."));
  129. // painter.drawText(47*5,45*5,QStringLiteral("16."));
  130. // painter.drawText(47*5,51*5,QStringLiteral("17."));
  131. // painter.drawText(47*5,57*5,QStringLiteral("18."));
  132. // painter.drawText(66*5,27*5,QStringLiteral("19."));
  133. // painter.drawText(66*5,33*5,QStringLiteral("20."));
  134. // painter.drawText(8*5,64*5,QStringLiteral("总数"));
  135. // painter.drawText(38*5,64*5,QStringLiteral("总重量"));
  136. // painter.drawText(68*5,64*5,QStringLiteral("总筒数"));
  137. QRect target(0*5, 67*5, 100*5, 60*5);
  138. barCode.draw(painter,target,bar);
  139. // QRect source(-10*5, 0, 60*5, 40*5);
  140. // painter.drawImage(target,barCode.draw(barCode.CodeBinary(bar),bar),source);
  141. // barCode.draw(barCode.CodeBinary(bar),bar,&image);
  142. font.setPixelSize(20);
  143. font.setFamily("黑体");
  144. // font.setBold(true);
  145. painter.setFont(font);
  146. painter.drawText(19*5,15*5,info->info().specs);//QStringLiteral("规格"));
  147. painter.drawText(70*5,15*5,info->info().category);//QStringLiteral("类型"));
  148. painter.drawText(19*5,21*5,info->info().batch_no);//QStringLiteral("批号"));
  149. painter.drawText(70*5,21*5,QString::number(info->level_id));//info.at(0));
  150. for(int i = 0; i < boxSize; ++i)
  151. {
  152. QString code = QString::number(info->boxes().at(i)->net_weight);
  153. int line = i / 5;
  154. int cloun = i % 5;
  155. painter.drawText((13 + line * 19)*5,(27.5 + cloun * 6 )*5 ,code);
  156. }
  157. /*
  158. painter.drawText(13*5,27.5*5,info.at(1));
  159. painter.drawText(13*5,33.5*5,info.at(2));
  160. painter.drawText(13*5,39.5*5,info.at(3));
  161. painter.drawText(13*5,45.5*5,info.at(4));
  162. painter.drawText(13*5,51.5*5,info.at(5));
  163. painter.drawText(13*5,57.5*5,info.at(6));
  164. painter.drawText(32*5,27.5*5,info.at(7));
  165. painter.drawText(32*5,33.5*5,info.at(8));
  166. painter.drawText(32*5,39.5*5,info.at(9));
  167. painter.drawText(32*5,45.5*5,info.at(10));
  168. painter.drawText(32*5,51.5*5,info.at(11));
  169. painter.drawText(32*5,57.5*5,info.at(12));
  170. painter.drawText(51*5,27.5*5,info.at(13));
  171. painter.drawText(51*5,33.5*5,info.at(14));
  172. painter.drawText(51*5,39.5*5,info.at(15));
  173. painter.drawText(51*5,45.5*5,info.at(16));
  174. painter.drawText(51*5,51.5*5,info.at(17));
  175. painter.drawText(51*5,57.5*5,info.at(18));
  176. painter.drawText(70*5,27.5*5,info.at(19));
  177. painter.drawText(70*5,33.5*5,info.at(20));
  178. */
  179. painter.drawText(15*5,64*5,QString::number(info->boxes().size()));
  180. painter.drawText(48*5,64*5,QString("%1 kg").arg(info->net_weight() / 1000.00));
  181. painter.drawText(78*5,64*5,QString::number(info->tube_number()));
  182. // print(image);
  183. // image.save(path+"\\rukudan\\code"+bar+".bmp");
  184. return image;
  185. }
  186. void DanJuMuBan::print(QImage image)
  187. {
  188. QPrinter printer;
  189. printer.setPageSize(QPrinter::Custom);
  190. printer.setPageSizeMM(QSizeF(100,70));
  191. printer.setPrinterName(GlobalInfo::this_()->config().printerName);
  192. QPainter painter(&printer); // 创建一个QPainter对象,并指定绘图设备为一个QPainter对象
  193. QRect rect =painter.viewport(); // 获得QPainter对象的视图矩形区域
  194. QSize size(image.width(),image.height()); // 获得图像的大小
  195. /* 按照图形的比例大小重新设置视图矩形区域 */
  196. size.scale(rect.size(),Qt::KeepAspectRatio);
  197. painter.setViewport(rect.x(),rect.y(),size.width()+50,size.height());
  198. painter.setWindow(image.rect()); // 设置QPainter窗口大小为图像的大小
  199. painter.drawImage(0,0,image); // 打印图像
  200. // }
  201. }