////////////////////////////////////////////////////////////////////////////////
//
// 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__
|