mcpField
H
hebrew-document-generator

hebrew-document-generator

github.com/skills-ilドキュメント26235 回インストール2 週間前に更新
リポジトリ

hebrew-document-generator について

入力した内容からヘブライ語の PDF、Word、PowerPoint 文書を作成するためのスキルです。RTL レイアウトやヘブライ語とラテン文字の混在処理を案内し、法律・税務上の助言は行いません。

主な機能

  1. 01ヘブライ語 PDF・DOCX・PPTX の案内
  2. 02RTL レイアウトと文字処理
  3. 03契約書・請求書の構成例
  4. 04フォントと依存関係の設定
  5. 05文書生成スクリプトの例

活用シーン

  1. 01ヘブライ語の契約書や提案書の整形
  2. 02請求書や領収書のレイアウト作成
  3. 03ヘブライ語プレゼンテーションの作成
  4. 04ヘブライ語とラテン文字の混在表示の調査

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/skills-il/localization --skill hebrew-document-generator

インストール後、Claude Code で/hebrew-document-generatorを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

evidence.json
metadata.json
optimization-log.json
SKILL_HE.md
references/
domain-checklist.md
hebrew-fonts.md
templates.md
scripts/
docx_rtl.py
generate_doc.py

詳細

ヘブライ語文書ジェネレーター

法的通知

これは、AI モデルが運営する無料の情報提供ツールです。お客様が提供した内容を基に、ヘブライ語の文書(PDF、Word、PowerPoint)をレイアウトして書式を整え、契約書、請求書、領収書、見積書に一般的なセクションや項目の構成を示します。出力はすべて、弁護士、税務アドバイザー、会計士の関与、確認、承認を受けずに、AI モデルによって自動生成されます。出力は法的助言でも法的見解でもなく、弁護士が作成した文書でもありません。お客様ご自身で記入し、調整するレイアウト用テンプレートです。このツールは、お客様の取引の状況を検討したり、条項が有効または執行可能かどうかを評価したり、お客様に適用される法律に合わせて条項を調整したりするものではありません。AI モデルは誤りを犯したり、情報を省略したり、誤った結論に至ったりすることがあります。

このスキルが作成する契約書、書簡、その他のテキストは、個人的な整理のみを目的とした自動生成の草案です。弁護士が作成した文書ではなく、証拠として依拠してはなりません。請求書と領収書のサンプルはレイアウトの例であり、発行済みの税務書類ではありません。税金の申告と納付はお客様の責任であり、確定計算は税務当局が行います。また、税務当局での代理は、法律で認められた者に限られます。このツールは、個々の事実やニーズを考慮した助言に代わるものではありません。法的措置を取る前、文書に署名する前、または当局や裁判所に文書を提出する前に、弁護士に相談してください。出力の利用は、すべてお客様自身の責任で行ってください。

手順

ステップ 1:出力形式を選択する
形式ライブラリ最適な用途RTL サポート
PDFreportlab請求書、税務書類、印刷用フォームヘブライ語フォントを登録し、canvas.drawRightString() を使用します
PDFWeasyPrintHTML/CSS からスタイル付き文書を作成HTML の dir="rtl" によるネイティブ対応
DOCXpython-docx契約書、提案書、議事録scripts/docx_rtl.py:段落の bidi、文字種ごとに分割したラン、ヘブライ語のランのみ w:rtl を設定し、すべてのランに w:cs フォントを設定します
PPTXpptxgenjs (Node)プレゼンテーション、スライド資料rtlMode: true を指定した RTL テキストボックス
ステップ 2:依存関係とヘブライ語フォントをインストールする

Python での PDF 生成:

pip install reportlab weasyprint python-bidi

WeasyPrint には Pango システムライブラリも必要です。macOS では brew install weasyprint が最も簡単です。Debian または Ubuntu では、pip install の前に libpango-1.0-0 libpangoft2-1.0-0 libharfbuzz-subset0 をインストールしてください。ライブラリが見つからない場合は cannot load library 'libgobject-2.0-0' というエラーが発生します。Homebrew で Pango をインストール済みの macOS では、export DYLD_FALLBACK_LIBRARY_PATH=/opt/homebrew/lib を実行すると解決します。

Python での DOCX 生成:

pip install python-docx

Node.js での PPTX 生成:

npm install pptxgenjs

推奨するヘブライ語フォント(システムにインストール):

フォントスタイル最適な用途入手先
Heeboサンセリフ、モダンWeb 風の文書、請求書Google Fonts
Davidクラシックなセリフ法的契約書、正式な書簡システム(Windows、macOS は Microsoft Office とともにインストール)
Narkisimエレガントなセリフ提案書、招待状システム(Windows)
Frank Ruehl伝統的なセリフ学術、文学Google Fonts(Frank Ruhl Libre)
Rubik丸みのあるサンセリフプレゼンテーション、マーケティングGoogle Fonts
Assistantすっきりしたサンセリフビジネス文書Google Fonts

ダウンロードリンクとインストール手順については、references/hebrew-fonts.md を参照してください。

ステップ 3:reportlab でヘブライ語 PDF を生成する

生成パイプライン全体については、scripts/generate_doc.py を参照してください。

from reportlab.lib.pagesizes import A4
from reportlab.pdfgen import canvas
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.ttfonts import TTFont
from reportlab.lib.units import mm
from bidi.algorithm import get_display  # NOT `from bidi import get_display`, see below

# Register Hebrew font
pdfmetrics.registerFont(TTFont('Heebo', 'Heebo-Regular.ttf'))
pdfmetrics.registerFont(TTFont('Heebo-Bold', 'Heebo-Bold.ttf'))

def create_hebrew_pdf(filename, title, content_lines):
    c = canvas.Canvas(filename, pagesize=A4)
    width, height = A4

    # Title -- right-aligned for RTL
    c.setFont('Heebo-Bold', 18)
    hebrew_title = get_display(title)
    c.drawRightString(width - 20*mm, height - 30*mm, hebrew_title)

    # Body lines
    c.setFont('Heebo', 12)
    y = height - 50*mm
    for line in content_lines:
        display_line = get_display(line)
        c.drawRightString(width - 20*mm, y, display_line)
        y -= 7*mm

    c.save()

reportlab でヘブライ語を扱う際の重要なポイント:

  • 文字の順序を入れ替えるには、常に python-bidi の get_display() を使用します
  • 右揃えの RTL テキストには drawRightString() を使用します
  • TTF のヘブライ語フォントを明示的に登録します。reportlab にはヘブライ語の組み込みサポートがありません
  • ヘブライ語の読みやすさを確保するため、行の高さをフォントサイズの 1.5 倍以上に設定します
  • python-bidi のインポートには from bidi.algorithm import get_display を使用します。 python-bidi 0.6.x には 2 種類の実装が含まれています。bidi.algorithm は純 Python 版で、以前のバージョンとの互換性があり、括弧を反転します。トップレベルの from bidi import get_display は括弧の反転ルールを省略する Rust クレートをラップしているため(上流の issue #25)、reportlab PDF では (18%) が )18%( として表示され、ヘブライ語の行にあるすべての括弧が逆向きになります。python-bidi 0.6.x には Python 3.9 以降が必要です。
  • 複数行のテキスト: drawRightString() は 1 行のみを描画し、折り返しは行いません。get_display() の出力を reportlab の Paragraph に渡さないでください。反転済みの文字列が折り返され、最後の文が最上段に配置されます。また、bidi を使わずに wordWrap='RTL' を指定すると、各単語の文字が逆順に表示されます。まず論理順で折り返してから、完成した各行に get_display() を適用します。scripts/generate_doc.py の wrap_hebrew_lines()/draw_hebrew_paragraph() はこの処理を行います。(契約書など)長い文章を流し込む場合は、WeasyPrint(ステップ 4)を使うとヘブライ語がネイティブに折り返されます。
ヘブライ語/ラテン文字/数字が混在する行

生成されたドキュメントで最もよく発生する RTL の問題は、請求書の明細行など、ヘブライ語の説明文に LTR の数字と通貨記号が混在する行です。get_display() は bidi の並べ替えを処理しますが、アルゴリズムが全体の文脈を認識できるよう、論理順の文字列全体を 1 回の呼び出しで渡す必要があります。

from bidi.algorithm import get_display

# Logical order: Hebrew description, then qty, unit price, currency
line = 'ייעוץ טכני (3 שעות) - 1,500.00 ש"ח'
c.setFont('Heebo', 11)
c.drawRightString(width - 20 * mm, y, get_display(line))

bidi アルゴリズムが周囲のヘブライ語を基準に数字、カンマ、ピリオド、括弧の位置を決定し(bidi.algorithm は括弧を反転します)、すべてが正しく配置されます。行を分割して自分で並べ替えたり、ヘブライ語の部分だけに get_display() を呼び出したりしないでください。どちらの方法でも数字の順序が崩れます。

ステップ 4:WeasyPrint でヘブライ語 PDF を生成する
from weasyprint import HTML

html_content = """
<!DOCTYPE html>
<html lang="he" dir="rtl">
<head>
<meta charset="utf-8">
<style>
  @font-face {
    font-family: 'Heebo';
    src: url('Heebo-Regular.ttf');
  }
  body {
    font-family: 'Heebo', sans-serif;
    direction: rtl;
    font-size: 12pt;
    line-height: 1.7;
  }
  h1 { font-size: 18pt; text-align: start; }
  table {
    width: 100%;
    border-collapse: collapse;
  }
  th, td {
    border: 1px solid #333;
    padding: 6px 10px;
    text-align: start;
  }
</style>
</head>
<body>
  <h1>חשבונית מס</h1>
  
</body>
</html>
"""

# base_url is required: without it the relative font URL is silently ignored
# and a fallback font (no Hebrew on many Linux servers) is embedded instead.
HTML(string=html_content, base_url='.').write_pdf('invoice.pdf')

ヘブライ語で WeasyPrint を使う利点:

  • CSS の論理プロパティをサポートします
  • HTML の dir 属性によるネイティブ RTL に対応します
  • 表が RTL でも正しく表示されます
  • カスタムのヘブライ語フォント用に @font-face をサポートします
ステップ 5:python-docx でヘブライ語の DOCX を生成する

DOCX では、ヘブライ語と英語の混在が最も頻繁に崩れます。Microsoft Word の双方向テキスト処理は LibreOffice、macOS のプレビュー/Quick Look、その他ほとんどのビューアーとは異なり、それらは寛容な出力を表示して Word だけで発生するバグを隠してしまうため、必ず Word 自体で確認してください。付属の scripts/docx_rtl.py を使用してください(コードの隣にコピーするか、インポートしてください)。このスクリプトは以下のルールを実装しています。

  1. 段落の方向: ヘブライ文字を含む行には <w:bidi/>(RTL 基本方向)を設定し、明示的な配置は指定しません。w:jc は論理方向に基づくため、RTL 段落で jc=right にすると行末を意味し、Word では視覚的な左側に描画されます。jc がない RTL 段落は、視覚的な右側から始まります。英語のみの行は LTR 基本方向と左揃えにします。
  2. 文字種ごとにランを分け、ヘブライ語のランにのみ <w:rtl/> を設定し、ラテン文字や数字のランには設定しません。 ヘブライ語のランに <w:rtl/> がないと、Word は混在行のランを左から右に並べるため、ההסכם נחתם בין חברת Acme בע"מ は語句の順序が逆になって表示されます。RTL フラグ付きのランにラテン語や数字を含めると、Word はそれらを逆順にします(7/2023 は 2023/7 になります)。そのため、数字は独立した LTR ランにします。数字内の区切り文字(1,500.00、03-1234567)や %/通貨記号は数字と同じランにします。ラテン語の後に続く数字(KI-67)はラテン語と同じランにし、先頭の +/- 記号は数字と同じランにします(+972-3-1234567)。また、2 つの文字種の間にある括弧や句読点はヘブライ語側に配置し、(גרסה 2). の閉じ括弧とピリオドが正しい位置に保たれるようにします。ただし、ラテン語の直後にあるラテン語を囲む括弧(Acme (Israel)、Office (365))は例外で、ラテン語のランに含めます。そうしないと、Word が閉じ括弧をヘブライ語のランに移してしまいます。文字の分類には Unicode の双方向クラスを使用するため、アクセント付きラテン文字(Nestlé)もひとつの単語として扱われます。先頭のリスト記号(2.、10.)はヘブライ語のランに含め、ピリオドが .2 のように逆転しないようにします。
  3. すべてのランに複雑な文字体系用のプロパティを設定します: w:cs フォントと w:szCs サイズ(Word はラテン文字にのみ w:ascii/w:sz を適用します)、さらに w:b/w:i と併せて w:bCs/w:iCs を設定します。w:cs/w:szCs を省略すると、「設定したフォント/サイズが反映されない」という典型的なバグが発生します。
  4. Unicode の方向制御マークや分離子(U+200E、U+2066-2069)は挿入しないでください。 Word は David フォントでこれらを可視の四角形として描画します。
import sys
sys.path.insert(0, 'scripts')  # wherever docx_rtl.py lives
from docx_rtl import new_hebrew_document, add_rtl_paragraph, add_rtl_table

doc = new_hebrew_document(font='David', size=12)   # also sets <w:bidi/> on the section
add_rtl_paragraph(doc, 'חוזה שירותים', size=18, bold=True)
add_rtl_paragraph(doc, 'ההסכם נחתם ביום 13/01/2026 בין חברת Acme בע"מ לבין הלקוח (גרסה 2).')
add_rtl_paragraph(doc, '2. תמורה', bold=True)
add_rtl_table(doc, ['תיאור', 'כמות', 'מחיר', 'סה"כ'],
              [['ייעוץ טכני (3 שעות)', 1, '1,500.00', '1,500.00'],
               ['פיתוח Acme', 2, '600.00', '1,200.00']])
doc.save('contract.docx')

python scripts/docx_rtl.py --output sample.docx を実行すると、すべてのルールを試すサンプルが作成されます。上記の内容はすべて、Microsoft Word 自体の描画結果(Mac 版 Word 16.113、Word 自身で PDF にエクスポート)で確認済みです。

DOCX のテキストに get_display() を使用しないでください。 Word は双方向テキストアルゴリズムを自ら実行するため、事前に整形するとアルゴリズムが二重に適用され、行が崩れます。get_display() を使用するのは reportlab の処理だけです。

ヘッダー、フッター、番号付きリストは、ドキュメント内の別個のストーリーです。同じロジックで各段落に内容を設定してください(モジュールの _fill_paragraph(p, text, font, size) は、section.footer.paragraphs[0] など、あらゆる段落オブジェクトで機能します)。

DOCX のヘブライ語テーブル(「テーブルが逆になる」問題の修正)

逆になったテーブル(最初の論理列、たとえば תיאור が左側にある状態)は、テキスト方向ではなく列順の不具合です。python-docx のテーブルには <w:bidiVisual/> がないため、Word は列を左から右に配置します。ヘブライ語のテーブルには両方の修正が必要で、add_rtl_table はその両方を適用します。

  1. 列順: table.table_direction = WD_TABLE_DIRECTION.RTL を設定すると <w:bidiVisual/> が出力され、最初の論理列が右側に配置されます。table.alignment = WD_TABLE_ALIGNMENT.RIGHT を設定すると、テーブル全体が右マージンに寄ります。
  2. セルのテキスト: 各セルは独立した段落なので、ルール 2 に従って <w:bidi/> とスクリプトごとのランが適用され、明示的な配置は設定しません。RTL セルに「右」揃えを設定すると、ヘブライ語は視覚上の左側に押し出される一方、数字のセルは右側に配置されます(v1.7.0 の不具合)。

ヘッダーと行のデータは論理順のままにしてください。bidiVisual を設定した後に列リストを自分で逆順にすると、列順が二重に反転します。請求書の合計欄では通常、row.cells[a].merge(row.cells[b]) を使ってラベルセルを複数列にまたがらせます。bidiVisual のもとでは結合したセルが逆側に配置される場合があるため、Word で結合行を確認してください。

ステップ 6:pptxgenjs でヘブライ語の PPTX を生成する
const pptxgen = require('pptxgenjs');
const pptx = new pptxgen();

pptx.layout = 'LAYOUT_16x9';
pptx.rtlMode = true;

const slide = pptx.addSlide();

// Hebrew title
slide.addText('סקירה רבעונית', {
  x: 0.5, y: 0.5, w: '90%', h: 1.0,
  fontSize: 28,
  fontFace: 'Heebo',
  color: '1a1a2e',
  align: 'right',
  rtlMode: true,
  lang: 'he-IL',   // default is en-US: PowerPoint would spell-check the Hebrew as English
  bold: true,
});

// Hebrew bullet points
slide.addText([
  { text: 'תוצאות כספיות', options: { bullet: true, rtlMode: true } },
  { text: 'יעדים לרבעון הבא', options: { bullet: true, rtlMode: true } },
  { text: 'סיכום פעילות', options: { bullet: true, rtlMode: true } },
], {
  x: 0.5, y: 2.0, w: '90%', h: 3.0,
  fontSize: 18,
  fontFace: 'Heebo',
  align: 'right',
  rtlMode: true,
  lang: 'he-IL',
});

pptx.writeFile({ fileName: 'quarterly-review.pptx' });

PPTX のテーブルにも、DOCX と同じ RTL の列順の問題があります。pptxgenjs は rows 配列の順序でテーブルの列をレンダリングし、RTL 用に自動で左右反転することはありません。最初の論理列が右側に表示されるように、データ内の各行のセル順を逆にし、各セルの options に rtlMode: true(および align: 'right')を設定してください。これにより、各セル内のテキストが右揃えになり、双方向テキストとして処理されます。

// Logical columns: תיאור | כמות | מחיר. Reverse per row so col 1 displays on the right
const headers = ['תיאור', 'כמות', 'מחיר'];
const dataRows = [['ייעוץ', '1', '1,500.00']];
const opt = { rtlMode: true, align: 'right', fontFace: 'Heebo', lang: 'he-IL' };
const tableRows = [headers, ...dataRows].map(
  row => [...row].reverse().map(text => ({ text, options: opt }))
);
slide.addTable(tableRows, { x: 0.5, y: 1.5, w: 9 });  // rtlMode is a per-cell text option, not a table option

DOCX とは逆の方式なので注意してください。python-docx には実際に列を反転する bidiVisual(table_direction = RTL)があるため、データは論理順のままにします。一方、pptxgenjs にはそのようなフラグがないため、データ内の列を自分で逆順にします。レンダリングされたスライドを確認してください。

ステップ 7:イスラエルのビジネス文書テンプレート

各文書タイプのフィールド一覧については、references/templates.md を参照してください。

テンプレートヘブライ語名主なフィールド
Tax Invoiceחשבונית מס「חשבונית מס」と「עוסק מורשה」の表記、事業者名、住所と事業者番号、通し番号、日付、取引内容、VAT 抜き価格、VAT(18%)と合計、原本の「מקור」表記
Contractחוזה当事者、TZ/会社番号、条件、署名、日付
Price Proposalהצעת מחיר事業者情報、項目別価格、有効期間、条件
Meeting Minutesפרוטוקול日付、出席者、議題、決定事項、アクション項目
Receiptקבלה事業者名、領収書番号、金額、支払い方法、日付

「請求書」を作成する前に、ユーザーが実際に必要としている文書を確認してください。עוסק פטור は VAT を請求せず、חשבונית מס または חשבונית מס/קבלה を発行できません。支払いを受けた際に קבלה を発行します。עוסק מורשה は חשבונית עסקה または חשבונית מס を発行し、支払い時に קבלה を発行します。取引時に支払いを受けた場合に限り、חשבונית מס/קבלה をまとめて発行できます。חשבונית עסקה(支払い請求書)は自由形式の文書で、報告義務はありません。

割当番号(מספר הקצאה、Israel Invoices モデル): 2026 年 6 月 1 日以降、VAT 抜きで 5,000 NIS を超える取引について、購入者が番号を求める עוסק מורשה の場合、税務請求書に記載が必要です(2025 年は 20,000 NIS、2026 年 1 月 1 日以降は 10,000 NIS でした)。番号がないと、購入者は仕入 VAT を控除できません。基準額は今後も変わるため、時点に依存する情報として扱ってください。

同梱のサンプルはレイアウト例であり、発行済みの文書ではありません。 実際の税務請求書は、あらかじめ印刷された冊子または認可された請求書ソフトウェアから、原本と控えを作成して発行します。割当番号は税務当局から取得します。サンプルはヘブライ語のレイアウトを整えるために使用し、請求書の発行が必要なユーザーには請求書ソフトウェアを案内してください(green-invoice スキルを参照)。

例

例1:税務インボイスのPDFを生成する

ユーザーの発言:「自分の事業用にヘブライ語の税務インボイスPDFを作成してください」 結果:まず、事業形態が עוסק מורשה(登録事業者)か עוסק פטור(免税事業者)か、また支払いをすでに受け取ったかを確認します(ステップ7)。次に、reportlabまたはWeasyPrintでA4のPDFを作成します。事業者ヘッダー(必須の文言を含む)、連番、明細表、18%のVAT、NISでの合計、割当番号欄を記載し、発行済みの税務インボイスではなくレイアウトのサンプルである旨の注記を入れます。

例2:ヘブライ語の契約書DOCXを作成する

ユーザーの発言:「Word文書でヘブライ語の業務委託契約書を作成してください」 結果:scripts/docx_rtl.pyを使用します(ステップ5)。明示的な配置指定を付けない<w:bidi/>段落を使い、スクリプトごとに分けたランにおいてヘブライ語のランには<w:rtl/>を指定することで、埋め込まれた英語や数字の位置を保ちます。また、w:csフォントとw:szCsサイズ、Davidフォントを使い、構成を整えたセクション(契約当事者、業務範囲、支払条件、解除、署名)を作成します。Legal noticeに従い、草案として提示します。

例3:ヘブライ語のプレゼンテーションを作成する

ユーザーの発言:「四半期レビュー用のヘブライ語のPowerPointを作成してください」 結果:pptxgenjsを使用し、すべてのテキストボックスにrtlModeとlang: 'he-IL'を指定します。Heeboフォント、右揃えのテキスト、RTLの箇条書き、表の列順の反転を適用します。

例4:文書を一括生成する

ユーザーの発言:「CSVファイルからヘブライ語の請求書PDFを50件生成してください」 結果:scripts/generate_doc.pyにはCSV入力機能がありません。generate_invoice(filename, font_name, business_info)とregister_hebrew_font()をインポートして各行をループ処理するか、描画ヘルパーを自分のループにコピーしてください。ページ区切りなしで1ページを描画するため、明細が長い場合は自分で分割してください。法的に発行する必要がある文書は、請求ソフトウェアに回してください(ステップ7)。

同梱リソース

スクリプト
  • scripts/generate_doc.py - reportlabを使ったヘブライ語の請求書と領収書のサンプルPDF。字形チェック付きのヘブライ語フォント登録(ヘブライ語のシステムフォントを自動検出し、文字化けした四角を表示する代わりにコード2で終了)、括弧に対応した双方向テキストの並べ替え、論理順の行折り返し、18%のVATに対応しています。実行方法:python scripts/generate_doc.py --help
  • scripts/docx_rtl.py - python-docx向けのWord対応ヘブライ語段落、表、RTLセクション(ステップ5)。インポートするか、python scripts/docx_rtl.py --output sample.docxを実行します。
参考資料
  • references/hebrew-fonts.md - 文書の種類ごとに推奨されるフォント(サンセリフ、セリフ、等幅)を掲載したヘブライ語フォントカタログ。Google Fontsのダウンロードリンク、システムフォントの利用可否一覧、フォントの組み合わせの提案、macOS、Linux、Windows向けのインストール手順も記載しています。
  • references/templates.md - イスラエルのビジネス文書テンプレート。税務インボイスの必須項目、事業形態ごとに発行する文書、契約書、提案書、領収書、議事録の一般的な項目、VATの規則、標準的なヘブライ語のビジネス表現を記載しています。

参考リンク

ソースURL確認する内容
reportlabのドキュメントhttps://docs.reportlab.com/Canvas API、platypusフローアブル、フォント登録
WeasyPrintのドキュメントhttps://doc.courtbouillon.org/weasyprint/stable/HTML/CSSからPDFへの変換、RTLサポート、@font-face
python-docxのドキュメントhttps://python-docx.readthedocs.io/ドキュメントモデル、ラン、段落プロパティ
python-bidi(PyPI)https://pypi.org/project/python-bidi/現行バージョン、インポートパス、変更履歴
Kol Zchut:税務インボイス、取引インボイス、領収書https://www.kolzchut.org.il/he/הוצאת_חשבונית_מס,_חשבונית_עסקה_וקבלה必須項目、各文書を発行できる事業者
イスラエル税務当局:割当番号の基準額https://www.gov.il/he/pages/pa240525-1イスラエルのインボイスに関する現行の基準額

推奨MCP サーバー

このスキルに該当するMCP サーバーはありません。ヘブライ語文書の生成は、ローカルのPythonおよびNodeライブラリ(reportlab、WeasyPrint、python-docx、pptxgenjs)だけで完結し、MCP サーバーとしてラップする外部サービスはありません。同梱スクリプトとInstructionsセクションのコードを直接使用してください。

注意点

  • get_display() は、ドキュメントやブロック全体に一度だけ適用するのではなく、描画時に各行へ適用し、drawRightString() の直前に実行する必要があります。双方向アルゴリズムは冪等ではありません。すでに並べ替えられたテキストに実行すると、文字が二重に反転して、出力が乱れます。エージェントがよく陥るミスとして、行全体のリストに get_display() を通して「前処理」した後、描画ループ内でもう一度呼び出すことがあります。
  • PDF 生成ツールは、テキストの方向が左から右に流れる設定が既定になっていることがよくあります。ヘブライ語のドキュメントでは、段落の方向を必ず RTL にする必要があります。また、ヘブライ語と英語が混在するテキストには、適切な BiDi(双方向)アルゴリズムのサポートが必要です。
  • DOCX(python-docx)には、PDF とは逆の注意点があります。テキストに get_display() を実行してはいけません。Word が双方向アルゴリズムを適用します。「壊れた」ヘブライ語の Word ファイルが生成される原因には、(a)混在する行全体を単一の run に入れ、<w:rtl/> を指定する(数字と英語が逆になる)、(b)ヘブライ語の run に <w:rtl/> を指定しない(フレーズの順序が逆になる)、(c)RTL 段落に jc=right を指定する(テキストが左揃えになる)、(d)複雑な文字体系用の w:cs フォントや w:szCs サイズを指定しない(ヘブライ語にフォントとサイズが適用されない)があります。scripts/docx_rtl.py はこれら4つすべてを回避します。
  • reportlab の PDF では、from bidi import get_display(Rust 実装)を使うと括弧がミラーリングされないため、ヘブライ語中の (...) がすべて逆向きに印字されます。bidi.algorithm からインポートしてください。
  • 既存のヘブライ語の段落に run を手動で追加する(署名欄など)と、スクリプトごとの分割と <w:rtl/> フラグの指定が省略されます。代わりに add_rtl_paragraph で行全体を作成してください。
  • ヘブライ語の DOCX 表 の列が逆になる(最初の列が左側に表示される)のは、テキスト方向ではなく、列順のバグです。add_rtl_paragraph やセルごとの BiDi 処理では解決できません。python-docx の表には <w:bidiVisual/> がないため、Word は列を LTR で配置します。表に table.table_direction = WD_TABLE_DIRECTION.RTL を設定し、さらに各セルをセルごとの BiDi ヘルパーで処理する必要があります。この両方が必要です(「DOCX のヘブライ語表」を参照)。列データは論理的な順序のままにしてください。bidiVisual の設定後に自分で逆順にすると、二重に反転してしまいます。
  • エージェントがヘブライ語の文字をサポートしていないフォントを選ぶことがあります(例:Arial は使えますが、装飾的なラテン文字フォントの多くは使えません)。フォントにヘブライ語の Unicode 範囲(U+0590-U+05FF)が含まれていることを必ず確認してください。
  • ヘブライ語の日付形式は、一般的な文脈では DD/MM/YYYY、宗教的・伝統的なドキュメントではヘブライ暦の日付(例:15 Adar 5786)を使います。エージェントは MM/DD/YYYY を既定で使うことがあります。
  • イスラエルの法的文書には、特定の書式が必要です。標準的なビジネス文書・法的文書のヘブライ語では、ニクード(母音記号)は使用しません。エージェントが明瞭さを高めるつもりでニクードを加えることがありますが、正式な文書では実際にはプロフェッショナルに見えません。

トラブルシューティング

エラー:「ヘブライ語の文字が四角形や疑問符で表示される」

原因:ヘブライ語フォントが登録されていないか、システム上で見つからない 解決策:ヘブライ語対応の TTF フォント(例:Google Fonts の Heebo)をダウンロードし、reportlab の場合は pdfmetrics.registerFont() で登録するか、WeasyPrint の場合はシステムフォントとしてインストールしてください。

エラー:「テキストが右から左ではなく、左から右に表示される」

原因:BiDi による並べ替え、または RTL 方向の設定がない 解決策:reportlab では、bidi.algorithm の get_display() を適用してください。python-docx では、scripts/docx_rtl.py を使用して段落を作成してください(段落に <w:bidi/> を設定し、ヘブライ語の run に <w:rtl/> を設定します)。WeasyPrint では、HTML 要素に dir="rtl" が指定されていることを確認してください。

エラー:「数字と句読点の位置が正しくありません」

原因:双方向テキストアルゴリズムが、ヘブライ語と数字が混在する内容を正しく処理できていません。 解決策:reportlab の場合は、論理順の文字列全体を bidi.algorithm の get_display() に一度で渡します(「Mixed Hebrew / Latin / Digit Lines」を参照)。出力された括弧が )...( になっている場合は、トップレベルの Rust bidi インポートが使われています。WeasyPrint の場合は、<html> 要素に dir="rtl" を設定し、テキストを論理順で渡します。WeasyPrint のテキストエンジンは論理順から行をレイアウトするためです(WeasyPrint 70 で確認済みですが、WeasyPrint のドキュメントでは双方向テキストは引き続き未対応機能として記載されています)。そのため、HTML テキストを get_display() で事前に並べ替えないでください。また、レンダリングされた PDF を確認してください。DOCX/python-docx の場合は、PDF の修正とは逆の対応をします。get_display() は呼び出さないでください(Word が自動で並べ替えます)。段落に <w:bidi/> を設定し、行をスクリプトごとのランに分割して、ヘブライ語のランにだけ <w:rtl/> を指定し、すべてのランに w:cs フォントと w:szCs サイズを設定します(ステップ 5 を参照)。

エラー:「ヘブライ語の Word(.docx)で英語が誤った側に表示される、またはフォントやサイズが反映されない」

原因:混在する行全体を <w:rtl/> が付いたひとつのランにしている(英語と数字が逆順になる)、混在する行のヘブライ語ランに <w:rtl/> が付いていない(フレーズが逆順になる)、またはランに w:ascii/w:sz だけを設定し、複雑なスクリプト用の w:cs/w:szCs を設定していない(ヘブライ語でフォントやサイズが反映されない)ことです。<w:rtl/> の有無だけを確認する方法では、表示が崩れたままのファイルでも検査を通過するため、フラグだけでなくランの構造を確認してください。 解決策:scripts/docx_rtl.py(ステップ 5)を使用します。スクリプトごとにランを分け、ヘブライ語のランだけに rtl を設定し、すべてのランに w:cs と w:szCs を設定します。

エラー:「ヘブライ語の表(.docx)が逆向きになり、最初の列が左側に表示される」

原因:これはテキスト方向ではなく、列順の問題です。python-docx の表には、<w:tblPr> に <w:bidiVisual/> が設定されていないため、Word は列を左から右に配置します。その結果、論理順で最初の列が左側に置かれ、表全体が逆向きに読めるようになります。各セル内のテキストを修正しても、列の位置は変わりません。 解決策:表ごとに一度 table.table_direction = WD_TABLE_DIRECTION.RTL を設定します(<w:bidiVisual/> が出力され、視覚上の列順が RTL に反転します)。さらに、各セルのテキストをセル単位の bidi ヘルパーで処理します。両方が必要です。add_rtl_table は両方を実行します。ヘッダーや行のデータは自然な論理順のままにし、自分で列リストを逆順にしないでください。bidiVisual を設定した後に二重で反転してしまいます。LibreOffice/Preview ではなく Word で確認してください(これらは表をより柔軟に反転表示するため、問題が見えにくくなります)。

エラー:「ヘブライ語の表のセルが左揃えになる(ヘッダーやテキストは左側、数字は右側)」

原因:セルの段落に物理的な RIGHT 揃えを設定しています。OOXML の w:jc は物理方向ではなく論理方向です。right は「行末」を意味し、ヘブライ語の <w:bidi/> 段落では行末が左側になるため、RIGHT 揃えにするとヘブライ語は視覚上の左側に寄ります。一方、LTR の数字セルは右側に寄るため、表の位置がばらばらになり、揃わなくなります。 解決策:RTL の表セルには、明示的な揃えを設定しないでください。各セルの段落に <w:bidi/> を設定し、揃えは未設定のままにします。RTL 段落は既定で開始位置(視覚上の右側)に揃うため、ヘッダー、ヘブライ語のテキスト、数字がすべて右端に揃います。scripts/docx_rtl.py の set_cell_rtl_text を参照してください。

エラー:「Word ファイルのヘブライ語の段落がすべて左揃えになる」

原因:段落に <w:bidi/> と明示的な右揃え(WD_ALIGN_PARAGRAPH.RIGHT、つまり w:jc="right")の両方が設定されています。jc は論理方向なので、RTL 段落では「right」は行末、つまり視覚上の左側を意味します。 解決策:RTL 段落では揃えを未設定のままにします。段落は視覚上の右側から始まります。scripts/docx_rtl.py がこの処理を行います。

エラー:「WeasyPrint: cannot load library 'libgobject-2.0-0'」または PDF でヘブライ語以外のフォントが使用される

原因:Pango がインストールされていないか、ライブラリパスに含まれていません。または、base_url を指定せずに HTML がレンダリングされたため、相対パスの @font-face URL が無視されました。 解決方法:Pango をインストールし(ステップ 2)、HTML(...) に base_url を渡してください(ステップ 4)。

コメント