【问题标题】:Podofo PDF table and AutoPageBreakPodofo PDF 表格和 AutoPageBreak
【发布时间】:2023-01-24 13:10:22
【问题描述】:

有人可以帮助我使用 Podofo::PdfTable 类的 AutoPageBreak 函数吗?

我这样写

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

其余的源代码在这里

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();

抱歉我的英语不好,非常感谢

【问题讨论】:

    标签: c++ pdf podofo


    【解决方案1】:
    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);
    

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

    【讨论】:

      【解决方案2】:

      使用 autopagebreak 时如何设置页码 .. 有人吗?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-12-31
        • 1970-01-01
        • 2013-05-26
        • 2015-11-01
        • 2013-12-01
        • 1970-01-01
        • 2017-01-07
        相关资源
        最近更新 更多