161 lines
4.6 KiB
C++
161 lines
4.6 KiB
C++
#include "TowelCreater.h"
|
|
#include <QTextCodec>
|
|
#include <QTextStream>
|
|
#include <qDebug>
|
|
#include <QMessageBox>
|
|
#include <QDateTime>
|
|
|
|
|
|
|
|
static QString LABEL_BG_PATH[] = { ":/NameCreater/resource/girl_bg.jpg",":/NameCreater/resource/boy_bg.jpg" };
|
|
static qreal LABEL_POS_X[] = { 250,1645,3300 };
|
|
|
|
static qreal LABEL_POS_Y_START = 120;
|
|
static qreal LABEL_POS_Y_DIFF = 315;
|
|
|
|
|
|
static qreal NAME_OFFSET_X[] = { 128, 715 };
|
|
static qreal NAME_OFFSET_Y = 38;
|
|
static qreal NAME_TWO_WORD_OFFSET = 25;
|
|
|
|
static int MAX_LABEL_IN_PAPER = 15;
|
|
static int LABEL_MAX_NUM_PER_COL = 7;
|
|
static int FONT_PIXEL_SIZE = 240;
|
|
|
|
static qreal LABEL_HIGHT_LIMIT = 350;
|
|
static int TEXT_WIDTH = 800;
|
|
|
|
TowelCreater::TowelCreater()
|
|
{
|
|
}
|
|
|
|
TowelCreater::~TowelCreater()
|
|
{
|
|
}
|
|
|
|
QList<NameInfo_t> TowelCreater::getNameByFileContent(Name_Type_e type, const QByteArray& conetent)
|
|
{
|
|
|
|
QList<NameInfo_t> nameList;
|
|
|
|
QTextCodec* tc = QTextCodec::codecForName("Big5");
|
|
QString codec = tc->toUnicode(conetent.data());
|
|
QTextStream stream(&codec);
|
|
|
|
int row = 0;
|
|
while (!stream.atEnd())
|
|
{
|
|
|
|
QString line = stream.readLine();
|
|
QString name_tc = line;
|
|
QStringList csvList = name_tc.split(',');
|
|
|
|
|
|
QString name = csvList.at(0); //QString::fromLocal8Bit(csvList.at(0));
|
|
QString bg_type = csvList.at(1);//QString::fromLocal8Bit(csvList.at(1));
|
|
int num = csvList.last().toInt();//QString::fromLocal8Bit(csvList.last());
|
|
qDebug() << "row :" << row << " " << name << ", bg_type: " << bg_type << "Count: " <<QString::number(num);
|
|
|
|
if (name.compare("name") == 0) {
|
|
//pass first line
|
|
continue;
|
|
}
|
|
else {
|
|
for (int i = 0; i < num; ++i) {
|
|
NameInfo_t info;
|
|
info.name1 = name;
|
|
info.bg_type = (bg_type.compare("g") == 0) ? 0 : 1;
|
|
nameList.append(info);
|
|
}
|
|
|
|
}
|
|
row++;
|
|
}
|
|
return nameList;
|
|
|
|
}
|
|
|
|
void TowelCreater::generaImageFromCSV(Name_Type_e type, const QString& filename, const QByteArray& filecontent, const QFont& font, const QColor& font_color)
|
|
{
|
|
int export_times = 0;
|
|
|
|
QList<NameInfo_t> nameList = getNameByFileContent(type, filecontent);
|
|
if (nameList.isEmpty()) {
|
|
QMessageBox msgBox;
|
|
msgBox.setText(QString("Name is empty ! ").append(filename));
|
|
msgBox.exec();
|
|
}
|
|
|
|
QGraphicsScene scene;
|
|
scene.setBackgroundBrush(QBrush(QColor(255, 255, 255)));
|
|
QGraphicsView view(&scene);
|
|
|
|
|
|
for (int idx = 0; idx < nameList.length(); idx++) {
|
|
NameInfo_t name = nameList.at(idx);
|
|
if ((idx % MAX_LABEL_IN_PAPER) == 0) {
|
|
QGraphicsRectItem* bg_item = new QGraphicsRectItem(0, 0, BG_WIDTH, BG_HEIGHT);
|
|
bg_item->setBrush(QBrush(QColor(255, 255, 255)));
|
|
//QGraphicsPixmapItem* bg_item = QGraphicsPixmapItem(QPixmap(BG_SMAPLE_PATH));
|
|
scene.addItem(bg_item);
|
|
|
|
}
|
|
|
|
int col_idx = (idx % MAX_LABEL_IN_PAPER) / LABEL_MAX_NUM_PER_COL;
|
|
int col_num = (idx % MAX_LABEL_IN_PAPER) % LABEL_MAX_NUM_PER_COL;
|
|
|
|
QString label_rel_path = LABEL_BG_PATH[name.bg_type];
|
|
|
|
if (col_idx < 2) {
|
|
QGraphicsPixmapItem* label_item = new QGraphicsPixmapItem(QPixmap(label_rel_path));
|
|
label_item->setPos(LABEL_POS_X[col_idx], LABEL_POS_Y_START + LABEL_POS_Y_DIFF * col_num);
|
|
label_item->setOpacity(1);
|
|
scene.addItem(label_item);
|
|
|
|
for (int i = 0; i < 2; ++i) {
|
|
qreal offset_x = name.name1.count() == 2 ? NAME_TWO_WORD_OFFSET : 0;
|
|
QGraphicsTextItem* name_item = new QGraphicsTextItem(name.name1);
|
|
name_item->setTextWidth(TEXT_WIDTH);
|
|
name_item->setFont(font);
|
|
name_item->setDefaultTextColor(font_color);
|
|
name_item->setPos(label_item->x() + NAME_OFFSET_X[i] + offset_x, label_item->y() + NAME_OFFSET_Y);
|
|
scene.addItem(name_item);
|
|
}
|
|
|
|
}
|
|
else {
|
|
QGraphicsPixmapItem* label_item = new QGraphicsPixmapItem(QPixmap(label_rel_path));
|
|
label_item->setRotation(90);
|
|
label_item->setPos(LABEL_POS_X[col_idx], LABEL_POS_Y_START + LABEL_POS_Y_DIFF * col_num);
|
|
label_item->setOpacity(1);
|
|
scene.addItem(label_item);
|
|
|
|
|
|
for (int i = 0; i < 2; ++i) {
|
|
qreal offset_x = name.name1.count() == 2 ? NAME_TWO_WORD_OFFSET : 0;
|
|
QGraphicsTextItem* name_item = new QGraphicsTextItem(name.name1);
|
|
name_item->setTextWidth(TEXT_WIDTH);
|
|
name_item->setFont(font);
|
|
name_item->setDefaultTextColor(font_color);
|
|
name_item->setRotation(90);
|
|
name_item->setPos(label_item->x() - NAME_OFFSET_Y, label_item->y() + NAME_OFFSET_X[i] + offset_x);
|
|
scene.addItem(name_item);
|
|
}
|
|
|
|
}
|
|
|
|
if ((idx % MAX_LABEL_IN_PAPER == MAX_LABEL_IN_PAPER - 1) || idx == nameList.count() - 1) {
|
|
QString date_str = QDateTime::currentDateTime().toString("MMddhhmm");
|
|
QString file_name = QString("Towel_%2_%1.jpg").arg(QString::number(export_times + 1), date_str);
|
|
saveToImage(file_name, &scene);
|
|
export_times++;
|
|
|
|
scene.clear();
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|