Node.jsを使ってCopper PDF 2.1以降にアクセスするためのドライバです。
npm install https://github.com/mimidesunya/cti.nodejs.git
詳細は examples/ ディレクトリ内のサンプルコードを参照してください。
import { get_session } from 'copper-cti';
import * as fs from 'fs';
import * as path from 'path';
async function main() {
// Copper PDFサーバーに接続 (例: ctip://cti.li/)
const session = get_session('ctip://cti.li/', {
user: 'user',
password: 'kappa'
});
try {
const outFile = 'output/result.pdf';
// 出力先ディレクトリがない場合は作成
const outDir = path.dirname(outFile);
if (!fs.existsSync(outDir)) {
fs.mkdirSync(outDir, { recursive: true });
}
// 結果の出力先をファイルに指定
session.setOutputAsFile(outFile);
// 変換中のメッセージを表示するハンドラ
session.setMessageFunc((code, msg, args) => {
console.log(`Message [${code}]: ${msg}`);
});
// 変換開始 (ストリームへの書き込み)
const writer = session.transcode('.');
// HTMLを流し込む
writer.write('<html><body><h1>Hello, Copper PDF!</h1></body></html>');
writer.end();
// 変換完了を待機
await session.waitForCompletion();
console.log(`PDF generated successfully: ${outFile}`);
} catch (err) {
console.error('Error:', err);
} finally {
session.close();
}
}
main();
const { get_session } = require('copper-cti');
const fs = require('fs');
async function main() {
const session = get_session('ctip://cti.li/', {
user: 'user',
password: 'kappa'
});
try {
session.setOutputAsFile('output/result.pdf');
const writer = session.transcode('.');
fs.createReadStream('index.html').pipe(writer);
await session.waitForCompletion();
console.log('PDF generated successfully');
} catch (err) {
console.error('Error:', err);
} finally {
session.close();
}
}
main();
import { get_session } from 'copper-cti';
import * as fs from 'fs';
async function main() {
const session = get_session('ctip://cti.li/', {
user: 'user',
password: 'kappa'
});
try {
// 結果を標準出力に流す
session.setOutputAsStream(process.stdout);
const writer = session.transcode('.');
fs.createReadStream('index.html').pipe(writer);
await session.waitForCompletion();
} catch (err) {
console.error(err);
} finally {
session.close();
}
}
main();
session.setProperty('output.pdf.version', '1.5');
import { get_session, Resource } from 'copper-cti';
import * as fs from 'fs';
import * as path from 'path';
async function main() {
const session = get_session('ctip://cti.li/', {
user: 'user',
password: 'kappa'
});
try {
session.setOutputAsFile('output/result.pdf');
// リソース解決コールバックを設定
session.setResolverFunc((uri: string, resource: Resource) => {
const localPath = path.join(__dirname, uri);
if (fs.existsSync(localPath)) {
const out = resource.found({ mime_type: 'text/css' });
fs.createReadStream(localPath).pipe(out);
}
// リソースが見つからない場合は resource.found() を呼ばない
});
const writer = session.transcode('.');
fs.createReadStream('index.html').pipe(writer);
await session.waitForCompletion();
} finally {
session.close();
}
}
main();
// セッションオプション
interface SessionOptions {
user?: string;
password?: string;
encoding?: string;
}
// トランスコードオプション
interface TranscodeOptions {
mimeType?: string; // デフォルト: 'text/html'
encoding?: string; // デフォルト: 'UTF-8'
length?: number; // デフォルト: -1 (不明)
}
// メッセージコールバック
type MessageCallback = (code: number, message: string, args: string[]) => void;
// 進捗コールバック
type ProgressCallback = (total: number | null, read: number) => void;
// リソース解決コールバック
type ResolverCallback = (uri: string, resource: Resource) => void | Promise<void>;
| メソッド | 説明 |
|---|---|
setOutputAsFile(path) |
PDFをファイルに出力 |
setOutputAsStream(stream) |
PDFをストリームに出力 |
setOutputAsDirectory(dir, prefix, suffix) |
PDFをディレクトリに連番で出力 |
setMessageFunc(callback) |
メッセージコールバックを設定 |
setProgressFunc(callback) |
進捗コールバックを設定 |
setResolverFunc(callback) |
リソース解決コールバックを設定 |
setProperty(name, value) |
プロパティを設定 |
transcode(uri?, opts?) |
変換を開始(Writableを返す) |
waitForCompletion() |
変換完了を待機 |
close() |
セッションを閉じる |
cti.nodejs/
├── src/ # TypeScriptソースコード
├── dist/ # コンパイル済みJavaScript + 型定義
├── examples/ # 使用例
└── package.json
テストにはCopper PDFサーバーへの接続が必要です(インテグレーションテスト)。
test/test-config.json を作成:{
"host": "localhost",
"port": 8099,
"user": "user",
"password": "kappa"
}
npm test
Ant から実行する場合は、cti.nodejs 配下で以下を実行します。
ant test
サーバーが起動していない場合、インテグレーションテストは自動的にスキップされます。 ユニットテスト(builder, session_boundary)はサーバーなしで実行できます。
# 依存関係のインストール
npm install
# TypeScriptをコンパイル
npm run build
# テストを実行
npm test
# サンプルを実行
node examples/output-file.js
TypeDocを使用してAPIドキュメントを生成:
npm run doc
生成されたドキュメントは docs/ ディレクトリに出力されます。
また、Ant から配布アーカイブを生成するには次を実行します。
ant dist
Apache License 2.0