Mercurial > mercurial > hgweb_xdwtools.cgi
changeset 12:e07f9f1d1cc5 default tip
add xdw2pdf.
author | pyon@macmini |
---|---|
date | Fri, 02 Aug 2019 20:12:44 +0900 |
parents | 3cecce3b2ce3 |
children | |
files | xdw2pdf.cpp |
diffstat | 1 files changed, 99 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/xdw2pdf.cpp Fri Aug 02 20:12:44 2019 +0900 @@ -0,0 +1,99 @@ +/* Makefile +debug: xdw2pdf.cpp + gcc -g -O0 -I. xdw2pdf.cpp xdwapi.lib + #date + #./a.exe target.xdw + #date + +release: xdw2pdf.cpp + gcc -I. xdw2pdf.cpp xdwapi.lib -static -o xdw2pdf.exe + strip xdw2pdf.exe +*/ + +#include <stdio.h> +#include <io.h> +#include <windows.h> +#include <xdw_api.h> + +void print_error(int code) { + fprintf(stderr, "Error code : %d\n", code); + switch (code) { + case XDW_E_NOT_INSTALLED: + fprintf(stderr, "DocuWorksがインストールされていません。"); + break; + case XDW_E_FILE_NOT_FOUND: + fprintf(stderr, "指定されたファイルが見つかりません。"); + break; + case XDW_E_FILE_EXISTS: + fprintf(stderr, "指定されたファイルはすでに存在します。"); + break; + case XDW_E_ACCESSDENIED: + case XDW_E_INVALID_NAME: + case XDW_E_BAD_NETPATH: + fprintf(stderr, "指定されたファイルを開くことができません。"); + break; + case XDW_E_BAD_FORMAT: + fprintf(stderr, "指定されたファイルは正しいフォーマットではありません。"); + break; + case XDW_E_INVALID_ACCESS: + fprintf(stderr, "指定された操作をする権利がありません。"); + break; + default: + fprintf(stderr, "エラーが発生しました。"); + break; + } +} + +void print_help(const char *prog) { + fprintf(stderr, "%s in.xdw out.pdf\n", prog); +} + +int main(int argc, char* argv[]) { + + if (argc != 3) { + print_help(argv[0]); + exit(1); + } + + char in_path[_MAX_PATH], out_path[_MAX_PATH]; + _fullpath(in_path, argv[1], _MAX_PATH); + _fullpath(out_path, argv[2], _MAX_PATH); + remove(out_path); + + int api_result = 0; + + // 文書ハンドルを開く + XDW_DOCUMENT_HANDLE h = NULL; + XDW_OPEN_MODE_EX mode = {sizeof(XDW_OPEN_MODE_EX), XDW_OPEN_READONLY, XDW_AUTH_NODIALOGUE}; + api_result = XDW_OpenDocumentHandle(in_path, &h, (XDW_OPEN_MODE*)&mode); + if (api_result < 0) { + print_error(api_result); + return 1; + } + + XDW_DOCUMENT_INFO info = { sizeof(XDW_DOCUMENT_INFO), 0, 0, 0 }; // 総ページ数を得る + XDW_GetDocumentInformation(h, &info); + + XDW_IMAGE_OPTION_PDF pdf = { + sizeof(XDW_IMAGE_OPTION_PDF), + XDW_COMPRESS_MRC_NORMAL, //劣化有 標準(MRC) (default) + XDW_CONVERT_MRC_OS, + info.nPages + }; + + XDW_IMAGE_OPTION_EX ex = { + sizeof(XDW_IMAGE_OPTION_EX), + 600, // dpi + XDW_IMAGE_MONO_HIGHQUALITY, + XDW_IMAGE_PDF, + &pdf + }; + api_result = XDW_ConvertPageToImageFile (h, 1, out_path, (XDW_IMAGE_OPTION*)&ex); + + // 文書ハンドルを閉じる + XDW_SaveDocument(h, NULL); + XDW_CloseDocumentHandle(h, NULL); + + return 0; +} +