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;
+}
+