pdf_obj.cpp
上传用户:yhdzpy8989
上传日期:2007-06-13
资源大小:13604k
文件大小:7k
- /*
- * ===========================================================================
- * PRODUCTION $Log: pdf_obj.cpp,v $
- * PRODUCTION Revision 1000.1 2004/06/01 21:03:43 gouriano
- * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.9
- * PRODUCTION
- * ===========================================================================
- */
- /* $Id: pdf_obj.cpp,v 1000.1 2004/06/01 21:03:43 gouriano Exp $
- * ===========================================================================
- *
- * PUBLIC DOMAIN NOTICE
- * National Center for Biotechnology Information
- *
- * This software / database is a "United States Government Work" under the
- * terms of the United States Copyright Act. It was written as part of
- * the author's official duties as a United States Government employee and
- * thus cannot be copyrighted. This software / database is freely available
- * to the public for use. The National Library of Medicine and the U.S.
- * Government have not placed any restriction on its use or reproduction.
- *
- * Although all reasonable efforts have been taken to ensure the accuracy
- * and reliability of the software and data, the NLM and the U.S.
- * Government do not and cannot warrant the performance or results that
- * may be obtained by using this software or data. The NLM and the U.S.
- * Government disclaim all warranties, express or implied, including
- * warranties of performance, merchantability or fitness for any particular
- * purpose.
- *
- * Please cite the author in any work or product based on this material.
- *
- * ===========================================================================
- *
- * Authors: Peter Meric
- *
- * File Description:
- * CPdfObj - Stream for output of Adobe PDF objects
- */
- #include <ncbi_pch.hpp>
- #include "pdf_obj.hpp"
- #include "pdf_object.hpp"
- #include "pdf_object_writer.hpp"
- #include <math.h>
- BEGIN_NCBI_SCOPE
- CPdfObj::CPdfObj(const string& str) : m_Str(str)
- {
- }
- CPdfObj::CPdfObj()
- {
- }
- CPdfObj::~CPdfObj()
- {
- }
- void CPdfObj::PrintTo(CNcbiOstream& stream) const
- {
- stream << m_Str;
- }
- CPdfNumber::CPdfNumber(unsigned int i)
- : m_Num(i),
- m_Prec(0)
- {
- }
- CPdfNumber::CPdfNumber(int i)
- : m_Num(i),
- m_Prec(0)
- {
- }
- CPdfNumber::CPdfNumber(double d)
- : m_Num(d),
- m_Prec(6)
- {
- }
- CPdfNumber::~CPdfNumber()
- {
- }
- void CPdfNumber::PrintTo(CNcbiOstream& stream) const
- {
- stream << setiosflags(ios::fixed) << setprecision(m_Prec) << m_Num;
- }
- CPdfRotate::CPdfRotate(double angle) : m_Rot(angle)
- {
- }
- CPdfRotate::~CPdfRotate()
- {
- }
- void CPdfRotate::PrintTo(CNcbiOstream& stream) const
- {
- const double rad = m_Rot * 3.1415926535 / 180;
- const double c = cos(rad);
- const double s = sin(rad);
- stream << setiosflags(ios::fixed) << c << ' ' << s << ' ' << -s << ' ' << c << " 0 0 cm";
- }
- CPdfTranslate::CPdfTranslate(double xoff, double yoff)
- : m_XOff(xoff),
- m_YOff(yoff),
- m_Prec(6)
- {
- }
- CPdfTranslate::CPdfTranslate(unsigned int xoff, unsigned int yoff)
- : m_XOff(xoff),
- m_YOff(yoff),
- m_Prec(0)
- {
- }
- CPdfTranslate::CPdfTranslate(int xoff, int yoff)
- : m_XOff(xoff),
- m_YOff(yoff),
- m_Prec(0)
- {
- }
- CPdfTranslate::~CPdfTranslate()
- {
- }
- void CPdfTranslate::PrintTo(CNcbiOstream& stream) const
- {
- stream << "1 0 0 1 " << setiosflags(ios::fixed) << setprecision(m_Prec)
- << m_XOff << ' ' << m_YOff << " cm";
- }
- CPdfString::CPdfString(const string& str) : CPdfObj(str)
- {
- }
- CPdfString::~CPdfString()
- {
- }
- void CPdfString::PrintTo(CNcbiOstream& stream) const
- {
- stream << '(' << m_Str << ')';
- }
- CPdfName::CPdfName(const string& str) : CPdfObj(str)
- {
- }
- CPdfName::~CPdfName()
- {
- }
- void CPdfName::PrintTo(CNcbiOstream& stream) const
- {
- stream << '/' << m_Str;
- }
- CPdfIndirectObj::CPdfIndirectObj(const CRef<CPdfObject>& obj) : m_Obj(obj)
- {
- }
- CPdfIndirectObj::~CPdfIndirectObj()
- {
- }
- void CPdfIndirectObj::PrintTo(CNcbiOstream& stream) const
- {
- stream << m_Obj->GetObjNum() << ' ' << m_Obj->GetGeneration() << " R";
- }
- CPdfArray::TArray& CPdfArray::GetArray(void)
- {
- return m_Array;
- }
- void CPdfArray::PrintTo(CNcbiOstream& stream) const
- {
- if (m_Array.size() == 0) {
- return;
- }
- stream << '[';
- bool first = true;
- ITERATE(vector<TPdfObjRef>, it, m_Array) {
- if (first) {
- first = false;
- } else {
- stream << ' ';
- }
- stream << **it;
- }
- stream << ']';
- }
- void CPdfArray::Add(const CRef<CPdfArray>& array)
- {
- m_Array.insert(m_Array.end(),
- array->m_Array.begin(), array->m_Array.end());
- /*
- ITERATE(vector<TPdfObjRef>, it, array->m_Array) {
- m_Array.push_back(*it);
- }
- */
- }
- CPdfDictionary::TPdfObjRef& CPdfDictionary::operator[](const string& key)
- {
- return m_Dict[key];
- }
- void CPdfDictionary::PrintTo(CNcbiOstream& stream) const
- {
- if (m_Dict.size() == 0) {
- return;
- }
- stream << "<<";
- ITERATE(TDict, it, m_Dict) {
- const CPdfObj* val = it->second.GetPointer();
- bool insert_space = false;
- if (dynamic_cast < const CPdfIndirectObj*>(val) ||
- dynamic_cast < const CPdfNumber*>(val)) {
- insert_space = true;
- }
- stream << '/' << it->first;
- if (insert_space) {
- stream << ' ';
- }
- stream << *val;
- }
- stream << ">>";
- }
- void CPdfDictionary::Add(const CRef<CPdfDictionary>& dict)
- {
- //
- // std::map::insert(beg, end) doesn't seem to work on MSVC++ 6.0.
- // Iterate "manually" and copy each element instead.
- //
- //m_Dict.insert(dict->m_Dict.begin(), dict->m_Dict.end());
- ITERATE(TDict, it, dict->m_Dict) {
- m_Dict.insert(*it);
- }
- }
- END_NCBI_SCOPE
- /*
- * ===========================================================================
- * $Log: pdf_obj.cpp,v $
- * Revision 1000.1 2004/06/01 21:03:43 gouriano
- * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.9
- *
- * Revision 1.9 2004/05/21 22:27:50 gorelenk
- * Added PCH ncbi_pch.hpp
- *
- * Revision 1.8 2003/08/11 19:27:35 dicuccio
- * Favor member insert to std::copy()
- *
- * Revision 1.7 2003/06/25 18:02:51 meric
- * Source rearrangement: move "private" headers into the src/ tree
- *
- * Revision 1.6 2003/06/24 15:43:26 meric
- * Added CPdfRotate and CPdfTranslate
- * Added CPdfArray::Add(...)
- * Added CPdfNumber ctors for [unsigned] int, set precision on output
- *
- * Revision 1.5 2003/06/18 17:25:39 meric
- * Final phase of print reorg: remove dependence on gui/opengl and OpenGL
- *
- * Revision 1.4 2003/06/18 16:40:33 meric
- * First phase of print reorg: remove dependence on gui/opengl and OpenGL
- * except for class COpenGLPrintBuffer
- *
- * Revision 1.3 2003/06/17 19:33:38 meric
- * Print Dictionary more concisely, on one line
- *
- * Revision 1.2 2003/06/16 12:44:52 dicuccio
- * Clean-up after initial commit
- *
- * Revision 1.1 2003 / 06 / 13 18:13:56 meric
- * Initial version
- *
- *
- * ===========================================================================
- */