首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Podofo PDF表和AutoPageBreak

Podofo PDF表和AutoPageBreak
EN

Stack Overflow用户
提问于 2022-04-13 08:38:02
回答 1查看 97关注 0票数 1

有人能帮我处理Podofo::PdfTable类的AutoPageBreak函数吗?

我是这样写的

代码语言:javascript
复制
table1.SetAutoPageBreak(true,
            [](PoDoFo::PdfRect &rect, void* pCustom)->PoDoFo::PdfPage*{
                PoDoFo::PdfPage *pPage = new PoDoFo::PdfPage(rect,(PoDoFo::PdfStreamedDocument*)pCustom);
                rect = PoDoFo::PdfRect(0,0,pPage->GetPageSize().GetWidth(), pPage->GetPageSize().GetHeight());
                cout << "qui" << endl;
                return pPage;
            }, (void*) document);

函数被正确调用,但什么也不做,第一个页面被正确创建,但是新页面没有创建。

http://podofo.sourceforge.net/doc/html/classPoDoFo_1_1PdfTable.html#ac33e4bf489d3b7232deae271b8dc552a

其余的源代码在这里

代码语言:javascript
复制
document = new PoDoFo::PdfStreamedDocument("doc.pdf");
PoDoFo::PdfPainter painter;
PoDoFo::PdfTable table1 = PoDoFo::PdfTable(2, length);
    
table1.SetAutoPageBreak(true,
            [](PoDoFo::PdfRect &rect, void* pCustom)->PoDoFo::PdfPage*{
                PoDoFo::PdfPage *pPage = new PoDoFo::PdfPage(rect,(PoDoFo::PdfStreamedDocument*)pCustom);
                rect = PoDoFo::PdfRect(0,0,pPage->GetPageSize().GetWidth(), pPage->GetPageSize().GetHeight());
                cout << "qui" << endl;
                return pPage;
            }, (void*) document);
PoDoFo::PdfSimpleTableModel* tablemodel1 = new PoDoFo::PdfSimpleTableModel(2, length);
    
PoDoFo::PdfPage* pPage = document->CreatePage(PoDoFo::PdfPage::CreateStandardPageSize(PoDoFo::ePdfPageSize_A4, true));
    painter.SetPage(pPage);
    PoDoFo::PdfFont* pFont = document->CreateFontSubset("NotoSansMono", false, false, false, PoDoFo::PdfEncodingFactory::GlobalStandardEncodingInstance(), "NotoSansMono-VariableFont_wdth,wght.ttf");
    //PoDoFo::PdfFont* pFont = document.CreateFont("Courier");
pFont->SetFontSize(8);
painter.SetFont(pFont);
tablemodel1->SetFont(pFont);
tablemodel1->SetForegroundColor(PoDoFo::PdfColor(0.0, 0.0, 0.0));
tablemodel1->SetBorderEnabled(true);
tablemodel1->SetBorderWidth(0.5);
tablemodel1->SetAlignment(PoDoFo::EPdfVerticalAlignment::ePdfVerticalAlignment_Top);
tablemodel1->SetWordWrapEnabled(true);
painter.DrawTextAligned(20, pPage->GetPageSize().GetHeight()-20, pPage->GetPageSize().GetWidth(), "Riassunto giornaliero risorse", PoDoFo::EPdfAlignment::ePdfAlignment_Center);
string text = "";       
vector<OggettoEventoItem*>* listaOggettiEventi;
vector<EventoItem*>* eventoItem;
double rowheight[(int)oggettiSel->size()];
double totrowheight = 0;
for (int i = 0; i < (int)oggettiSel->size(); i++)
{
    tablemodel1->SetText(0, i, oggettiSel->at(i)->GetLabel().ToStdString());
    for(int j = 0; j < (int)listaOggettiEventi->size(); j++)
    {
        text += "...";  
    }
    tablemodel1->SetText(1, i, text);
    char newline = '\n';
 
    int count = std::count(text.begin(), text.end(), newline);
    if(count > 0)
        rowheight[i] = count * 20;
    else
        rowheight[i] = 20;
        
    totrowheight += rowheight[i];
        
    text = "";
}
table1.SetModel(tablemodel1);
double colwidth[2] = { 150, pPage->GetPageSize().GetWidth() - 150 - 40};
table1.SetColumnWidths(colwidth);
table1.SetRowHeights(rowheight);
table1.SetTableWidth(pPage->GetPageSize().GetWidth()-40);
table1.SetTableHeight(pPage->GetPageSize().GetHeight()-60);
table1.Draw(20, pPage->GetPageSize().GetHeight()- 40, &painter);
painter.FinishPage();
document->Close();

对不起,我的英语很差,提前谢谢。

EN

回答 1

Stack Overflow用户

发布于 2022-04-13 10:26:22

代码语言:javascript
复制
table1.SetAutoPageBreak(true,
            [](PoDoFo::PdfRect &rect, void* pCustom)->PoDoFo::PdfPage*{
                PoDoFo::PdfPage *pPage = ((PoDoFo::PdfStreamedDocument*)pCustom)->CreatePage(PoDoFo::PdfPage::CreateStandardPageSize(PoDoFo::ePdfPageSize_A4, true));

                return pPage;
            }, (void*) document);

我解决了,比预期的要容易。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71854414

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档