処理中ファイル書式 | 状態取得書式 | ユーザーデータ書式 | グローバルデータ書式 | ローカルデータ書式 | 設定フォルダデータ書式 | 日付書式 | 文字列書式 | 数学書式 | 制御書式 | ファイルシステム書式 | テキストファイル書式 | データベース書式 | プロセス書式 | Web書式 | DocuWorks書式 | DocuWorks書式 (アノテーション関連) | PDF書式 | Excel書式 | 画像処理書式 | AI書式 | その他の書式
PDFファイルをオープンすると、そのファイルを識別するためのキーを返却します。以後、識別キーを使って処理を行います。(識別キーはひとつだけメモリに記憶されますので省略することもできます。)
マクロでオープンされたPDFファイルで、クローズされていないファイルがある場合は、ファイルの繰り返し処理の最後、又は設定の実行の最後でクローズされます。(この場合のクローズは更新内容は保存されません。)
PDFのオープンクローズを使用すると、オープン時にファイルをロックするので他のプロセスが処理中にアクセスするのを防ぐことができます。また、処理の途中でエラーが発生してクローズが行われない場合はPDFの更新が行われないのでトランザクション処理が可能です。
引き数で指定されたPDFファイルをオープンします。ファイルが存在しない場合はエラーとなります。
オープンに成功した場合は識別キー、失敗した場合はエラーになります。
オープンに成功した場合は識別キーがメモリに記憶されます。以後、識別キーが省略された場合はメモリに記憶している識別キーを参照します。
メモリに記憶している識別キーは設定の実行が終わるまで保持しています。また、別のファイルをオープンすると上書きされます。
ファイルが使用中など、ファイルをオープンできなかった場合はエラーが発生します。
#PDFファイルをオープン
{%PDF_OPEN(D:\Home\PdfDemo\Demo01\Sample.pdf)}
#クローズ
{%PDF_CLOSE()}
#PDFファイルをオープン
{%SET_U(Pdf,Handle1,{%PDF_OPEN(D:\Home\PdfDemo\Demo01\Sample1.pdf)})}
{%SET_U(Pdf,Handle2,{%PDF_OPEN(D:\Home\PdfDemo\Demo01\Sample2.pdf)})}
#Sample1.pdfから文書属性(処理日)を取得
{%SET_U(属性,処理日,{%PDF_GET_DOCUMENT_ATTRIBUTE(#Key,{%GET_U(Pdf,Handle1)},処理日)})}
#Sample2.pdfにSample1.pdfから取得した文書属性(処理日)を設定
{%PDF_SET_DOCUMENT_ATTRIBUTE(#Key,{%GET_U(Pdf,Handle2)},処理日,{%GET_U(属性,処理日)})}
#クローズ
{%PDF_CLOSE({%GET_U(Pdf,Handle1)})}
{%PDF_CLOSE({%GET_U(Pdf,Handle2)})}
引き数に渡されたハンドルのPDFファイルをクローズします。
引き数が省略された場合はメモリに記憶されている識別キーを参照して対象ファイルをクローズします。
オープンされているPDFファイルがない場合に呼び出してもエラーにならず、何も行いません。
PDFファイルの指定ページからテキストを抽出します。
ページ番号には抽出対象のページ番号を指定します。Allを指定するとすべてのページが対象となります。
抽出済データ用ユーザーデータ名には、抽出したテキストデータを格納するユーザーデータの名前を指定します。
領域指定ユーザーデータ名には、特定の領域のテキストを抽出するための座標情報をセットしたユーザーデータの名前を指定します。
領域指定は以下のような階層データをユーザーデータで作成して指定します。
領域指定
Page
All(ページ番号の指定も可)
項目名1(左下座標を指定)
X 左上X座標
Y 左上Y座標
BottomRightX 右下X座標
BottomRightY 右下Y座標
項目名2(幅と高さを指定)
X 左上X座標
Y 左上Y座標
Width 幅
Height 高さ
座標指定には以下の2つの方法があります:
方法1:X、Y、BottomRightX、BottomRightYで指定
方法2:X、Y、Width、Heightで指定
両方の方法で座標を指定した場合、BottomRightX、BottomRightYが優先されます。
工事名と図面名の座標を指定する場合
工事名はA棟と新築工事の間にスペースがあるため、単語の認識が2つに分かれます。
領域を工事名の左側の枠内の範囲にすれば分割された単語をすべて取得することができます。
{%SET_U(範囲指定,Page,All,工事名,X,192.85)}
{%SET_U(範囲指定,Page,All,工事名,Y,179.47)}
{%SET_U(範囲指定,Page,All,工事名,BottomRightX,253.55)}
{%SET_U(範囲指定,Page,All,工事名,BottomRightY,185.20)}
{%SET_U(範囲指定,Page,All,図面名,X,192.61)}
{%SET_U(範囲指定,Page,All,図面名,Y,186.88)}
{%SET_U(範囲指定,Page,All,図面名,BottomRightX,253.55)}
{%SET_U(範囲指定,Page,All,図面名,BottomRightY,193.09)}
領域指定ユーザーデータ名を指定しない場合、以下のような結果が取得されます:
FileName 図面サンプル.pdf PageCount 2 Pages 1 1 Text 図面番号 X 268.25 Y 179.66 Width 14.64 Height 3.42 2 Text 3 X 278.93 Y 190.12 Width 2.12 Height 3.70 ・ ・
領域指定ユーザーデータ名を指定した場合、以下のような結果が取得されます:
FileName ng.PDF PageCount 1 Pages 1 Rect 工事名 Texts 1 A社 2 新築工事 TextBlock 1 Text A社 X 194.61 Y 180.50 Width 6.06 Height 3.48 2 Text 新築工事 X 202.16 Y 180.44 Width 14.81 Height 3.54 X 192.85 Y 179.47 Width 60.70 Height 5.74 BottomRightX 253.55 BottomRightY 185.20 図面名 Texts 1 1階 2 平面詳細図 ・ ・
#PDFファイルをオープン
{%PDF_OPEN(D:\Home\PdfDemo\Demo01\Sample.pdf)}
# PDFテキスト抽出
{%PDF_EXTRACT_TEXT(1,抽出データ)}
# 抽出したテキスト数を確認
{%WRITE_LOG(抽出したテキスト数: {%GET_USER_DATA_COUNT(抽出データ,Pages,1)})}
#クローズ
{%PDF_CLOSE()}
#PDFファイルをオープン
{%PDF_OPEN({%GET(FullPathFileName)})}
# 領域座標を設定
{%SET_U(範囲指定,Page,All,工事名,X,192.85)}
{%SET_U(範囲指定,Page,All,工事名,Y,179.47)}
{%SET_U(範囲指定,Page,All,工事名,BottomRightX,253.55)}
{%SET_U(範囲指定,Page,All,工事名,BottomRightY,185.20)}
{%SET_U(範囲指定,Page,All,図面名,X,192.61)}
{%SET_U(範囲指定,Page,All,図面名,Y,186.88)}
{%SET_U(範囲指定,Page,All,図面名,BottomRightX,253.55)}
{%SET_U(範囲指定,Page,All,図面名,BottomRightY,193.09)}
# PDFテキスト抽出
{%PDF_EXTRACT_TEXT(All,抽出データ)}
{%LOOP L1 {%GET_U(抽出データ,PageCount)}(
{%WRITE_LOG(Page:[L_IDX(L1)])}
# 指定領域毎のテキストを取得(複数に分かれた単語も連結)
{%SET_U(属性,工事名,{%JOIN(抽出データ,Pages,[L_IDX(L1)],Rect,工事名,Texts, )})}
{%SET_U(属性,図面名,{%JOIN(抽出データ,Pages,[L_IDX(L1)],Rect,図面名,Texts, )})}
{%WRITE_LOG(工事名:{%GET_U(属性,工事名)})}
{%WRITE_LOG(図面名:{%GET_U(属性,図面名)})}
)}
#クローズ
{%PDF_CLOSE()}
PDFファイルの指定ページをイメージに変換して、QRコードを読み取ります。
読み取り結果は、DocuWorks文書の処理「QRコード読み取り(v2)」と同じ項目名・同じ値の形式でユーザーデータに格納されます。「QRコード読み取り(v2)」用に作ったマクロは、参照するユーザーデータの階層を変えるだけでそのまま使えます。
戻り値は読み取ったQRコードの総数です。検索文字で絞り込んだ後の件数で、全ページの合計になります。0件はエラーになりません(0を返します)。
| 引数 | 内容 |
|---|---|
| ページ番号 | 読み取り対象のページ番号を指定します。1以上の整数、またはAll(全ページ)を指定します。PDFファイルのページ数を超えるページを指定するとエラーになります。 |
| 結果ユーザーデータ名 | 読み取り結果を格納するユーザーデータの名前を指定します。実行時に同名のユーザーデータがある場合は削除してから作り直します。 |
| モード | SpeedPriority(速度優先)、Standard(標準)、RecognitionPriority(認識優先)のいずれかを指定します。省略した場合はStandardになります。 |
| 文字コード | SJIS、UTF-8、自動のいずれかを指定します。省略した場合はSJISになります。 |
| オプションユーザーデータ名 | 詳細設定・範囲指定・検索文字をまとめた階層データを作成したユーザーデータの名前を指定します。指定したキーだけがモードの値を上書きします。 |
オプションユーザーデータは以下のような階層データをユーザーデータで作成して指定します。指定しなかったキーはモードの値のままになります。
オプションユーザーデータ名
Dpi ページをイメージに変換する解像度(72~600)。既定 300
TimeBudgetMs 処理時間の上限(ms)。0=無制限
BrightnessBorder 固定2値化しきい値(0~255)。0=自動
MinimumModuleSize 最小モジュールサイズ(px, 1~255)
MinFinderModuleSize ファインダー検出の最小モジュール(px, 0より大きい数値)
MaxSymbols 検出最大数。0=無制限
SearchString 検索文字(正規表現)。一致したQRコードだけを結果に残す
Range
StartX 範囲 X開始(%, 0~100の整数)
StartY 範囲 Y開始(%)
EndX 範囲 X終了(%) ※開始 < 終了
EndY 範囲 Y終了(%)
キーの値が空文字の場合は、指定しなかったものとして扱います(モードの値のままになります)。Rangeを指定する場合はStartX・StartY・EndX・EndYをすべて指定してください。
PDFのページには解像度の概念がないため、QRコードを読み取るときの解像度はDpiで指定します。読み取りに使った解像度は結果のDpiに格納されます。範囲指定をしても、結果の座標はページ全体を基準にした値になります。
結果ユーザーデータには以下のような内容が格納されます。読み取り対象にしたページは、QRコードが0件でもページのスレッドが作られます。
結果ユーザーデータ名
FileName PDFのファイル名
PageCount PDFの総ページ数
Count 読み取ったQRコードの総数(全ページ合計・絞り込み後。戻り値と同じ)
Pages
<ページ番号> ← 対象ページは0件でもスレッドを作る
<番号 1~n> ← 読み順(上→下、左→右)
Dpi イメージに変換した解像度(dpi)
Data QRコードの内容
Version 型番 1~40
Level 誤り訂正レベルの数値 0=L,1=M,2=Q,3=H
LeftTopX / LeftTopY / RightTopX / RightTopY
RightBottomX / RightBottomY / LeftBottomX / LeftBottomY
四隅の座標(mm・小数第2位で四捨五入・ページ左上が原点)
Dgree QRコードの回転角度(0~359)
DegreeForRotatePage 正立させる回転角度(0/90/180/270)
TotalNumber / SequenceNumber / CheckDigit 連結QR情報(非連結は0)
MaskPattern / CharacterSet / ErrorsCorrected / DetectorStrategy / IsStructuredAppend
Info ← Pages と同じ階層
Count 総件数
TimedOut いずれかのページで打ち切りが起きたら True
ElapsedMilliseconds 解析時間の合計(ms)
SuspectedRegionCount 読み漏らし候補の合計
Pages
<ページ番号>
Count / TimedOut / ElapsedMilliseconds / SuspectedRegionCount
SuspectedRegions
<番号>
Left / Top / Width / Height / CenterX / CenterY (mm)
FinderCount / Confidence
ページのスレッドの直下はQRコードの番号だけです。解析全体の情報はPagesと同じ階層のInfoに格納されるため、{%GET_USER_DATA_KEY_COUNT(結果ユーザーデータ名,Pages,ページ番号)}でページごとのQRコードの数が取得できます。
| 取りたいもの | 書き方 |
|---|---|
| 全体の件数 | {%GET_U(QR結果,Count)} |
| 2ページ目の件数 | {%GET_USER_DATA_KEY_COUNT(QR結果,Pages,2)} |
| 2ページ目の1件目の内容 | {%GET_U(QR結果,Pages,2,1,Data)} |
| 2ページ目が打ち切られたか | {%GET_U(QR結果,Info,Pages,2,TimedOut)} |
| 読み取り対象になったページ数 | {%GET_USER_DATA_KEY_COUNT(QR結果,Pages)} |
0件・打ち切り(TimedOut)・読み漏らし候補ありは、いずれもエラーになりません。結果とInfoに記録されるので、判定はマクロで行ってください。
分割マークの機能はありません。分割マークはDocuWorks文書のページに付ける機能です。PDFの分割は{%PDF_SPLIT_PAGE(ページ,出力ファイルパス)}で行ってください。
詳細設定は、オプションユーザーデータで指定したキーだけがモードの値を上書きします。「QRコード読み取り(v2)」はチェックを入れると5項目すべてがモードの値を上書きします。
ページ番号にAllを指定して全ページを対象にできます。
解析全体の情報は、別のユーザーデータではなく結果ユーザーデータの中のInfoに格納されます。
文字コードは数値ではなく、SJIS・UTF-8・自動の語で指定します(READ_FILE・READ_CSV_FILEと同じ表記)。
#PDFファイルをオープン
{%PDF_OPEN({%GET(FullPathFileName)})}
#全ページのQRコードを読み取る(認識優先・文字コードは自動判定)
{%SET_U(wk,QR件数,{%PDF_DECODE_QR(All,QR結果,RecognitionPriority,自動)})}
#1件も読めなければ業務エラーとして分岐用のフラグを立てる
{%IF({%GET_U(wk,QR件数)}=0,
{%SET_U(wk,結果,QRなし)}
,
{%SET_U(wk,結果,OK)}
{%SET_U(属性,管理番号,{%GET_U(QR結果,Pages,1,1,Data)})}
)}
#PDFファイルをクローズ
{%PDF_CLOSE()}
#PDFファイルをオープン
{%PDF_OPEN({%GET(FullPathFileName)})}
#読み取り条件(右上25%・管理番号で始まるQRだけ・上限5秒)
{%SET_U(QR条件,Range,StartX,50)}
{%SET_U(QR条件,Range,StartY,0)}
{%SET_U(QR条件,Range,EndX,100)}
{%SET_U(QR条件,Range,EndY,50)}
{%SET_U(QR条件,SearchString,^管理番号)}
{%SET_U(QR条件,TimeBudgetMs,5000)}
#全ページのQRコードを読み取る
{%SET_U(wk,QR件数,{%PDF_DECODE_QR(All,QR結果,Standard,SJIS,QR条件)})}
#ページごとに件数と打ち切りを記録する
{%LOOP L1 {%GET_U(QR結果,PageCount)}(
{%WRITE_LOG(Page:[L_IDX(L1)] 件数:{%GET_USER_DATA_KEY_COUNT(QR結果,Pages,[L_IDX(L1)])} 打ち切り:{%GET_U(QR結果,Info,Pages,[L_IDX(L1)],TimedOut)})}
)}
#PDFファイルをクローズ
{%PDF_CLOSE()}
オープンされているPDFファイルから文書情報を取得します。
結果格納用ユーザーデータ名には、取得した情報を格納するユーザーデータの名前を指定します。指定したユーザーデータに既存の内容がある場合は置き換えられます。
結果格納用ユーザーデータの内容
| 名前 | 内容 |
|---|---|
| Pages | ページ数 |
| Version | PDFのバージョン(1.4、1.7 など) |
バージョンを取得できなかった場合は空文字が格納されます。
#PDFファイルをオープン
{%PDF_OPEN({%GET(FullPathFileName)})}
#文書情報を取得
{%PDF_GET_DOCUMENT_INFO(DocInfo)}
{%WRITE_LOG(ページ数:{%GET_U(DocInfo,Pages)})}
{%WRITE_LOG(バージョン:{%GET_U(DocInfo,Version)})}
#クローズ
{%PDF_CLOSE()}
結果
ページ数:3
バージョン:1.4
#PDFファイルをオープン
{%SET_U(Pdf,Handle1,{%PDF_OPEN(D:\Home\PdfDemo\Demo01\Sample1.pdf)})}
{%SET_U(Pdf,Handle2,{%PDF_OPEN(D:\Home\PdfDemo\Demo01\Sample2.pdf)})}
#それぞれの文書情報を取得
{%PDF_GET_DOCUMENT_INFO(#Key,{%GET_U(Pdf,Handle1)},DocInfo1)}
{%PDF_GET_DOCUMENT_INFO(#Key,{%GET_U(Pdf,Handle2)},DocInfo2)}
{%WRITE_LOG(Sample1.pdf:{%GET_U(DocInfo1,Pages)}ページ)}
{%WRITE_LOG(Sample2.pdf:{%GET_U(DocInfo2,Pages)}ページ)}
#クローズ
{%PDF_CLOSE({%GET_U(Pdf,Handle1)})}
{%PDF_CLOSE({%GET_U(Pdf,Handle2)})}
PDF文書オープン処理名で指定されたPDF文書から、文書属性を取得します。
属性名は、255文字以内で指定してください。
未定義時の処理を省略した場合またはエラーを指定した場合は、存在しない属性名を指定した場合にエラーとなります。
未定義時の処理に空文字返却を指定した場合は、存在しない属性名を指定した場合に空文字が返却されます。
属性名に以下の名前を指定した場合は、概要タブの各項目を取得できます。
| 名前 | 内容 |
|---|---|
| Author | 作成者 |
| CreationDate | 作成日 |
| Creator | 作成アプリケーション |
| Keywords | キーワード |
| ModDate | 更新日 |
| Producer | PDF作成者 |
| Subject | サブタイトル |
| Title | タイトル |
Trappedは予約語のため使用できません。
#PDFファイルをオープン
{%PDF_OPEN({%GET(FullPathFileName)})}
{%WRITE_LOG({%PDF_GET_DOCUMENT_ATTRIBUTE(文書名,空文字返却)})}
#クローズ
{%PDF_CLOSE()}
{%WRITE_LOG({%PDF_GET_DOCUMENT_ATTRIBUTE(Title)})}
PDF文書オープン処理名で指定されたPDF文書に、文書属性を設定します。
属性名は、255文字以内で指定してください。 属性値は、文字列を指定します。
属性名に以下の名前を指定した場合は、概要タブの各項目を設定できます。
| 名前 | 内容 |
|---|---|
| Author | 作成者 |
| CreationDate | 作成日 |
| Creator | 作成アプリケーション |
| Keywords | キーワード |
| ModDate | 更新日 |
| Producer | PDF作成者 |
| Subject | サブタイトル |
| Title | タイトル |
Trappedは予約語のため使用できません。
#PDFファイルをオープン
{%PDF_OPEN({%GET(FullPathFileName)})}
{%PDF_SET_DOCUMENT_ATTRIBUTE(文書名,{%GET_U(QRコード読み取り1,1,Data)})}
#クローズ
{%PDF_CLOSE()}
{%PDF_SET_DOCUMENT_ATTRIBUTE(処理日,{%DATE(yyyy/MM/dd)})}
{%PDF_SET_DOCUMENT_ATTRIBUTE(Title,サンプル)}
属性名で指定された文書属性の存在チェックを行います。
指定した属性が存在する場合は、Trueを、存在しない場合はFalseを返却します。
{%PDF_SET_DOCUMENT_ATTRIBUTE(処理日,{%DATE(yyyy/MM/dd)})}
{%IF({%PDF_EXISTS_DOCUMENT_ATTRIBUTE(処理日)}=True,
{%WRITE_LOG(属性あり)}
,
{%WRITE_LOG(属性なし)}
)}
結果
属性あり
属性名で指定された文書属性を削除します。
#PDFファイルをオープン
{%PDF_OPEN({%GET(FullPathFileName)})}
{%PDF_DELETE_DOCUMENT_ATTRIBUTE(FAX番号)}
#クローズ
{%PDF_CLOSE()}
オープン中のPDFからページを削除します。
ページには、2|3|4のように|で区切って複数のページを指定できます。
2-と指定すると2ページ目以降が削除されます。
2-5と指定すると2~5ページが削除されます。
-5と指定すると1~5ページが削除されます。
1|3-と指定すると1ページと5ページ目以降が削除されます。
1-|-5のように重複した表現があってもエラーにならず、すべての指定されたページの削除を行います。
すべてのページが削除されるような指定をした場合は0ページのPDFになります。
#PDFファイルをオープン
{%PDF_OPEN({%GET(FullPathFileName)})}
#2ページ目以降を削除
{%PDF_DELETE_PAGE(2-)}
#クローズ
{%PDF_CLOSE()}
オープン中のPDFを出力ファイルパスにページ分割したファイルを出力します。
ページには、1|2|3のように|で区切って複数のページを指定できます。
ページにAllを指定すると全ページを1ページ毎に分割します。
ページに2xを指定すると2ページ毎に分割します。3xは3ページ毎に分割します。
分割後のPDFは出力ファイルパスで指定された場所にファイル名 + _ + ページ番号(ゼロ埋め4桁)で出力を行います。
#PDFファイルをオープン
{%PDF_OPEN({%GET(FullPathFileName)})}
#1ページ毎に分割
{%PDF_SPLIT_PAGE(All,{%GET(FolderPath)}\分割済み\{%GET(FileName)})}
#クローズ
{%PDF_CLOSE()}
対象ファイルリストで指定されたファイルをマージして出力ファイルパスに出力します。
対象ファイルリストはユーザーデータ名を指定してください。ユーザーデータにはマージしたいフルパスファイル名を追加します。
対象ファイルリストに出力ファイルが含まれる場合はエラーになります。
マージタイプが先頭、または末尾の場合に、出力ファイルが存在しない場合は新規作成されます。
マージタイプが新規の場合に、出力ファイルが存在する場合はエラーになります。
{%ADD_USER_DATA(ファイルリスト,{%GET(FullPathFileName)})}
{%PDF_MERGE_FILES(ファイルリスト,{%GET(FolderPath)}\マージ済み\marge.pdf,先頭)}
{%ADD_USER_DATA(ファイルリスト,D:¥Temp\sample1.pdf)}
{%ADD_USER_DATA(ファイルリスト,D:¥Temp\sample2.pdf)}
{%PDF_MERGE_FILES(ファイルリスト,{%GET(FolderPath)}\マージ済み\marge.pdf,末尾)}
以下のような順のmarge.pdfとなります。
marge.pdf
sample1.pdf
sample2.pdf
{%ADD_USER_DATA(ファイルリスト,D:¥Temp\sample1.pdf)}
{%ADD_USER_DATA(ファイルリスト,D:¥Temp\sample2.pdf)}
{%PDF_MERGE_FILES(ファイルリスト,{%GET(FolderPath)}\マージ済み\marge.pdf,新規)}
以下のようなmarge.pdfが新規作成されます。
sample1.pdf
sample2.pdf
PDFファイル名に指定されたPDFを読み込み、テキスト抽出支援ユーティリティのHTMLファイルをPDFと同じフォルダに出力します。
対象ページにはページ番号を指定します。Allを指定するとすべてのページが対象になります。
出力ファイル名を指定した場合は、指定した場所に出力します。
{%PDF_CREATE_TOOL({%GET(FullPathFileName)},1)}