【问题标题】:How to determine PdfPage object emptiness?如何确定 PdfPage 对象是否为空?
【发布时间】:2020-08-31 03:51:22
【问题描述】:

让我们有以下sn-p的代码:

PoDoFo::PdfMemDocument pdfDoc;
pdfDoc.CreatePage( PoDoFo::PdfPage::CreateStandardPageSize( PoDoFo::ePdfPageSize_A4 ) );

新创建的页面显然是空的。如何确定这样的页面是空的(里面没有 xobjects 等)。我尝试查找任何类型的方法,例如 isEmpty() 或实现我自己的解决方案,如下所示,但没有任何运气。

auto page = src.GetPage( nPage );

if( page->GetContents() == page->GetObject() )
{
   // Page is empty
}

// Also tried these checks:
// page->GetResources()->GetObjectLength() == 0
// page->GetResources()->GetStream()->GetLength() == 0
// page->GetResources()->HasStream() == false

由于它具有很高的优先级,我问了一些愚蠢的问题,同时深入研究 PoDoFo 库以找到解决方案。有谁知道我们如何确定页面空白?

【问题讨论】:

    标签: c++ podofo


    【解决方案1】:

    经过几个痛苦的小时后,我设法解决了这个问题(可以做得更聪明,但无论如何):

    /// @param page Page object to be checked for emptiness.
    /// @return True in case page is empty, false otherwise.
    bool isDocumentPageEmpty( const PoDoFo::PdfPage* page )
    {
        PoDoFo::PdfContentsTokenizer tokenizer( const_cast<PoDoFo::PdfPage*>( page ) );
        PoDoFo::PdfVariant var;
        PoDoFo::EPdfContentsType type;
        const char* token = nullptr;
    
        while( tokenizer.ReadNext( type, token, var ) )
        {
           switch( type )
           {
              case PoDoFo::ePdfContentsType_Keyword:
              case PoDoFo::ePdfContentsType_Variant:
              {
                 return false;
              }
           }
        }
    
        return true;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-22
      • 2013-04-09
      • 2010-11-30
      • 1970-01-01
      • 2011-12-12
      • 1970-01-01
      • 1970-01-01
      • 2011-01-20
      相关资源
      最近更新 更多