「表示どおり」モードでExcel、Word、TXT、およびその他のファイルをPDFに変換するWebサービスを作成する方法

MS Excel形式のアカウント、経理、財務書類を保存する愚かな習慣はどこから来たのですか? 特別なPDF形式がある場合、スプレッドシート形式での印刷を目的としたドキュメントを保存および転送するのはなぜですか? ただし、すべての会計プログラムでは、文書はまず最初に必ずMS Excelにエクスポートされ、その後で文書を保存する代替方法が提供されます。 ここからタスクが発生しました。会計士は自分のドキュメントを好きなように保存できますが、クライアントはそれらをPDF形式で受け取り、会計士がMS Excelテンプレートに重ねる画像に正確に入れる必要があります。

会計プログラムとして、無料のSun:Bookkeepingを使用しました。 (実際には、このプログラムからドキュメントをPDFにすぐに保存できますが、Excelが優れていると言ったら、それから優れています。)

会計士は、.xlsファイルをディスク上の特定のディレクトリにアップロードします。そこから、ファイルを選択してPDFに変換し、別のディレクトリに保存する必要があります。 これらはすべてWebサービスの形式で実装する必要があります。つまり、クライアントはサイトの「個人アカウント」にあるpdfドキュメントを表示してダウンロードできる必要があります。



解決方法:


私が最初にしたかったのは、PHPまたはPerl用の既製のライブラリを見つけて、その場でファイルを直接変換することでした。

Excel形式で作業するためのこのようなライブラリは、実際に見つかりました。たとえば、PHPExcel、PHPExcelReader、Spreadsheet :: ParseExcelなどです。

これらのライブラリは非常にうまく機能しますが、設計されたとおりに機能します。Excelスプレッドシートでデータを探して操作します。

しかし、まったく異なるものが必要です。印刷用のフォームにExcelスプレッドシートを取得するには、すべての写真にスタンプと署名、フォント形式、セルを使用します。



2番目のソリューションは仮想プリンターです。 その本質は、適切なプログラムでファイルを開いて印刷するために送信することですが、実際のプリンターではなく仮想プリンターに送信します。仮想プリンターは、紙の代わりにps pscriptでファイルに保存され、それからPDFファイルを作成します

システムはWebサービスとしても機能するはずなので、Apacheを使用したLinuxをプラットフォームとして選択しました。 すべてのMS Officeファイルを開くことができるプログラムとして-無料のOpenOffice.org 3.4



だから私たちは何をしますか:


OpenOfficeをインストールします。 PyODConverterコンバーターのインストールガイドでは、OpenOffice.org 2.4バージョンをインストールすることを推奨していますが、リポジトリからOpenOffice.org 3.4をインストールしたところ、すべてうまくいきました。

インストール後、プログラムを実行しようとしましたが、システムは拒否し、別のJavaランタイム環境が必要になりました。 彼は必要ですか? いいえということが判明しました。 また、ファイルを仮想プリンターに送信するためにOpenOffice全体を実行することはまったく役に立ちません。 このプログラムには優れたpdfコンバーターがあり、コマンドラインから簡単に呼び出すことができます。



これは次のように行われます。







PDFコンバーターを作成する




たとえばconverter.shという名前のbashファイルを作成します



 <コード>

 <source lang = "bash">
 #!/ bin / bash

 #OpenOffice.orgとPYTHONがインストールされている場所を確認します。 
 #システムで異なる場合は、手動でパスを修正します

 OOFFICE = `ls /usr/bin/openoffice.org3 / usr / bin / ooffice / usr / lib / openoffice / program / soffice | ヘッド-n 1`
 OOOPYTHON = `ls /opt/openoffice.org*/program/python / usr / bin / python | ヘッド-n 1`

 [!  -x "$ OOFFICE"]
それから
  echo "OpenOffice.orgバイナリを自動検出できませんでした"
 出る
 fi

 [!  -x "$ OOOPYTHON"]
それから
  echo "OpenOffice.org Pythonを自動検出できませんでした"
 出る
 fi

 echo "検出されたOpenOffice.orgバイナリ:$ OOFFICE"
 echo "検出されたOpenOffice.org python:$ OOOPYTHON"

 #リファレンス:http://wiki.services.openoffice.org/wiki/Using_Python_on_Linux
 #FedoraまたはUbuntuに付属のOpenOffice.orgを使用する場合、次の行のコメントを解除します。
 #export PYTHONPATH = "/ usr / lib / openoffice.org / program" 

 #Xサーバーがないことをテストするためにシミュレートする場合は、次の行のコメントを解除します。
 #unset DISPLAY

 #実行中のOpenOffice.orgプロセスをすべて終了します。
 killall -u `whoami` -q soffice

 #これは重要な行です:プログラムはネットワークからPythonスクリプトをダウンロードしようとしています。 
 #ファイルを変換するにはOpenOfficeが必要です。 すべてが順調であれば、converter.shを実行した後 
 #DocumentConverter.pyというディレクトリがディレクトリに表示されます。 
 #動作しない場合は、DocumentConverter.pyファイルをダウンロードします 
 #以下のアドレスで手動でこのスクリプトと同じディレクトリに配置します。
 #スクリプトのポートが8100であることを確認します
 test -f DocumentConverter.py ||  wget http://www.artofsolving.com/files/DocumentConverter.py

 #OpenOffice.orgをTCPポート8100でリスニングモードで起動します。
 $ OOFFICE "-accept = socket、host = localhost、port = 8100; urp; StarOffice.ServiceManager" -norestore -nofirststartwizard -nologo -headless&

 #数秒待ってから起動します。
 5秒寝る

 #ここで、変換するファイルの名前をリストします。 
 #ソースファイルの名前-変換するファイル。 
 #最も楽しいことは、PDFだけでなく、あらゆる形式に変換できることです。 
 #OpenOffice.orgでサポート
 # 
 #MS PowerPointからFlashへ
 $ OOOPYTHON DocumentConverter.py sample.ppt sample.swf

 #ExcelからPDFへ
 $ OOOPYTHON DocumentConverter.py sample.xls sample.pdf

 #OpenOffice.orgを閉じます。
 killall -u `whoami` soffice

 #------------------------------------------------- --- 

 </ source>
 </ code>




converter.shスクリプトを実行する権限を設定します(755)

このスクリプト(converter.sh)と同じディレクトリにあるsample.xlsという名前でExcelファイルを置き、converter.shスクリプトを実行すると、sample.pdfファイルがディレクトリに表示されます。これは、Excelファイルの印刷フォームのコピーになります。



半分完了。 次に、変換プロセスをWebサービスとして整理する必要があります。

もちろん、converter.shファイルを/ cgi-bin / Apacheディレクトリに入れてすぐに実行することもできますが、ここでセキュリティタスクが開始されます。 このようなサービスのセキュリティの問題は、スクリプトに未知のファイルを転送し、未知の情報とともにディスクに保存できるようにするため、非常に慎重に取り組む必要があります。

正しいアプローチは、converter.shファイルをDOCUMENT_ROOT Apacheの上に配置し、/ cgi-bin /ディレクトリにあるperlなどの中間スクリプトを介してアクセスし、converter.shに渡されるすべてのパラメーターを慎重にチェックすることです。



変換サービスの実装後に見つかった問題。

Linuxはwindows-1251でエンコードされたロシア文字の名前のファイルを理解しないことが判明しました。 ここでできること:

1.会計士を説得して、ファイルをラテン語名で保存する(難しい)

2.ディレクトリにロードするときにファイル名をutf-8に変換します(実数)

3. Windowsで同様のサービスを実装するには-Apache(試してみます)



Windowsでは、コンバーターの実装も簡単でした


私はこれが好きでした:

1. LibreOffice 3.4をダウンロードしてインストールします

2.ダウンロードしたPyODConverter

3. DocumentConverter.pyファイルを作業ディレクトリ(たとえば、C:\ test \)に保存しました

4. DocumentConverter.pyファイルの定数DEFAULT_OPENOFFICE_PORT = 8100を変更しました(デフォルトでは、別のポートが指定されています)

5.ディレクトリC:\ test \に変換用のテストファイル-test.xlsを配置します。



次に、変換プロセスを開始します。

まず、ステルスモードでOpenOfficeを実行します。 コマンドライン(cmd)に次のように記述します。



"C:\Program Files\LibreOffice.org 3.4\program\soffice.exe" -headless -nologo -norestore -accept=socket,host=localhost,port=8100;urp;StarOffice.ServiceManager







ここで重要なのは、ポートがDEFAULT_OPENOFFICE_PORTと一致することです



変換を開始します。

"C:\Program Files\LibreOffice.org 3.4\program\python" c:\test\DocumentConverter.py c:\test\test.xls c:\test\test.pdf







c:\ test \ディレクトリには、変換されたPDFファイルがあります。



したがって、xls、doc、docx、rtf、txt、odt、ott、sxw、stw、html、xmlファイルコンバーターは、一般にOpenOfficeが開くすべてのものの準備ができています。



All Articles