知識マップ: Windows業務アプリの印刷とPDF出力 ── System.Drawing.Printing / WPF / 帳票ライブラリの使い分け
記事「Windows業務アプリの印刷とPDF出力 ── System.Drawing.Printing / WPF / 帳票ライブラリの使い分け」の主張を、概念と関係(エッジ)に分解した知識グラフの全体です。各関係には根拠・確認日・確度が付いています。
Windows業務アプリの印刷は、画面がWinFormsならPrintDocument、WPFなら流し込み優先のFlowDocumentか固定レイアウト優先のFixedDocumentを使うのが素直で、それぞれGDI印刷パスとXPS印刷パスという別経路でスプーラーへ送られます。余白はMarginBoundsとプリンター側のハードマージンが別々に決まり、両者を意識せず描画すると印刷の端が欠けます。無人バッチでPDFだけを生成したいなら、対話的な保存先選択が前提のMicrosoft Print to PDFではなくPDF生成ライブラリでの直接生成が向きます。サーバーサイドやWindowsサービスでのOffice COM自動化はMicrosoftが非サポートと明言しており不安定な動作やデッドロックを招き得るため、常駐処理からの印刷はセッション0の制約とあわせて設計する必要があります。
flowchart LR
accTitle: Windows業務アプリの印刷・PDF出力の知識マップ
accDescr: PrintDocument・FixedDocument・FlowDocument・PDF生成ライブラリがGDI印刷パスとXPS印刷パスのどちらを通るか、余白とハードマージンのずれが印刷の端の欠けを生む仕組み、無人バッチではMicrosoft Print to PDFではなくPDFライブラリが向くこと、サービスやOffice COM自動化の制約の関係を示す図。
printdocument["PrintDocument(WinFormsの印刷)"]
fixeddocument["FixedDocument"]
pdf_generation_library["PDF生成ライブラリ"]
gdi_print_path["GDI印刷パス"]
xps_print_path["XPS印刷パス"]
flowdocument["FlowDocument"]
print_spooler["印刷スプーラー"]
margin_bounds["MarginBounds"]
hard_margin["ハードマージン"]
print_edge_clipping["印刷の端の欠け"]
printable_area["PrintableArea(印字可能な範囲)"]
microsoft_print_to_pdf["Microsoft Print to PDF"]
unattended_batch_output["無人バッチでのPDF大量生成"]
office_com_automation["サーバーサイドOffice COM自動化"]
windows_service["Windowsサービス"]
deadlock["デッドロック(deadlock)"]
com["COM(コンポーネントオブジェクトモデル)"]
session_zero["セッション0"]
interactive_dialog_hang["対話的な待ちによるハング"]
gdi_handle_leak["GDIハンドルリーク"]
windows_forms["Windows Forms"]
printdocument -->|"利用する"| gdi_print_path
fixeddocument -->|"利用する"| xps_print_path
flowdocument -->|"利用する"| xps_print_path
xps_print_path -.->|"利用する"| gdi_print_path
gdi_print_path -->|"利用する"| print_spooler
xps_print_path -->|"利用する"| print_spooler
printdocument -->|"利用する"| margin_bounds
hard_margin -.->|"原因になり得る"| print_edge_clipping
margin_bounds -.->|"原因になり得る"| print_edge_clipping
printable_area -.->|"防止する"| print_edge_clipping
microsoft_print_to_pdf -->|"利用する"| print_spooler
microsoft_print_to_pdf -->|"用いるのは非推奨"| unattended_batch_output
pdf_generation_library -->|"推奨される対応"| unattended_batch_output
office_com_automation -->|"用いるのは非推奨"| windows_service
office_com_automation -->|"原因になり得る"| deadlock
office_com_automation -->|"利用する"| com
windows_service -->|"利用する"| session_zero
session_zero -->|"原因になり得る"| interactive_dialog_hang
printdocument -->|"原因になり得る"| gdi_handle_leak
printdocument -->|"推奨される対応"| windows_forms
office_com_automation -->|"用いるのは非推奨"| unattended_batch_output
概念間の関係(全21件)
図と同じ関係を文章でも列挙します。表示している文と機械可読な意味データ(RDFa)は同じ要素に載っています。確度が「確立した関係」のものは直接の関係として、「条件付きの関係」のものは成立条件つきの言明(rdf:Statement)として表現しています。
- PrintDocument(WinFormsの印刷)はGDI印刷パスを利用します。
- FixedDocumentはXPS印刷パスを利用します。
- FlowDocumentはXPS印刷パスを利用します。
- XPS印刷パスはGDI印刷パスを利用します。
- GDI印刷パスは印刷スプーラーを利用します。
- XPS印刷パスは印刷スプーラーを利用します。
- PrintDocument(WinFormsの印刷)はMarginBoundsを利用します。
- ハードマージンは印刷の端の欠けの原因になることがあります。
- MarginBoundsは印刷の端の欠けの原因になることがあります。
- PrintableArea(印字可能な範囲)は印刷の端の欠けを防ぎます。
- Microsoft Print to PDFは印刷スプーラーを利用します。
- Microsoft Print to PDFを無人バッチでのPDF大量生成に用いることは推奨されません。
- PDF生成ライブラリは無人バッチでのPDF大量生成に対する本記事の推奨です。
- サーバーサイドOffice COM自動化をWindowsサービスに用いることは推奨されません。
- サーバーサイドOffice COM自動化はデッドロック(deadlock)の原因になることがあります。
- サーバーサイドOffice COM自動化はCOM(コンポーネントオブジェクトモデル)を利用します。
- Windowsサービスはセッション0を利用します。
- セッション0は対話的な待ちによるハングの原因になることがあります。
- PrintDocument(WinFormsの印刷)はGDIハンドルリークの原因になることがあります。
- PrintDocument(WinFormsの印刷)はWindows Formsに対する本記事の推奨です。
- サーバーサイドOffice COM自動化を無人バッチでのPDF大量生成に用いることは推奨されません。
主要概念の定義
機械可読データ
このページはサイトの知識グラフ(_data/knowledge/)から自動生成されています。誤りの指摘はお問い合わせからお願いします。