diff --git a/NameCreater/BirthdayCreater.cpp b/NameCreater/BirthdayCreater.cpp index e7c2a72..ca59e24 100644 --- a/NameCreater/BirthdayCreater.cpp +++ b/NameCreater/BirthdayCreater.cpp @@ -53,11 +53,26 @@ QList BirthdayCreater::getNameByFileContent(Name_Type_e type, const QString name_tc = line; QStringList csvList = name_tc.split(','); + QString name, eng_name, bg_type; - QString name = csvList.at(0); //QString::fromLocal8Bit(csvList.at(0)); - QString bg_type = csvList.at(1);//QString::fromLocal8Bit(csvList.at(1)); - QString type_str = csvList.last();//QString::fromLocal8Bit(csvList.last()); - qDebug() << "row :" << row << " " << name << ", bg_type: " << 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; + default: + break; + + } + + qDebug() << "row :" << row << " " << name <<", eng: "<< eng_name << ", bg_type: " << bg_type; if (name.compare("name") == 0) { //pass first line @@ -65,6 +80,7 @@ QList BirthdayCreater::getNameByFileContent(Name_Type_e type, const } info.name1 = name; + info.name_eng = eng_name; info.name2 = bg_type; nameList.append(info); @@ -89,33 +105,93 @@ void BirthdayCreater::generaImageFromCSV(Name_Type_e type, const QString& filena scene.setBackgroundBrush(QBrush(QColor(255, 255, 255))); QGraphicsView view(&scene); + switch (type) + { + case Name_zh: + for (int idx = 0; idx < nameList.length(); idx++) { - for (int idx = 0; idx < nameList.length(); idx++) { + if ((idx % MAX_LABEL_IN_PAPER) == 0) { - 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); - 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; + } + + 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_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); + if (i == 0) { + 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); + } + 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_y - chrismas_y_offset - 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("Birthday_%2_%1.jpg").arg(QString::number(export_times + 1), date_str); + saveToImage(file_name, &scene); + export_times++; + + scene.clear(); + } } - 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); + break; + case Name_eng: + break; + case Name_zh_eng: + for (int idx = 0; idx < nameList.length(); idx++) { - 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; - } + if ((idx % MAX_LABEL_IN_PAPER) == 0) { - for (int i = 0; i < 2; i++) { + 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; @@ -124,28 +200,41 @@ void BirthdayCreater::generaImageFromCSV(Name_Type_e type, const QString& filena 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 + chrismas_y_offset + 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_y - chrismas_y_offset - offset_y * w); - } + 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::ExtraBold); + 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() + 140.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(); + } } - - 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(); diff --git a/NameCreater/INameCreater.cpp b/NameCreater/INameCreater.cpp index b799d3d..1f1f04e 100644 --- a/NameCreater/INameCreater.cpp +++ b/NameCreater/INameCreater.cpp @@ -112,6 +112,7 @@ QList INameCreater::getNameByFile(Name_Type_e type, const QString& f QList INameCreater::getNameByFileContent(Name_Type_e type, const QByteArray& conetent) { + (void)type; QList nameList; QTextCodec* tc = QTextCodec::codecForName("Big5"); QString codec = tc->toUnicode(conetent.data()); @@ -159,7 +160,7 @@ int INameCreater::getFontSizebyStr(const QFont& font, int max_font_size,int max_ QFont _font(font); int font_size = max_font_size; while (font_size > 10) { - _font.setPixelSize(max_font_size); + _font.setPixelSize(font_size); QFontMetrics fm(_font); if (fm.horizontalAdvance(str) <= max_label_width) break; font_size--; diff --git a/NameCreater/INameCreater.h b/NameCreater/INameCreater.h index 92b85df..e9b4e7d 100644 --- a/NameCreater/INameCreater.h +++ b/NameCreater/INameCreater.h @@ -10,6 +10,7 @@ struct NameInfo_t { QString name1; QString name2; + QString name_eng; QString bg_path; bool is_number_bg; int bg_type; @@ -26,6 +27,13 @@ public: INameCreater(); ~INameCreater(); + void setEnglishFont(const QFont& font) { + eng_Font = QFont(font); + } + + QFont EnglisthFont() const { + return eng_Font; + } protected: void saveToImage(const QString& filename, QGraphicsScene* scene); @@ -33,8 +41,9 @@ protected: QList getNameByFileContent(Name_Type_e type, const QByteArray& conetent); virtual void generaImageFromCSV(Name_Type_e type, const QString& filename, const QByteArray& filecontent, const QFont& font, const QColor& font_color); - -private: int getFontSizebyStr(const QFont& font, int max_font_size, int max_label_width, const QString& str); +private: + + QFont eng_Font; }; \ No newline at end of file diff --git a/NameCreater/NameCreater.cpp b/NameCreater/NameCreater.cpp index 1ce9482..5dc2af5 100644 --- a/NameCreater/NameCreater.cpp +++ b/NameCreater/NameCreater.cpp @@ -17,95 +17,114 @@ #include "NewFiveCreater.h" -#define FONT_NAME "DFYuanStd-W8.otf" #define FONT_PATH ":/NameCreater/_exp/DFYuanStd-W8.otf" -#define FONT_SIZE 120 - #define TOWEL_FONT_PATH ":/NameCreater/_exp/W1.ttc" +#define ENGLISH_FONT_PATH ":/NameCreater/_exp/AcuminVariableConcept.otf" -#define VERSION "v2.0.0" +#define FONT_SIZE 120 +#define VERSION "v2.1.0" NameCreater::NameCreater(QWidget *parent) : QMainWindow(parent) { ui.setupUi(this); - connect(ui.fivesingle_btn, &QPushButton::released, this, &NameCreater::OnClickedReadBtn); - //connect(ui.fiveold_btn, &QPushButton::released, this, &NameCreater::OnClickedReadBtn); - connect(ui.birthday_btn, &QPushButton::released, this, &NameCreater::OnClickedReadBtn); - connect(ui.towel_btn, &QPushButton::released, this, &NameCreater::OnClickedReadBtn); - connect(ui.fivenew_btn, &QPushButton::released, this, &NameCreater::OnClickedReadBtn); + connect(ui.fivesingle_btn, &QPushButton::released, this, &NameCreater::OnClickedReadBtn); + //connect(ui.fiveold_btn, &QPushButton::released, this, &NameCreater::OnClickedReadBtn); + connect(ui.birthday_btn, &QPushButton::released, this, &NameCreater::OnClickedReadBtn); + connect(ui.towel_btn, &QPushButton::released, this, &NameCreater::OnClickedReadBtn); + connect(ui.fivenew_btn, &QPushButton::released, this, &NameCreater::OnClickedReadBtn); + connect(ui.birthday_zh_eng_btn, &QPushButton::released, this, &NameCreater::OnClickedReadBtn); - QString font_path = FONT_PATH; - QFile font_res(font_path); - if (!font_res.open(QIODevice::ReadOnly)) { - QMessageBox msgBox; - msgBox.setText("Can not load font file!" + font_path); - msgBox.exec(); - font_res.close(); - } + QString font_path = FONT_PATH; + QFile font_res(font_path); + if (!font_res.open(QIODevice::ReadOnly)) { + QMessageBox msgBox; + msgBox.setText("Can not load font file!" + font_path); + msgBox.exec(); + font_res.close(); + } - int id = QFontDatabase::addApplicationFontFromData(font_res.readAll()); - QStringList family_list = QFontDatabase::applicationFontFamilies(id); - - font = QFont(family_list.at(0)); - font.setPixelSize(FONT_SIZE); - font_res.close(); + int id = QFontDatabase::addApplicationFontFromData(font_res.readAll()); + QStringList family_list = QFontDatabase::applicationFontFamilies(id); - font_path = QString(TOWEL_FONT_PATH); - QFile font_res_towel(font_path); - if (!font_res_towel.open(QIODevice::ReadOnly)) { - QMessageBox msgBox; - msgBox.setText("Can not load font file!" + font_path); - msgBox.exec(); - font_res_towel.close(); - } - - id = QFontDatabase::addApplicationFontFromData(font_res_towel.readAll()); - font_towel = QFont(QFontDatabase::applicationFontFamilies(id).at(0)); - font_towel.setPixelSize(240); - font_towel.setLetterSpacing(QFont::PercentageSpacing, 42); - - font_color = QColor(0, 0, 0); + font = QFont(family_list.at(0)); + font.setPixelSize(FONT_SIZE); + font_res.close(); - QFont tital_font = QFont(font); - tital_font.setPixelSize(20); + font_path = QString(TOWEL_FONT_PATH); + QFile font_res_towel(font_path); + if (!font_res_towel.open(QIODevice::ReadOnly)) { + QMessageBox msgBox; + msgBox.setText("Can not load font file!" + font_path); + msgBox.exec(); + font_res_towel.close(); + } - QFont version_font = QFont(font); - version_font.setPixelSize(12); + id = QFontDatabase::addApplicationFontFromData(font_res_towel.readAll()); + font_towel = QFont(QFontDatabase::applicationFontFamilies(id).at(0)); + font_towel.setPixelSize(240); + font_towel.setLetterSpacing(QFont::PercentageSpacing, 42); - //ui.tital_label->setFont(tital_font); - ui.version_label->setFont(version_font); - ui.version_label->setText(VERSION); + + font_path = QString(ENGLISH_FONT_PATH); + QFile font_res_eng(font_path); + if (!font_res_eng.open(QIODevice::ReadOnly)) { + QMessageBox msgBox; + msgBox.setText("Can not load font file!" + font_path); + msgBox.exec(); + font_res_eng.close(); + } + + id = QFontDatabase::addApplicationFontFromData(font_res_eng.readAll()); + font_english = QFont(QFontDatabase::applicationFontFamilies(id).at(0)); + + + font_color = QColor(0, 0, 0); + + QFont tital_font = QFont(font); + tital_font.setPixelSize(20); + + QFont version_font = QFont(font); + version_font.setPixelSize(12); + + //ui.tital_label->setFont(tital_font); + ui.version_label->setFont(version_font); + ui.version_label->setText(VERSION); QList titals = findChildren(QRegExp("tital_label")); - foreach(auto tital, titals) { - tital->setFont(tital_font); - } + foreach(auto tital, titals) { + tital->setFont(tital_font); + } + + - - } void NameCreater::OnClickedReadBtn() { - auto sender =(QPushButton*) QObject::sender(); + auto sender =(QPushButton*) QObject::sender(); - auto fileContentReady = [this, sender](const QString &fileName, const QByteArray &fileContent) { - if (fileName.isEmpty()) { - // No file was selected - } - else { - // Use fileName and fileContent - if(sender == ui.fivesingle_btn) FiveToSingle().generaImageFromCSV(Name_Type_e::Name_zh,fileName, fileContent, this->font, this->font_color); - //if(sender == ui.fiveold_btn) OldFiveCreater().generaImageFromCSV(fileName, fileContent, this->font, this->font_color); - if(sender == ui.birthday_btn) BirthdayCreater().generaImageFromCSV(Name_Type_e::Name_zh, fileName, fileContent, this->font, this->font_color); - if(sender == ui.fivenew_btn) NewFiveCreater().generaImageFromCSV(Name_Type_e::Name_zh, fileName, fileContent, this->font, this->font_color); - if(sender == ui.towel_btn) TowelCreater().generaImageFromCSV(Name_Type_e::Name_zh, fileName, fileContent, this->font_towel, this->font_color); + auto fileContentReady = [this, sender](const QString &fileName, const QByteArray &fileContent) { + if (fileName.isEmpty()) { + // No file was selected + } + else { + // Use fileName and fileContent + if(sender == ui.fivesingle_btn) FiveToSingle().generaImageFromCSV(Name_Type_e::Name_zh,fileName, fileContent, this->font, this->font_color); + //if(sender == ui.fiveold_btn) OldFiveCreater().generaImageFromCSV(fileName, fileContent, this->font, this->font_color); + if(sender == ui.birthday_btn) BirthdayCreater().generaImageFromCSV(Name_Type_e::Name_zh, fileName, fileContent, this->font, this->font_color); + if(sender == ui.fivenew_btn) NewFiveCreater().generaImageFromCSV(Name_Type_e::Name_zh, fileName, fileContent, this->font, this->font_color); + if(sender == ui.towel_btn) TowelCreater().generaImageFromCSV(Name_Type_e::Name_zh, fileName, fileContent, this->font_towel, this->font_color); + if (sender == ui.birthday_zh_eng_btn) { + BirthdayCreater creater; + creater.setEnglishFont(font_english); + creater.generaImageFromCSV(Name_Type_e::Name_zh_eng, fileName, fileContent, this->font, this->font_color); + } - - } - }; - QFileDialog::getOpenFileContent("CSV (*.csv)", fileContentReady); + + } + }; + QFileDialog::getOpenFileContent("CSV (*.csv)", fileContentReady); } diff --git a/NameCreater/NameCreater.h b/NameCreater/NameCreater.h index 7f83ce3..bfa7932 100644 --- a/NameCreater/NameCreater.h +++ b/NameCreater/NameCreater.h @@ -12,7 +12,7 @@ public: private: Ui::NameCreaterClass ui; - QFont font, font_towel; + QFont font, font_towel, font_english; QColor font_color; diff --git a/NameCreater/NameCreater.pro.user b/NameCreater/NameCreater.pro.user index 75b4b03..10e5bcb 100644 --- a/NameCreater/NameCreater.pro.user +++ b/NameCreater/NameCreater.pro.user @@ -1,6 +1,6 @@ - + EnvironmentId @@ -390,23 +390,6 @@ true true true - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - NameCreater WebAssembly.RunConfiguration.EmrunD:/_develop/_project/NameCreater/NameCreater/NameCreater.pro diff --git a/NameCreater/NameCreater.qrc b/NameCreater/NameCreater.qrc index 942e91d..6ab0166 100644 --- a/NameCreater/NameCreater.qrc +++ b/NameCreater/NameCreater.qrc @@ -66,5 +66,6 @@ resource/five/ng_3.jpg resource/five/ng_4.jpg resource/five/ng_5.jpg + _exp/AcuminVariableConcept.otf diff --git a/NameCreater/_exp/AcuminVariableConcept.otf b/NameCreater/_exp/AcuminVariableConcept.otf new file mode 100644 index 0000000..b8e47cf Binary files /dev/null and b/NameCreater/_exp/AcuminVariableConcept.otf differ diff --git a/NameCreater/_exp/生日禮範例_中英.csv b/NameCreater/_exp/生日禮範例_中英.csv new file mode 100644 index 0000000..012197f --- /dev/null +++ b/NameCreater/_exp/生日禮範例_中英.csv @@ -0,0 +1,21 @@ +name,eng_name,bg_type +Á¤_¹ä,Alice,r +Á¤_¹ä,Alice,r +Á¤_¹ä,Alice,r +Á¤_¹ä,Alice,r +Á¤_¹ä,Alice,r +¸â¨°ºÓ,George,sn +¸â¨°ºÓ,George,co +¸â¨°ºÓ,George,ol +¸â¨°ºÓ,George,m +¸â¨°ºÓ,George,y +¸â¨°ºÓ,George,b +³¯§Ó,Jolin,g +³¯¦u§Ó,Chirs,m +³¯¦u§Ó,xxxxxxxdgde,p +³¯§Ó,gfdgadgdd,r +§d¨Î¹a,Jolin,co +§d¨Î¹a,Jolin,ol +§d¹a,Jessica,sn +§d¹a,Arial,st +§d¹a,Arial,b