Я включил podofo в свое приложение.
Настройки: Qt Framework для графического интерфейса пользователя Visual Studio 2017 Community Edition C ++ - 14 Standard (я установил этот язык, поскольку podofo все еще использует auto_ptr).Podofo динамически связан.
Заголовок: pdf.hpp
namespace pdf {
struct customer {
QString firstname;
QString lastname;
QString street;
QString zip;
QString city;
QString customer_id = "";
QString phone = "";
QString mail = "";
};
struct company : public customer {
QString cname;
QString fax;
QString uid;
QString iban;
QString bic;
QString institute;
};
struct transaction {
QString start_value;
QString end_value;
QString start_timestamp;
QString end_timestamp;
};
struct Font {
QString name;
float size;
};
class pdf {
private:
QString filename;
float kwh_price;
PoDoFo::PdfStreamedDocument document;
customer stammdaten;
company sender;
transaction tx;
//QString Font;
Font font;
QString last_error;
public:
pdf(QString path);
~pdf();
void setkWhPrice(float price);
void createPage();
void setFont(QString fname,float size);
void setCustomer(QString firstname, QString lastname, QString street, QString zip, QString city, QString mail = "", QString phone = "", QString cid = "");
void setSenderData(QString company, QString street, QString zip, QString city, QString uid, QString phone, QString fax, QString mail);
//ERROR Functions
QString getLastError();
};
char* UmauteString(QString str);
}
pdf.cpp
#include"pdf.hpp"
#include"header.hpp"
using namespace PoDoFo;
char* pdf::UmauteString(QString str) {
char *result = new char[str.size()];
uint i = 0;
for (auto c : str) {
if (c == 'Ä') result[i] = static_cast<unsigned char>(142);
else
if (c == 'ä') result[i] = static_cast<unsigned char>(132);
else
if (c == 'Ö') result[i] = static_cast<unsigned char>(153);
else
if (c == 'ö') result[i] = static_cast<unsigned char>(148);
else
if (c == 'Ü') result[i] = static_cast<unsigned char>(154);
else
if (c == 'ü') result[i] = static_cast<unsigned char>(129);
else
if (c == 'ß') result[i] = static_cast<unsigned char>(225);
else result[i] = c.toLatin1();
i++;
}
return result;
}
pdf::pdf::pdf(QString path) : document(path.toStdString().c_str()) {
this->filename = path;
}
void pdf::pdf::setkWhPrice(float price) {
this->kwh_price = price;
}
pdf::pdf::~pdf() {
this->document.Close();
}
void pdf::pdf::createPage() {
PdfPage *page;
PdfPainter painter;
PdfFont* pFont;
page = document.CreatePage(PdfPage::CreateStandardPageSize(ePdfPageSize_A4));
if (!page) {
this->last_error = "PDF Page Invalid Handler";
QMessageBox::warning(nullptr, "ERROR", "pdf::createPage(): Invalid PoDoFo::PdfPage Handler", QMessageBox::StandardButton::Ok);
return;
}
painter.SetPage(page);
pFont = document.CreateFont("Courier New");
//Address Field
pFont->SetFontSize((float)5); // <-- the issue
painter.SetFont(pFont);
std::string absender = sender.cname.toStdString() + " " + sender.street.toStdString() + " " + sender.zip.toStdString() + " " + sender.city.toStdString();
PdfString str(absender.c_str());
painter.DrawText(56.69, 700,str);
painter.FinishPage();
}
QString pdf::pdf::getLastError() {
return this->last_error;
}
void pdf::pdf::setFont(QString name, float size) {
this->font.name = name;
this->font.size = size;
}
void pdf::pdf::setCustomer(QString firstname, QString lastname, QString street, QString zip, QString city, QString mail , QString phone , QString cid ){
auto d = &stammdaten;
d->firstname = firstname;
d->lastname = lastname;
d->street = street;
d->zip = zip;
d->city = city;
d->mail = mail;
d->phone = phone;
d->customer_id = cid;
}
void pdf::pdf::setSenderData(QString company, QString street, QString zip, QString city, QString uid, QString phone, QString fax, QString mail) {
auto d = &this->sender;
d->cname = company;
d->street = street;
d->zip = zip;
d->city = city;
d->uid = uid;
d->phone = phone;
d->fax = fax;
d->mail = mail;
}
Работает за исключениемpFont-> SetFontSize ()!если я установлю шрифт на 500, текст будет растянут.Если я установлю размер от 0 до 12, он ничего не будет делать, кроме рисования текста.Размер не имеет значения, они имеют все одинаковый размер.
Кто-нибудь имеет решение этого странного поведения?
Вывод выглядит так: https://ibb.co/SPQkQYH
Выводс размером шрифта 50 выглядит следующим образом: