☆DocuWorksファイルの自動正立
DocuWorksでスキャンした書類を向きを揃えるのは面倒なので、何か方法がないのかなと思って調べてみました。
DocuWorks Deskのメニューには自動処理的なものが見当たらなかったのですが、APIにXDW_RotatePageAutoというのがあったので、試してみました。
→メニューにありました。この記事の追記を参照して下さい。
実行すると次のような横向きの画像が・・・
上の画像以外にもページ数が多いものや少ないもの等いろいろな書類を処理してみましたが、一つだけ次のようなエラーが表示されるものがありました。
DocuWorks Development Tool Kit 6.2 日本語版
http://www.fujixerox.co.jp/soft/docuworks/download301.html
[20080121 追記]
Docuworks Deskの設定のスキャン取り込みタブにスキャン文書の後処理に読める方向に全ページを自動回転するという設定がありました。
→メニューにありました。この記事の追記を参照して下さい。
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; Memo1: TMemo; procedure Button1Click(Sender: TObject); procedure FormDestroy(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} const XDW_OPEN_UPDATE = 1; type XDW_DOCUMENT_HANDLE = record dummy: LongInt; end; XDW_OPEN_MODE = record nSize: Integer; nOption: Integer; end; XDW_DOCUMENT_INFO = record nSize: Integer; nPages: Integer; nVersion: Integer; nOriginalData: Integer; nDocType: Integer; nPermission: Integer; nShowAnnotations: Integer; nDocuments: Integer; nBinderColor: Integer; nBinderSize: Integer; end; function XDW_OpenDocumentHandle(const lpszFilePath: PAnsiChar; var Handle: XDW_DOCUMENT_HANDLE; var OpenMode: XDW_OPEN_MODE): Integer; stdcall; external 'xdwapi.dll'; function XDW_GetDocumentInformation(Handle: XDW_DOCUMENT_HANDLE; var DocumentInfo: XDW_DOCUMENT_INFO): Integer; stdcall; external 'xdwapi.dll'; function XDW_RotatePageAuto(Handle: XDW_DOCUMENT_HANDLE; nPage: Integer; reserved: Pointer=nil): Integer; stdcall; external 'xdwapi.dll'; function XDW_SaveDocument(Handle: XDW_DOCUMENT_HANDLE; reserved: Pointer= nil): Integer; stdcall; external 'xdwapi.dll'; function XDW_CloseDocumentHandle(Handle: XDW_DOCUMENT_HANDLE; reserved: Pointer=nil): Integer; stdcall; external 'xdwapi.dll'; function XDW_Finalize(reserved: Pointer = nil): Integer; stdcall; external 'xdwapi.dll'; procedure TForm1.Button1Click(Sender: TObject); var h: XDW_DOCUMENT_HANDLE; mode: XDW_OPEN_MODE; info: XDW_DOCUMENT_INFO; InputFile: String; I, J, K, Last_Page: Integer; begin // 文書ハンドルを開く mode.nSize := sizeof(XDW_OPEN_MODE); mode.nOption := XDW_OPEN_UPDATE; InputFile := 'c:\delphi.xdw'; I := XDW_OpenDocumentHandle(PAnsiChar(InputFile), h, mode); try if I > -1 then begin info.nSize := SizeOf(XDW_DOCUMENT_INFO); info.nPages := 0; info.nVersion := 0; info.nOriginalData := 0; info.nDocType := 0; info.nPermission := 0; info.nShowAnnotations := 0; info.nDocuments := 0; info.nBinderColor := 0; info.nBinderSize := 0; XDW_GetDocumentInformation(h, info); Last_Page := info.nPages; K := 0; for I := 1 to Last_Page do begin J := XDW_RotatePageAuto(h, I); K := K + J; end; // エラーがない場合に変更内容を保存する if K = 0 then XDW_SaveDocument(h); end; finally // 文書ハンドルを閉じる XDW_CloseDocumentHandle(h); end; end; procedure TForm1.FormDestroy(Sender: TObject); begin XDW_Finalize(nil); // XDW_RotatePageAutoを呼び出したらこの処理が必ず必要 end; end.
実行すると次のような横向きの画像が・・・
このようにきちんと縦向きに回転されました。
上の画像以外にもページ数が多いものや少ないもの等いろいろな書類を処理してみましたが、一つだけ次のようなエラーが表示されるものがありました。
状況としては10ページある書類データで最終ページの処理でエラーになります。他のデータと同じくスキャンして取り込んだものなのでパーミッションの問題ではないと思うのですが、エラーの原因はわかりませんでした。
DocuWorks Development Tool Kit 6.2 日本語版
http://www.fujixerox.co.jp/soft/docuworks/download301.html
[20080121 追記]
Docuworks Deskの設定のスキャン取り込みタブにスキャン文書の後処理に読める方向に全ページを自動回転するという設定がありました。
| 固定リンク