⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 internaldocument.cpp.svn-base

📁 okular
💻 SVN-BASE
📖 第 1 页 / 共 2 页
字号:
/*************************************************************************** *   Copyright (C) 1997-2005 the KGhostView authors. See file GV_AUTHORS.  * *   Copyright (C) 2005 by Piotr Szymanski <niedakh@gmail.com>             * *                                                                         * *   Many portions of this file are based on kghostview's kpswidget code   * *                                                                         * *   This program is free software; you can redistribute it and/or modify  * *   it under the terms of the GNU General Public License as published by  * *   the Free Software Foundation; either version 2 of the License, or     * *   (at your option) any later version.                                   * ***************************************************************************/#include <kdebug.h>#include <kglobal.h>#include <klocale.h>#include <qfile.h>#include <qstring.h>#include <qstringlist.h>extern "C" {#include "ps.h"}#include "internaldocument.h"QStringList GSInternalDocument::paperSizes(){    QStringList list;    int i=0;    for (;i<CDSC_KNOWN_MEDIA;i++)    {        if ( ! dsc_known_media[i].name )            break;        list << QString ( dsc_known_media[i].name );    }    return list;}void GSInternalDocument::scanDSC(){    m_dsc = new KDSC();    char buf[4096];    int count=1;    while( count != 0 )    {        count = fread( buf, sizeof(char), sizeof( buf ), m_internalFile );        m_dsc->scanData( buf, count );    }    m_dsc->fixup();}GSInternalDocument::GSInternalDocument(const QString &fname, Format form) : m_error(false), m_fileName(fname), docInfo(0), m_format(form){    m_internalFile = fopen(QFile::encodeName(fname),"r");    if( m_internalFile == 0 )    {        m_error=true;        m_errorString=strerror(errno);    }    if (!m_error)    {        m_fallbackMedia = pageSizeToString( static_cast< QPrinter::PageSize >( KGlobal::locale()->pageSize() ) );        m_overrideOrientation = CDSC_ORIENT_UNKNOWN;        m_overrideMedia = QString();        scanDSC();        if (!m_dsc)        {            m_error=true;            m_errorString="Failed to construct KDSC";        }        if ( !m_error && ! m_dsc->dsc() )        {            m_error=true;            // note this is not a fatal error, just a notice, we support docs without dsc            m_errorString="Document has no DSC.";        }    }    if (!m_error)    {        // available media information        // 1. known predefined media        const CDSCMEDIA* m = dsc_known_media;        while( m->name )        {            m_mediaNames << m->name;            m++;        }        // 2. media defined in the document        if( m_dsc->media() )         {            unsigned int end=m_dsc->media_count();            for( unsigned int i = 0; i < end ; i++ )             {                if( m_dsc->media()[i] && m_dsc->media()[i]->name )                    m_mediaNames << m_dsc->media()[i]->name;            }        }    }    if (m_error)        kDebug(4656) << m_errorString << endl;}GSInternalDocument::~GSInternalDocument(){    delete docInfo;}const DocumentInfo * GSInternalDocument::generateDocumentInfo(){    if (! m_dsc->dsc() )        return 0L;    if (!docInfo)    {        docInfo = new DocumentInfo();        docInfo->set( "title", m_dsc->dsc_title(), i18n("Title") );        docInfo->set( "author", m_dsc->dsc_for(), i18n("Author") );        docInfo->set( "creator", m_dsc->dsc_creator(), i18n("Creator") );        docInfo->set( "creationDate", m_dsc->dsc_date(), i18n("Created") );        docInfo->set( "copyright", m_dsc->dsc_copyright(), i18n("Copyright") );        QString dscVer=m_dsc->dsc_version();        docInfo->set( "dscversion", dscVer, i18n("DSC version") );        switch (m_format)        {            case PDF:                docInfo->set( "mimeType", "application/pdf" );                break;            case PS:                docInfo->set( "langlevel", QString::number(m_dsc->language_level()), i18n("Language Level") );                if (dscVer.contains ("EPS"))                    docInfo->set( "mimeType", "image/x-eps" );                else                    docInfo->set( "mimeType", "application/postscript" );                break;        }        int pages=m_dsc->page_pages();        if (!pages)            pages = m_dsc->page_count();        docInfo->set( "pages", QString::number(pages), i18n("Pages") );    }    return docInfo;}QString GSInternalDocument::pageSizeToString( QPrinter::PageSize pSize ){    switch( pSize )    {        case QPrinter::A3:             return "A3";        case QPrinter::A4:             return "A4";        case QPrinter::A5:             return "A5";        case QPrinter::B4:             return "B4";        case QPrinter::Ledger:            return "Ledger";        case QPrinter::Legal:            return "Legal";        case QPrinter::Letter:            return "Letter";        default:            return "Unknown";    }}QString GSInternalDocument::pageMedia() const{    if( !m_overrideMedia.isNull() )        return m_overrideMedia;    else if( m_dsc->page_media() != 0 )        return QString( m_dsc->page_media()->name );    else if( m_dsc->bbox().get() != 0 )        return QString( "BoundingBox" );    else        return m_fallbackMedia;}QString GSInternalDocument::pageMedia( int pagenumber ) const{    if ( !m_dsc )         return pageMedia();    if ( unsigned( pagenumber ) >= m_dsc->page_count() )         return pageMedia();    if( !m_overrideMedia.isNull() )        return m_overrideMedia;    else if( m_dsc->page()[ pagenumber ].media != 0 )        return QString( m_dsc->page()[ pagenumber ].media->name );    else if( m_dsc->page_media() != 0 )        return QString( m_dsc->page_media()->name );    else if( m_dsc->bbox().get() != 0 )        return QString( "BoundingBox" );    else        return m_fallbackMedia;}const CDSCMEDIA* GSInternalDocument::findMediaByName( const QString& mediaName ) const{    if( m_dsc->media() )     {        for( unsigned int i = 0; i < m_dsc->media_count(); i++ )         {            if( m_dsc->media()[i] && m_dsc->media()[i]->name                && qstricmp( mediaName.toLocal8Bit(), m_dsc->media()[i]->name ) == 0 )             {                return m_dsc->media()[i];            }        }    }    /* It didn't match %%DocumentPaperSizes: */    /* Try our known media */    const CDSCMEDIA *m = dsc_known_media;    while( m->name )     {        if( qstricmp( mediaName.toLocal8Bit(), m->name ) == 0 )             return m;        m++;    }    return 0;}QString GSInternalDocument::getPaperSize( const QString& mediaName ) const{    const CDSCMEDIA * r = 0;    r=findMediaByName( mediaName );    if (!r)    {        const CDSCMEDIA *m = dsc_known_media;        while( m->name )         {            if( qstricmp( m_fallbackMedia.toLocal8Bit(), m->name ) == 0 )                 return QString(m->name);            m++;        }        // should never happen as we have fallback        kDebug(4656) << "UNABLE TO FIND PAPER SIZE FOR MEDIA NAME: " << mediaName << endl;        return QString("a4");    }    return QString(r->name);}QSize GSInternalDocument::computePageSize( const QString& mediaName ) const{    if( mediaName == "BoundingBox" )     {        if( m_dsc->bbox().get() != 0 )            return m_dsc->bbox()->size();        else            return QSize( 0, 0 );    }    const CDSCMEDIA* m = findMediaByName( mediaName );    Q_ASSERT( m );    return QSize( static_cast<int>( m->width ), static_cast<int>( m->height ) );}CDSC_ORIENTATION_ENUM GSInternalDocument::orientation() const{

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -