TEXT2PDF,TEXToPDF,TXT2PDF,TXTToPDF( C++ SourceCode )


TXT2PDF_C.ZIP (6k)
fileinfo: txt2pdf.cpp (22k) txt2pdf.h (5k) main.cpp (1k)

////////////////////////////////////////////////////////////////////////////////
// 
// main.cpp
//                                                       papy's softwarelibrary
//////////////////////////////////////////////////////////////////////////////// 

#include <stdio.h>
#include "txt2pdf.h"

int main(int argc,char *argv[])
{
  try
  {
     if (argc >= 2)
     {
       CTxt2pdf hoge;
       // argv[1]で指定されたテキストファイルをPDFファイルに変換
       hoge.txt2pdf(argv[1],"C:\\test.pdf");     
     }
  }
  catch (char* S )
  {
    printf("ERROR : %s\n",S);
  }
  catch (...)
  {
    printf("ERROR : %s\n",PDF_ERROR_UNKNOWN);
  }

  return(0);
}
////////////////////////////////////////////////////////////////////////////////
// 
// txt2pdf.h
//
//////////////////////////////////////////////////////////////////////////////// 

/* -------------- Support Japanese charcode "ShiftJIS" Only! ---------------- */

#ifndef __TXT2PDF_H__
#define __TXT2PDF_H__

#include <stdio.h>
#include <malloc.h>
#include <string.h>

typedef int                 BOOL;
typedef unsigned char       BYTE;
typedef unsigned short      WORD;
typedef unsigned long       DWORD;

#define FALSE               0
#define TRUE                1

#define PDF_ERROR_NOMEMORY     "メモリを確保できませんでした。" 
#define PDF_ERROR_ZERO         "初期サイズは0にはできません。" 
#define PDF_ERROR_INDEXOVER    "インデックスの指定が不正です。" 
#define PDF_ERROR_FILEREAD     "ファイルの読み込みに失敗しました。"
#define PDF_ERROR_FILECREATE   "ファイルの作成に失敗しました。" 
#define PDF_ERROR_FILEPOINTER  "ファイルポインタが無効です。" 
#define PDF_ERROR_UNKNOWN      "予期せぬ例外が発生しました。" 

////////////////////////////////////////////////////////////////////////////////
//   CPList (ポインタリスト)
////////////////////////////////////////////////////////////////////////////////
class CPList
{
  private:
     DWORD *FBuffer;
     int    FCount;
  protected:
  public:
     CPList(); 
     ~CPList();   
     void* operator[]( int Index );
     void* Get(int Index) const;
     int   Count()        const;     
     void  Add(void *P);    
     void  Clear();                 
};

////////////////////////////////////////////////////////////////////////////////
//   CPStringList (文字列リスト)
////////////////////////////////////////////////////////////////////////////////
class CPStringList
{
  private:
     CPList *FBuffer;
  protected:
  public: 
      CPStringList(); 
      CPStringList(const CPStringList& Value); 
     ~CPStringList();   
     const char*  operator[]( int Index );
     CPStringList& operator=(const CPStringList& Value);
     CPStringList& Assign(const CPStringList &Source); 
     void  Add(const char* S);
     const char* Get(int Index) const;
     int   Count()              const;     
     void  Clear();
     void  LoadFromFile(FILE *AStream);
     void  LoadFromFile(const char* Filename);
     void  SaveToFile(FILE *AStream,const char* LineFeed="\r\n")        const;
     void  SaveToFile(const char* Filename,const char* LineFeed="\r\n") const;
};

////////////////////////////////////////////////////////////////////////////////
//   CPDFObjMemManager (相互参照テーブル) [ 内部用 ]
////////////////////////////////////////////////////////////////////////////////
class CPDFObjMemManager
{
  private:
     DWORD *FBuffer;
     DWORD FObjectCount;
     DWORD FReallocCount;
  protected:
  public:
     DWORD ObjectIndex;
     DWORD *ObjectPosArray;
     CPDFObjMemManager(DWORD ObjectCount=1000, DWORD ReallocCount=1000); 
     ~CPDFObjMemManager();   
     void MemoryCheck();              
};

////////////////////////////////////////////////////////////////////////////////
//   CTxt2pdf (テキストPDF変換)
////////////////////////////////////////////////////////////////////////////////
class CTxt2pdf
{
  private:      
     WORD m_PageWidth;    
     WORD m_PageHeight;      
     BYTE m_MarginX ;        
     BYTE m_MarginY ;       
     BYTE m_FontSize;       
     char *m_FontEncoding;   
     char *m_FontWidth;      
     char *m_FontName;       
     void AsciiHexEncoding(FILE *AStream,const char *S);
     void Write_CrossReferenceTable(FILE *AStream,DWORD ObjectPosArray[],DWORD Count);
     void DrawText(FILE *AStream,int x,int y,CPStringList &Lines);
     int  GetTextWidth(const char* S);
     void AutoLineFeed(CPStringList &Lines);
     void Write_PageObject(FILE *AStream,CPDFObjMemManager &ObjectMem, CPStringList &Lines,CPStringList &PageList);
  protected:
  public:
     void txt2pdf(FILE *Input,FILE *Output,WORD PageWidth = 595,  // 用紙の横サイズ
                                           WORD PageHeight= 842,  // 用紙の縦サイズ
                                           BYTE MarginX   =  30,  // 余白 (← →)
                                           BYTE MarginY   =  30,  // 余白 (↑ ↓)
                                           BYTE FontSize  =  12); // フォントのサイズ (1-100ぐらいまで)
     void txt2pdf(const char *OpenName,const char *SaveName,WORD PageWidth = 595,   // 用紙の横サイズ
                                                            WORD PageHeight= 842,   // 用紙の縦サイズ
                                                            BYTE MarginX   =  30,   // 余白 (← →)
                                                            BYTE MarginY   =  30,   // 余白 (↑ ↓)
                                                            BYTE FontSize  =  12);  // フォントのサイズ (1-100ぐらいまで)
};

// ---------------------------
// 用紙サイズとポイントの関係
// ---------------------------
//  A3 842x1191  297x420mm
//  A4 595x842   210x297mm
//  A5 420x595   148x210mm
//  B4 729x1032  257x364mm
//  B5 516x729   182x257mm
// ---------------------------

#endif // __TXT2PDF_H__