カスタマイズ/テンプレートファイルの作成

出典: OOoJa

2007年9月30日 (日) 11:29; Tora (会話 | 投稿記録) による版
(差分) ←前の版 | 最新版を表示 (差分) | 次の版→ (差分)

注) StarSuite 8 や starsuite8 などを適宜 OpenOffice.org 2.x や openoffice.org2x と読み替えてください。

目次

[編集] 目的と背景

StarSuite 8 Calc のデフォルトの設定では、表が3枚用意されています。しかしながら、表2、表3については多くの場合使っておらず、開いたときに、それらの表の中に情報があるかどうかわざわざ確認する手間がかかります。そこで、Calc の新規作成時の表の枚数を三枚から一枚へ設定変更します。この方法は、さらに標準で追加されるヘッダ(表の名前)やフッタ(ページ番号)を付けないなど設定にも応用できます。

[編集] 手順

Calc を起動し、表2および表3を削除します。
ファイル/名前を付けて保存
 ・ファイル名を Calc.ots
 ・ファイルの種類を OpenDocumentの表計算ドキュメントテンプレート(ots)
 ・ファイル名に拡張子を付けるにチェックが付いていることを確認

その保存したファイルからプリンター関連の情報を取り除きます。
perl remove-printer-related-entries-from-starsuite-file.pl Calc.ots

例
# perl remove-printer-related-entries-from-starsuite-file.pl Calc.ots
Entry 'PrinterSetup: XgH+/ ...(中略)... 0AAA=' has been successfully removed.
Entry 'PrinterName: Generic Printer' has been successfully removed.
Entry 'AllowPrintJobCancel: true' has been successfully removed.

テンプレートファイル Calc.ots を、全ユーザーからアクセスできるファイルサーバー上などへ置きます。

[編集] 備考

同様に、用紙の向きを縦向きから横向きへ変更した Draw.otg や、 余白、デフォルトのフォント名、フォントサイズなどを変更した Writer.ott などにも応用できます。

ネットワークで接続された環境において、プリンタ関連の情報がテンプレートファイル内に残っていると、その作業をされた人のデフォルトのプリンタのプリンタ名や情報が残ってしまいます。すると、他の部署の人がツールバー上の「直接印刷」ボタンで印刷すると、その部署のデフォルトのプリンタではなく、作業された人の部署のプリンタへ印刷物が出力されてしまいます。そのため、プリンタ関連の情報については、削除するように心がけてください。

[編集] remove-printer-related-entries-from-starsuite-file.pl

Perlスクリプトremove-printer-related-entries-from-starsuite-file.plは、Archive::Zipモジュールを使用しています。

#!/usr/local/bin/perl
#
# remove-printer-related-entries-from-starsuite-file.pl 
# 
# Usage: remove-...pl starsuite_file...
#

# http://search.cpan.org/dist/Archive-Zip/
use Archive::Zip;

@Items = qw (
	     PrintReversed
	     PrintEmptyPages
	     PrintSingleJobs
	     PrintPaperFromSetup
	     PrintLeftPages
	     PrintTables
	     PrintControls
	     PrinterSetup
	     PrintAnnotationMode
	     PrinterName
	     PrintFaxName
	     PrintRightPages
	     PrintProspect
	     PrintGraphics
	     AllowPrintJobCancel
	     PrinterIndependentLayout
	     PrintDrawings
	     PrintBlackFonts
	    );

sub work {
    my $file = shift;
    my $zip = Archive::Zip->new();
    $zip->read($file) == AZ_OK or die "$!: $file, stopped";
    my $contents = $zip->contents("settings.xml");
    my $original = $contents;
    map {
        if ($contents =~ s{<config:config-item config:name="$_"([^>]*?)>([^<>]*?)</config:config-item>}{}) {
            print "Entry '$_: $2' has been successfully removed.\n";
        }
        if ($contents =~ s{<config:config-item config:name="$_"([^>]*?)/>}{}) {
            print "Entry '$_' has been successfully removed.\n";
        }
    } @Items;
    if ($original ne $contents) {
        $zip->contents("settings.xml", $contents);
        $zip->overwrite() == AZ_OK or die "$!: $file, stopped";
    }
    else {
        print "No printer related entry was found. The file is not changed.\n";
    }
}

sub main {
    foreach my $file (@ARGV) {
        work($file);
    }
}

main;

__END__