@prefix schema: <https://schema.org/> .
@prefix skos: <http://www.w3.org/2004/02/skos/core#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix ks: <https://comcomponent.com/vocab/> .

<https://comcomponent.com/blog/windows-app-printing-pdf-guide/#article>
    schema:about <https://comcomponent.com/knowledge/printdocument/>, <https://comcomponent.com/knowledge/fixeddocument/>, <https://comcomponent.com/knowledge/pdf-generation-library/> ;
    schema:mentions <https://comcomponent.com/knowledge/flowdocument/>, <https://comcomponent.com/knowledge/gdi-print-path/>, <https://comcomponent.com/knowledge/xps-print-path/>, <https://comcomponent.com/knowledge/hard-margin/>, <https://comcomponent.com/knowledge/printable-area/>, <https://comcomponent.com/knowledge/margin-bounds/>, <https://comcomponent.com/knowledge/microsoft-print-to-pdf/>, <https://comcomponent.com/knowledge/office-com-automation/>, <https://comcomponent.com/knowledge/session-zero/>, <https://comcomponent.com/knowledge/gdi-handle-leak/>, <https://comcomponent.com/knowledge/print-spooler/>, <https://comcomponent.com/knowledge/print-edge-clipping/>, <https://comcomponent.com/knowledge/unattended-batch-output/>, <https://comcomponent.com/knowledge/interactive-dialog-hang/>, <https://comcomponent.com/knowledge/windows-service/>, <https://comcomponent.com/knowledge/com/>, <https://comcomponent.com/knowledge/deadlock/>, <https://comcomponent.com/knowledge/windows-forms/> .

<https://comcomponent.com/knowledge/printdocument/> a skos:Concept ;
    skos:prefLabel "PrintDocument(WinFormsの印刷)"@ja ;
    skos:definition "DocumentNameやPrinterSettingsを設定し、PrintPageイベントで描画してPrint()で印刷を開始するWinFormsの印刷用クラス。"@ja ;
    skos:altLabel "System.Drawing.Printing.PrintDocument" ;
    ks:uses <https://comcomponent.com/knowledge/gdi-print-path/> ;
    ks:uses <https://comcomponent.com/knowledge/margin-bounds/> ;
    ks:mayCause <https://comcomponent.com/knowledge/gdi-handle-leak/> ;
    ks:recommendedFor <https://comcomponent.com/knowledge/windows-forms/> .

<https://comcomponent.com/knowledge/fixeddocument/> a skos:Concept ;
    skos:prefLabel "FixedDocument"@ja ;
    skos:definition "アプリケーション側がレイアウトを完全に制御する、表示・印刷デバイスへの忠実度優先のWPF文書。"@ja ;
    ks:uses <https://comcomponent.com/knowledge/xps-print-path/> .

<https://comcomponent.com/knowledge/pdf-generation-library/> a skos:Concept ;
    skos:prefLabel "PDF生成ライブラリ"@ja ;
    skos:definition "印刷パイプラインを経由せず、PDFファイルを直接生成するライブラリ群の総称。"@ja ;
    skos:altLabel "PDFライブラリ"@ja ;
    ks:recommendedFor <https://comcomponent.com/knowledge/unattended-batch-output/> .

<https://comcomponent.com/knowledge/gdi-print-path/> a skos:Concept ;
    skos:prefLabel "GDI印刷パス"@ja ;
    skos:definition "Win32 GDIアプリケーションの描画命令をEMF(拡張メタファイル)としてスプールする、従来のWinFormsアプリが通る印刷経路。"@ja ;
    ks:uses <https://comcomponent.com/knowledge/print-spooler/> .

<https://comcomponent.com/knowledge/xps-print-path/> a skos:Concept ;
    skos:prefLabel "XPS印刷パス"@ja ;
    skos:definition "XPS(XML Paper Specification)ベースのプリンタードライバー向けの経路で、WPFアプリケーションが本来使う印刷経路。"@ja ;
    ks:uses <https://comcomponent.com/knowledge/print-spooler/> .

<https://comcomponent.com/knowledge/flowdocument/> a skos:Concept ;
    skos:prefLabel "FlowDocument"@ja ;
    skos:definition "ウィンドウサイズやフォント設定など実行時の変数に応じて内容を動的に再レイアウトする、可読性優先のWPF文書。"@ja ;
    ks:uses <https://comcomponent.com/knowledge/xps-print-path/> .

<https://comcomponent.com/knowledge/print-spooler/> a skos:Concept ;
    skos:prefLabel "印刷スプーラー"@ja ;
    skos:definition "アプリから受け取った印刷ジョブを一旦ためて、順にプリンタードライバーへ渡すWindowsのサービス。"@ja ;
    skos:altLabel "Print Spooler" .

<https://comcomponent.com/knowledge/margin-bounds/> a skos:Concept ;
    skos:prefLabel "MarginBounds"@ja ;
    skos:definition "アプリが指定したMargins(既定は上下左右1インチ)だけから計算される描画可能領域で、印字可能な範囲へは自動で丸められない。"@ja ;
    skos:altLabel "PrintPageEventArgs.MarginBounds" .

<https://comcomponent.com/knowledge/hard-margin/> a skos:Concept ;
    skos:prefLabel "ハードマージン"@ja ;
    skos:definition "プリンターが物理的に印字できない、用紙の端の帯。アプリからは狭められない。"@ja ;
    skos:altLabel "HardMarginX" ;
    skos:altLabel "HardMarginY" .

<https://comcomponent.com/knowledge/print-edge-clipping/> a skos:Concept ;
    skos:prefLabel "印刷の端の欠け"@ja ;
    skos:definition "MarginBoundsを基準に描画した内容が印字可能な範囲からはみ出し、用紙の端が印刷されず欠ける現象。"@ja .

<https://comcomponent.com/knowledge/printable-area/> a skos:Concept ;
    skos:prefLabel "PrintableArea(印字可能な範囲)"@ja ;
    skos:definition "プリンターが印字できる範囲を100分の1インチ単位で表す、PageSettingsのプロパティ。"@ja ;
    skos:altLabel "PageSettings.PrintableArea" .

<https://comcomponent.com/knowledge/microsoft-print-to-pdf/> a skos:Concept ;
    skos:prefLabel "Microsoft Print to PDF"@ja ;
    skos:definition "Windows 10以降に標準搭載された、印刷キューとドライバーパッケージという位置づけのPDF出力機能。保存先を尋ねる対話的な動作が前提。"@ja ;
    ks:uses <https://comcomponent.com/knowledge/print-spooler/> ;
    ks:notRecommendedFor <https://comcomponent.com/knowledge/unattended-batch-output/> .

<https://comcomponent.com/knowledge/unattended-batch-output/> a skos:Concept ;
    skos:prefLabel "無人バッチでのPDF大量生成"@ja ;
    skos:definition "印刷ダイアログや既定プリンターの状態に依存せず、ファイルパスを固定してPDFを静かに大量出力する要件。"@ja ;
    skos:altLabel "無人バッチ処理"@ja .

<https://comcomponent.com/knowledge/office-com-automation/> a skos:Concept ;
    skos:prefLabel "サーバーサイドOffice COM自動化"@ja ;
    skos:definition "ASP/ASP.NET/DCOM/NTサービスなど無人・非対話のクライアントからExcel.Applicationなどを操作する構成。Microsoftは公式に非推奨・非サポートとしている。"@ja ;
    skos:altLabel "Office COM Interop(サーバー/サービス)"@ja ;
    ks:notRecommendedFor <https://comcomponent.com/knowledge/windows-service/> ;
    ks:mayCause <https://comcomponent.com/knowledge/deadlock/> ;
    ks:uses <https://comcomponent.com/knowledge/com/> ;
    ks:notRecommendedFor <https://comcomponent.com/knowledge/unattended-batch-output/> .

<https://comcomponent.com/knowledge/windows-service/> a skos:Concept ;
    skos:prefLabel "Windowsサービス"@ja ;
    skos:definition "ユーザーのサインインと無関係にバックグラウンドで動くWindowsのプロセス。"@ja ;
    skos:altLabel "サービス"@ja ;
    ks:uses <https://comcomponent.com/knowledge/session-zero/> .

<https://comcomponent.com/knowledge/deadlock/> a skos:Concept ;
    skos:prefLabel "デッドロック(deadlock)"@ja ;
    skos:definition "複数のタスクが互いの完了やリソース解放を待ち続け、永遠に進行しなくなる状態である。"@ja ;
    skos:altLabel "Deadlock" .

<https://comcomponent.com/knowledge/com/> a skos:Concept ;
    skos:prefLabel "COM(コンポーネントオブジェクトモデル)"@ja ;
    skos:definition "公開インターフェース、レジストリ登録、Apartment Modelなどを土台にした、Windowsのバイナリ互換コンポーネントモデル。"@ja ;
    skos:altLabel "Component Object Model" .

<https://comcomponent.com/knowledge/session-zero/> a skos:Concept ;
    skos:prefLabel "セッション0"@ja ;
    skos:definition "Windows Vista以降、サービスなど対話的ユーザーに関わらないプロセス専用に予約された、ユーザーの対話的セッションとは分離されたセッション。"@ja ;
    skos:altLabel "Session 0" ;
    ks:mayCause <https://comcomponent.com/knowledge/interactive-dialog-hang/> .

<https://comcomponent.com/knowledge/interactive-dialog-hang/> a skos:Concept ;
    skos:prefLabel "対話的な待ちによるハング"@ja ;
    skos:definition "ユーザーの入力を待つコード(印刷ダイアログの表示待ちなど)がユーザーに見えない場所で実行され続け、ハングしたように見える状態。"@ja .

<https://comcomponent.com/knowledge/gdi-handle-leak/> a skos:Concept ;
    skos:prefLabel "GDIハンドルリーク"@ja ;
    skos:definition "Graphics・Font・Brush・PenなどのGDI/GDI+リソースを解放し忘れ、プロセスごとに既定の上限があるGDIオブジェクトのハンドルが枯渇していく状態。"@ja ;
    skos:altLabel "GDIオブジェクトの枯渇"@ja .

<https://comcomponent.com/knowledge/windows-forms/> a skos:Concept ;
    skos:prefLabel "Windows Forms"@ja ;
    skos:definition "デスクトップGUIアプリケーションを構築するための.NET/.NET FrameworkのUIフレームワーク。"@ja ;
    skos:altLabel "WinForms" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/printdocument/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/gdi-print-path/> ;
    schema:description "従来のWinFormsアプリはPrintDocumentを使い、GDI印刷パスを通ってスプーラーへ送られる"@ja ;
    ks:evidence <https://learn.microsoft.com/windows-hardware/drivers/print/windows-print-path-overview> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/fixeddocument/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/xps-print-path/> ;
    schema:description "FixedDocumentで組んだ固定レイアウトの帳票はXPS印刷パスへ直接送られる"@ja ;
    ks:evidence <https://learn.microsoft.com/windows-hardware/drivers/print/windows-print-path-overview> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/flowdocument/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/xps-print-path/> ;
    schema:description "WPFアプリケーションはFlowDocumentを含め本来XPS印刷パスを使う"@ja ;
    ks:evidence <https://learn.microsoft.com/windows-hardware/drivers/print/windows-print-path-overview> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/xps-print-path/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/gdi-print-path/> ;
    schema:description "対象プリンターがXPSDrv非対応の場合、XPS印刷パスは内部でGDI形式へ自動変換してから送る"@ja ;
    ks:evidence <https://learn.microsoft.com/windows-hardware/drivers/print/windows-print-path-overview> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/gdi-print-path/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/print-spooler/> ;
    schema:description "GDI印刷パスはEMFとしてスプールするか印刷可能なイメージを直接レンダリングし、印刷スプーラーへ送る"@ja ;
    ks:evidence <https://learn.microsoft.com/windows-hardware/drivers/print/introduction-to-printing> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/xps-print-path/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/print-spooler/> ;
    schema:description "XPS印刷パスもXPSドキュメントの形式で最終的に印刷スプーラーへ送られる"@ja ;
    ks:evidence <https://learn.microsoft.com/windows-hardware/drivers/print/windows-print-path-overview> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/printdocument/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/margin-bounds/> ;
    schema:description "PrintPageイベント内の描画はMarginBoundsを基準に座標を組み立てるのが基本である"@ja ;
    ks:evidence <https://learn.microsoft.com/dotnet/api/system.drawing.printing.pagesettings.margins> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/hard-margin/> ;
    rdf:predicate ks:mayCause ;
    rdf:object <https://comcomponent.com/knowledge/print-edge-clipping/> ;
    schema:description "論理的な余白(Margins)がハードマージンより小さいと、MarginBoundsが印字可能な範囲からはみ出し端が欠ける"@ja ;
    ks:evidence <https://learn.microsoft.com/dotnet/api/system.drawing.printing.pagesettings.hardmarginx> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/margin-bounds/> ;
    rdf:predicate ks:mayCause ;
    rdf:object <https://comcomponent.com/knowledge/print-edge-clipping/> ;
    schema:description "MarginBoundsはMarginsだけから計算され印字可能な範囲へ自動で丸められないため、これを基準に描くと端の欠けが起こり得る"@ja ;
    ks:evidence <https://learn.microsoft.com/dotnet/api/system.drawing.printing.pagesettings.margins> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/printable-area/> ;
    rdf:predicate ks:prevents ;
    rdf:object <https://comcomponent.com/knowledge/print-edge-clipping/> ;
    schema:description "描画に使う矩形をPrintableAreaと重ねて求めれば、機種ごとにハードマージンが違っても欠けない範囲だけを描ける。ただしOriginAtMarginsが既定のfalseのときGraphicsの原点は印字可能な範囲の左上にあるため、重なりを取った矩形を描く前にGraphicsの座標へオフセットし直さないと、ハードマージンの分だけ右下へずれて逆に端が欠ける"@ja ;
    ks:evidence <https://learn.microsoft.com/dotnet/api/system.drawing.printing.pagesettings.printablearea> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/microsoft-print-to-pdf/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/print-spooler/> ;
    schema:description "Microsoft Print to PDFは印刷キューとドライバーパッケージという位置づけで、印刷スプーラーを経由する"@ja ;
    ks:evidence <https://learn.microsoft.com/windows-hardware/customize/desktop/unattend/microsoft-windows-printing-spooler-core-removempdw> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/microsoft-print-to-pdf/> ;
    rdf:predicate ks:notRecommendedFor ;
    rdf:object <https://comcomponent.com/knowledge/unattended-batch-output/> ;
    schema:description "Microsoft Print to PDFは保存先ファイル名を尋ねる対話的な動作が前提であり、無人・大量のバッチ処理には設計上向いていない"@ja ;
    ks:evidence <https://learn.microsoft.com/windows-hardware/customize/desktop/unattend/microsoft-windows-printing-spooler-core-removempdw> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/pdf-generation-library/> ;
    rdf:predicate ks:recommendedFor ;
    rdf:object <https://comcomponent.com/knowledge/unattended-batch-output/> ;
    schema:description "印刷は一切せず無人バッチでPDFファイルだけを大量生成したい場合は、印刷パイプラインを経由しないPDF生成ライブラリでの直接生成が素直である"@ja ;
    ks:evidence <https://learn.microsoft.com/windows-hardware/customize/desktop/unattend/microsoft-windows-printing-spooler-core-removempdw> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/office-com-automation/> ;
    rdf:predicate ks:notRecommendedFor ;
    rdf:object <https://comcomponent.com/knowledge/windows-service/> ;
    schema:description "サーバーやサービスからのOffice COM自動化はMicrosoftが公式に非サポート・非推奨としている"@ja ;
    ks:evidence <https://support.microsoft.com/en-us/topic/considerations-for-server-side-automation-of-office-48bcfe93-8a89-47f1-0bce-017433ad79e2> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/office-com-automation/> ;
    rdf:predicate ks:mayCause ;
    rdf:object <https://comcomponent.com/knowledge/deadlock/> ;
    schema:description "Officeは対話的デスクトップとユーザープロファイルを前提に設計されており、無人・非対話環境で実行すると不安定な動作やデッドロックを起こし得る"@ja ;
    ks:evidence <https://support.microsoft.com/en-us/topic/considerations-for-server-side-automation-of-office-48bcfe93-8a89-47f1-0bce-017433ad79e2> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/office-com-automation/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/com/> ;
    schema:description "サーバーサイドOffice COM自動化はExcel.ApplicationなどをCOMコンポーネントとして操作する"@ja ;
    ks:evidence <https://support.microsoft.com/en-us/topic/considerations-for-server-side-automation-of-office-48bcfe93-8a89-47f1-0bce-017433ad79e2> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/windows-service/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/session-zero/> ;
    schema:description "Windowsサービスはセッション0で動作し、対話的ユーザーのセッションとは分離されている"@ja ;
    ks:evidence <https://learn.microsoft.com/windows/win32/services/service-changes-for-windows-vista> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/session-zero/> ;
    rdf:predicate ks:mayCause ;
    rdf:object <https://comcomponent.com/knowledge/interactive-dialog-hang/> ;
    schema:description "セッション0の分離により、サービスはダイアログを表示してもユーザーには見えず、入力待ちのコード(印刷ダイアログの表示待ちなど)を書くとハングしたように見える"@ja ;
    ks:evidence <https://learn.microsoft.com/windows/win32/services/service-changes-for-windows-vista> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/printdocument/> ;
    rdf:predicate ks:mayCause ;
    rdf:object <https://comcomponent.com/knowledge/gdi-handle-leak/> ;
    schema:description "Graphics・Font・Brush・PenなどのGDI/GDI+リソースをusingやDispose()で確実に解放しないコードを印刷処理に書くと、長期稼働後にGDIハンドルが枯渇する"@ja ;
    ks:evidence <https://learn.microsoft.com/windows/win32/sysinfo/gdi-objects> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/printdocument/> ;
    rdf:predicate ks:recommendedFor ;
    rdf:object <https://comcomponent.com/knowledge/windows-forms/> ;
    schema:description "画面がWinFormsならPrintDocumentを使うのが素直な選択とされている"@ja ;
    ks:evidence <https://learn.microsoft.com/dotnet/api/system.drawing.printing.printdocument> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/office-com-automation/> ;
    rdf:predicate ks:notRecommendedFor ;
    rdf:object <https://comcomponent.com/knowledge/unattended-batch-output/> ;
    schema:description "常駐サービスやバッチからのOffice COM自動化はMicrosoftが非サポートと明言しており、無人バッチでのPDF大量生成にはOpen XML SDK等の直接生成やPDF生成ライブラリに寄せるべきとしている"@ja ;
    ks:evidence <https://support.microsoft.com/en-us/topic/considerations-for-server-side-automation-of-office-48bcfe93-8a89-47f1-0bce-017433ad79e2> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .
