このプロジェクトについて
## プロジェクト概要
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 は、ソフトウェアが「現状のまま」提供され、作者が使用結果に対する責任を負わないことを宣言しています。
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.