#include "HKHolderCreater.h" #include #include #include #include #include #include #define HK_BG_WIDTH 2482 #define HK_BG_HEIGH 3509 #define MAX_COL_IN_ROW 7 #define MAX_LABEL_IN_PAPER 14 #define NAME_TWO_WORD_OFFSET 100.0 #define NAME_THREE_WORD_OFFSET 82.0 #define NAME_TWO_EXT_Y 20.0 #define NAME_TWO_EXT_REV_Y 30.0 static qreal row_x_offset = 132; static qreal row_x_gap = 320; static qreal row_y_offset[] = { 105 , 1615 }; static QPoint NAME_OFFSET_START = QPoint(92, 413); static QPoint NAME_OFFSET_REVERSE_START = QPoint(179, 1020); HKHolderCreater::HKHolderCreater() : INameCreater() { label_bg_map["a"] = ":/NameCreater/resource/hk_holder/a.jpg"; label_bg_map["b"] = ":/NameCreater/resource/hk_holder/b.jpg"; label_bg_map["m"] = ":/NameCreater/resource/hk_holder/m.jpg"; label_bg_map["g"] = ":/NameCreater/resource/hk_holder/g.jpg"; label_bg_map["st"] = ":/NameCreater/resource/hk_holder/st.jpg"; label_bg_map["w"] = ":/NameCreater/resource/hk_holder/w.jpg"; label_bg_map["p"] = ":/NameCreater/resource/hk_holder/p.jpg"; label_bg_map["pg"] = ":/NameCreater/resource/hk_holder/pg.jpg"; label_bg_map["r"] = ":/NameCreater/resource/hk_holder/r.jpg"; label_bg_map["y"] = ":/NameCreater/resource/hk_holder/y.jpg"; } HKHolderCreater::~HKHolderCreater() { } QList HKHolderCreater::getNameByFileContent(Name_Type_e type, const QByteArray& conetent) { QList nameList; QTextCodec* tc = QTextCodec::codecForName("Big5"); QString codec = tc->toUnicode(conetent.data()); QTextStream stream(&codec); int row = 0; while (!stream.atEnd()) { NameInfo_t info; QString line = stream.readLine(); QString name_tc = line; QStringList csvList = name_tc.split(','); QString name, eng_name, bg_type; switch (type) { case Name_zh: name = csvList.at(0); bg_type = csvList.at(1); break; case Name_zh_eng: /*name = csvList.at(0); eng_name = csvList.at(1); bg_type = csvList.at(2);*/ break; case Name_eng: //eng_name = csvList.at(0); //bg_type = csvList.at(1); default: break; } qDebug() << "row :" << row << " " << name << ", eng: " << eng_name << ", bg_type: " << bg_type; if (name.compare("name") == 0 || eng_name.compare("eng_name") == 0) { //pass first line continue; } info.name1 = name; info.name_eng = eng_name; info.name2 = bg_type; nameList.append(info); row++; } return nameList; } void HKHolderCreater::generaImageFromCSV(Name_Type_e type, const QString& filename, const QByteArray& filecontent, const QFont& font, const QColor& font_color) { int export_times = 0; QList 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); switch (type) { case Name_zh: for (int idx = 0; idx < nameList.length(); idx++) { if ((idx % MAX_LABEL_IN_PAPER) == 0) { QGraphicsRectItem* bg_item = new QGraphicsRectItem(0, 0, HK_BG_WIDTH, HK_BG_HEIGH); bg_item->setBrush(QBrush(QColor(255, 255, 255))); //QGraphicsPixmapItem* bg_item = new QGraphicsPixmapItem(QPixmap(":/NameCreater/resource/hk_holder/sample.jpg")); scene.addItem(bg_item); } int re_idx, row_idx, col_idx; re_idx = idx % MAX_LABEL_IN_PAPER; row_idx = re_idx / MAX_COL_IN_ROW; col_idx = re_idx % MAX_COL_IN_ROW; NameInfo_t name_info = nameList.at(idx); QString label_rel_path = label_bg_map[name_info.name2]; QGraphicsPixmapItem* label_item = new QGraphicsPixmapItem(QPixmap(label_rel_path)); label_item->setPos(qreal(row_x_offset + col_idx* row_x_gap), row_y_offset[row_idx]); label_item->setOpacity(1.0); scene.addItem(label_item); for (int i = 0; i < 2; i++) { int name_word_len = name_info.name1.length(); qreal two_word_y = (name_word_len == 2) ? NAME_TWO_EXT_Y : 0; qreal two_word_rev_y = (name_word_len == 2) ? NAME_TWO_EXT_REV_Y : 0; qreal offset_y = (name_word_len == 2) ? NAME_TWO_WORD_OFFSET : NAME_THREE_WORD_OFFSET; for (int w = 0; w < name_word_len; w++) { QGraphicsTextItem* word_item = new QGraphicsTextItem(name_info.name1.at(w)); word_item->setFont(font); word_item->setDefaultTextColor(font_color); if (i == 0) { word_item->setPos(label_item->x() + NAME_OFFSET_START.x(), label_item->y() + NAME_OFFSET_START.y() + two_word_y + offset_y * w); } else { word_item->setTransform(QTransform().fromScale(-1, -1)); word_item->setPos(label_item->x() + NAME_OFFSET_REVERSE_START.x(), label_item->y() + NAME_OFFSET_REVERSE_START.y() - two_word_rev_y - offset_y * w); } scene.addItem(word_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("HK_%2_%1.jpg").arg(QString::number(export_times + 1), date_str); saveToImage(file_name, &scene); export_times++; scene.clear(); } } break; /* case Name_eng: for (int idx = 0; idx < nameList.length(); 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); } NameInfo_t name_info = nameList.at(idx); int col_index = idx % MAX_LABEL_IN_PAPER; QString label_rel_path = label_bg_map[name_info.name2]; QGraphicsPixmapItem* label_item = new QGraphicsPixmapItem(QPixmap(label_rel_path)); label_item->setPos(int(LABEL_POS_START.x() + LABEL_POS_X_OFFSET * col_index), int(LABEL_POS_START.y())); label_item->setOpacity(1); scene.addItem(label_item); int chrismas_y_offset = 0; if (name_info.name2.compare("co") == 0 || name_info.name2.compare("ol") == 0 || name_info.name2.compare("st") == 0 || name_info.name2.compare("sn") == 0) { chrismas_y_offset = 30; } QFont _new_font = QFont(EnglisthFont()); _new_font.setWeight(QFont::ExtraLight); int _new_size = getFontSizebyStr(_new_font, 120, 480, name_info.name_eng); _new_font.setPixelSize(_new_size); for (int i = 0; i < 2; i++) { qreal dir = (i == 0) ? -1.0 : 1.0; qreal x_offset = (i == 0) ? 290.0 : 170.0; qreal y_offset = (i == 0) ? 780.0 : 1580.0; chrismas_y_offset = (i == 0) ? 1.0 * chrismas_y_offset : -1.0 * chrismas_y_offset; //add English world QGraphicsTextItem* eng_word_item = new QGraphicsTextItem(name_info.name_eng); eng_word_item->setFont(_new_font); QRectF rect = eng_word_item->boundingRect(); eng_word_item->setDefaultTextColor(font_color); eng_word_item->setRotation(i == 0 ? 90 : -90); eng_word_item->setPos(label_item->x() + x_offset - rect.height() / 2.0, label_item->y() + y_offset + chrismas_y_offset + (rect.width() / 2 * dir)); scene.addItem(eng_word_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("Birthday_%2_%1.jpg").arg(QString::number(export_times + 1), date_str); saveToImage(file_name, &scene); export_times++; scene.clear(); } } break; case Name_zh_eng: for (int idx = 0; idx < nameList.length(); 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); } NameInfo_t name_info = nameList.at(idx); int col_index = idx % MAX_LABEL_IN_PAPER; QString label_rel_path = label_bg_map[name_info.name2]; QGraphicsPixmapItem* label_item = new QGraphicsPixmapItem(QPixmap(label_rel_path)); label_item->setPos(int(LABEL_POS_START.x() + LABEL_POS_X_OFFSET * col_index), int(LABEL_POS_START.y())); label_item->setOpacity(1); scene.addItem(label_item); int chrismas_y_offset = 0; if (name_info.name2.compare("co") == 0 || name_info.name2.compare("ol") == 0 || name_info.name2.compare("st") == 0 || name_info.name2.compare("sn") == 0) { chrismas_y_offset = 30; } // add ZH word int name_word_len = name_info.name1.length(); qreal two_word_y = (name_word_len == 2) ? NAME_TWO_WORD_OFFSET / 2 : 0; qreal offset_y = (name_word_len == 2) ? NAME_TWO_WORD_OFFSET : NAME_THREE_WORD_OFFSET; for (int w = 0; w < name_word_len; w++) { QGraphicsTextItem* word_item = new QGraphicsTextItem(name_info.name1.at(w)); word_item->setFont(font); word_item->setDefaultTextColor(font_color); word_item->setPos(label_item->x() + NAME_OFFSET_START.x(), label_item->y() + NAME_OFFSET_START.y() + two_word_y + chrismas_y_offset + offset_y * w); scene.addItem(word_item); } //TODO: add English world QGraphicsTextItem* eng_word_item = new QGraphicsTextItem(name_info.name_eng); QFont _new_font = QFont(EnglisthFont()); _new_font.setWeight(QFont::ExtraLight); int _new_size = getFontSizebyStr(_new_font, 120, 480, name_info.name_eng); _new_font.setPixelSize(_new_size); eng_word_item->setFont(_new_font); QRectF rect = eng_word_item->boundingRect(); eng_word_item->setDefaultTextColor(font_color); eng_word_item->setRotation(-90); eng_word_item->setPos(label_item->x() + 170.0 - rect.height() / 2.0, label_item->y() + 1580 - chrismas_y_offset + rect.width() / 2); scene.addItem(eng_word_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("Birthday_%2_%1.jpg").arg(QString::number(export_times + 1), date_str); saveToImage(file_name, &scene); export_times++; scene.clear(); } } break; */ default: break; } QMessageBox msgBox; msgBox.setText(QString().asprintf("Export Finshed. Count:%d", export_times)); msgBox.exec(); }