このプロジェクトについて

## プロジェクト概要 cups-web-print は、Python Flask と CUPS に基づく Web 印刷サービスであり、CUPS プリントサーバーに HTTP グラフィカルインターフェースを提供します。サーバーに接続された USB プリンタをネットワークプリンタに変換し、LAN 内のデバイスがブラウザ経由で印刷を完了できるようにします。各デバイスにドライバをインストールしたり、印刷キューを設定したりする必要はありません。 ## 主な機能 ### ファイル管理 - PDF、DOC、DOCX、PPT、PPTX、XLS、XLSX、TXT、RTF、および JPG、JPEG、PNG、GIF、BMP、SVG などの画像形式に対応 - ドラッグ&ドロップでのアップロードに対応 - オンラインプレビュー:PC 端末では PDF をプレビュー、モバイル端末では画像をプレビュー - ファイル一覧の表示と削除 ### 印刷設定 - 用紙サイズ:オフィス用 A1-A4、写真用 5-10 インチなど - 用紙タイプ:普通紙、光沢写真紙など - カラーモード:カラー / モノクロ - 両面印刷:片面、長辺綴じ両面、短辺綴じ両面 - 印刷方向:縦 / 横 - 印刷部数:1-99 部 - ページ範囲:例:1-5 8 10-12 - 印刷スケール:自動 / 用紙に合わせる / 塗りつぶし / スケールなし - ページミラー:水平反転に対応 ### タスク管理 - プリンタのオンライン状態検出(IPP プリンタのみ) - リアルタイムのタスク状態監視:送信済み / 処理中 / 完了 / 失敗 / キャンセル済み - タスク進捗表示(時間と CUPS キューに基づく推定) - タスクのキャンセル - 印刷キューのリアルタイム表示 - 給紙トレイ情報、インクカートリッジ情報、プリンタ情報(稼働時間、ファームウェアバージョン、アラームなど)は、すべて IPP プロトコルで取得 ### セキュリティ対策 - パストラバーサル攻撃対策 - ファイルタイプホワイトリスト検証 - ファイルサイズ制限 100MB - ログの自動ローテーション - ファイル削除時にプレビューキャッシュを自動クリーンアップ ### バイリンガルインターフェース - 中国語インターフェース:http://localhost:5000/zh - 英語インターフェース:http://localhost:5000/en ## 技術スタック - バックエンド:Python 3.9+ と Flask 3.0+ - フロントエンド:HTML5 と Tailwind CSS(CDN) - 印刷サービス:CUPS 2.0+ - ドキュメント変換:LibreOffice 6.0+ - PDF 処理:poppler-utils(pdftoppm)、pdftk - IPP プロトコル:ipptool(cups-client) ## 互換性に関する注意 このプロジェクトは IPP 標準プロトコルと CUPS 標準コマンドを使用しており、理論上は IPP プロトコルをサポートするほとんどのプリンタと互換性があります。README には Canon G3881 でテスト済みと記載されており、他のプリンタについては自己検証が必要です。 ## デプロイ方法 ### コンテナインストール(推奨) Docker で実行し、5000(Web インターフェース)と 631(CUPS)ポートをマッピングし、CUPS 設定、キュー、ログ、およびアップロードとプレビューディレクトリをマウントします。USB プリンタには特権モードと USB デバイスマウントが必要です。ネットワークプリンタのみを使用する場合は、これら 2 つは省略できます。 プリンタ追加の例(ネットワークプリンタの場合): ``` docker exec cups-web-print lpadmin -p Canon_G3881 -v ipp://192.168.1.16:631/ipp/print -m everywhere -E ``` ### ローカルインストール cups、cups-client、LibreOffice コンポーネント、poppler-utils、pdftk、および Python 依存関係をインストールし、CUPS サービスを起動した後、lpadmin でプリンタを追加し、app.py を実行します。README には、crontab による自動起動のオプション方法も記載されています。 ## ディレクトリ構造 - app.py:Flask アプリケーションのメインファイル - ipp_client.py:IPP を介して給紙トレイ、インクカートリッジなどのステータス情報を取得 - printer_checker.py:IPP、BJNP などのプロトコルを介してプリンタのオンライン状態を確認 - templates/:index.html(中国語ホームページ)と index_en.html(英語ホームページ) - uploads/、previews/:アップロードファイルとプレビューファイルのディレクトリ ## トラブルシューティング README には、比較的完全なトラブルシューティングリストが記載されており、以下をカバーしています:lpadmin でのプリンタ追加失敗(各ブランドの IPP アドレス差異、ドライバレスモード、cupsenable/cupsaccept を含む)、5000 ポートが応答しない(プロセス、ポートリスニング、ファイアウォール、Flask バインドアドレス)、ページに使用可能なプリンタがない、ドキュメント変換失敗、PDF プレビュー生成失敗、ページ範囲抽出失敗、インクカートリッジ/給紙トレイ情報が取得できない、および「成功と表示されるが出力がない」場合(-m everywhere パラメータ、CUPS ドライバと PPD ファイル、プリンタのアイドル状態と CUPS ログを確認する必要があります)。 ## ライセンス GPLv3。README は、ソフトウェアが「現状のまま」提供され、作者が使用結果に対する責任を負わないことを宣言しています。