PoDoFo SetFontSize Проблема - PullRequest
       27

PoDoFo SetFontSize Проблема

0 голосов
/ 04 февраля 2019

Я включил 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 выглядит следующим образом: Font Size 50

1 Ответ

0 голосов
/ 04 февраля 2019

ОК Решение очищено.Кажется, что dll была просто странной.Изменена библиотека Подофо.

...