Windows版Firefoxブラウザーのフィールドとヘッダーをプログラムで削除する

なぜこれが必要なのですか?



当社では、完成したフォームを印刷する機能の1つであるWebアプリケーションを使用しています。 当局は、ブラウザヘッダー付きのドキュメントを持ち込むと非常に怒ります。 同時に、Webプログラマーは非難されています-彼はWebアプリケーションも担当しています。

システム管理者は知っています。 しかし、ブラウザ動物園はいくつかの種の個体によって表されます。 それらをインストールするとヘッダーとフィールドが削除されますが、悪は眠らず、黒魔術はその仕事をします-ドキュメントはヘッダーとフッターで印刷され、手動で再度削除する必要があります。 「どのくらいですか?」IT部門の上司に尋ねます。





記載されている問題のその他の解決策は?



そうそう! ビューアはデフォルトでヘッダーとフッターなしでインストールされるため、ドキュメントをPDFに転送して印刷します。 ウェブプログラマーとして、彼らは私に指示した。 私はこの決定が悪いのではないかと疑っていましたが、挑戦せずに自分にこれを言うことを敢えてしませんでした。 そのような習慣がどこから来たのかはわかりませんが、私がこれをやるのは私の無能ではないと確信するまで、彼は本当に彼の需要を必要としないと顧客に納得させません。 言い換えれば、私は仕事を拒否せず、怠の存在の代わりに必要性の欠如によってこれを説明します。 一般的に、それは始まりました。 mPDF、fpdf、tcpdf、dom_pdf。 彼はmPDFを初めて試しました。スタイルに合わせて踊ることなく、他のレイアウトよりも正確にレイアウトを処理しましたが、残念ながら、開封時の自動印刷のスクリプトはサポートしていませんでした。 dom_pdfを保存し、オープニングで完全なコンプライアンスと自動印刷を実現しました。 pdfで問題を解決するときの怠はそれとは何の関係もないことを自分に証明したので、他の解決策を探し始めました。



要点をつかもう!



Windows XPにインストールされたFirefoxファイルを調べてみると、prefs.jsファイルを見つけることができます。 コンテンツをすばやく検索すると、求めているものと非常に類似したパラメーターの存在が示されました。



user_pref("print.printer_\\\\--\\HP_Universal_Printing_PCL_5.print_footerleft", ""); user_pref("print.printer_\\\\--\\HP_Universal_Printing_PCL_5.print_margin_right", "0");
      
      





そのような行がいくつかあります。



グーグルの「cmd replace text」などを開始する賢い方法は考えていませんでした。 コンソールユーティリティでもgsar、fartが見つかりました。 人生の意味は、ファイル内のテキストを目的のテキストに置き換えることです。 しかし、解決できない2つの問題がありました。引用符を含む文字列をどのように渡すか、およびどの文字列を置換のために探すかです。



これが、VBScriptの世界を少し見た方法です。



 REM       prefs.js  Firefox ' ProcessKillLocal.vbs ' Sample VBScript to kill a program ' Author Guy Thomas http://computerperformance.co.uk/ ' Version 2.7 - December 2010 ' ------------------------ -------------------------------' Dim objWMIService, objProcess, colProcess Dim strComputer, strProcessKill strComputer = "." strProcessKill = "'firefox.exe'" Set objWMIService = GetObject("winmgmts:" _ & "{impersonationLevel=impersonate}!\\" _ & strComputer & "\root\cimv2") Set colProcess = objWMIService.ExecQuery _ ("Select * from Win32_Process Where Name = " & strProcessKill ) For Each objProcess in colProcess objProcess.Terminate() Next WSCript.Echo "Just killed process " & strProcessKill _ & " on " & strComputer REM ---------------- ------------------------- Const ForReading = 1 Const ForWriting = 2 set re = New RegExp re.IgnoreCase = true re.Global = true re.Multiline = true REM   .         APPDATA Set objFSO = CreateObject("Scripting.FileSystemObject") Set oShell = CreateObject( "WScript.Shell" ) appdir=oShell.ExpandEnvironmentStrings("%APPDATA%") Set objFile = objFSO.OpenTextFile(appdir & "\Mozilla\Firefox\profiles.ini", ForReading) profile_str = objFile.ReadAll objFile.Close re.Pattern = "(Profiles/.+\w)$" Set mt = re.Execute(profile_str) profile_path = mt(0).Value ReDim PrefsFile(4) PrefsFile(0) = appdir PrefsFile(1) = "\Mozilla\Firefox\" PrefsFile(2) = profile_path PrefsFile(3) = "\prefs.js" strFileName = Join(PrefsFile, "") Set objFile = objFSO.OpenTextFile(strFileName, ForReading) strText = objFile.ReadAll objFile.Close REM "(\.print_margin_bottom"", "")(.+)(""\);)$" -  .print_margin_bottom", "0"); Dim SearchPtStr(6) SearchPtStr(0) = "print_footercenter" SearchPtStr(1) = "print_footerleft" SearchPtStr(2) = "print_footerright" SearchPtStr(3) = "print_headercenter" SearchPtStr(4) = "print_headerleft" SearchPtStr(5) = "print_headerright" For Each str In SearchPtStr re.Pattern = "(\." & str & """, "")(.+)(""\);)$" Set myMatches = re.Execute(strText) For Each myMatch in myMatches If Len(myMatch.Value)>1 Then strText = re.Replace(strText, "$1$3") End if Next Next Dim SearchPtInt(4) SearchPtInt(0) = "print_margin_bottom" SearchPtInt(1) = "print_margin_left" SearchPtInt(2) = "print_margin_right" SearchPtInt(3) = "print_margin_top" For Each str In SearchPtInt re.Pattern = "(\." & str & """, "")(.+)(""\);)$" Set myMatches = re.Execute(strText) For Each myMatch in myMatches If Len(myMatch.Value)>1 Then strText = re.Replace(strText, "$10$3") End if Next Next Set objFile = objFSO.OpenTextFile(strFileName, ForWriting) objFile.WriteLine strText objFile.Close
      
      







スクリプトの最初の部分で、firefox.exeプロセスを終了します。終了すると、prefs.jsが上書きされるためです。 このコードスニペットはグーグルで検索され、ほとんど変更されていません。

スクリプトの次の部分では、Application Data \ Mozilla \ Firefox \ profiles.iniファイルを読み取り、

プロファイルパスが保存されている場所で、profile_pathに保存します。 次に、このパスに沿って、設定ファイルの内容をstrText変数に読み込みます。 次に、ループと正規表現を使用して

"(\。"&str& "" "、" ")(。+)(" "\);)$"
次のような行を見つけます

".print_margin_bottom"、 "0"); "




(プリンタの数に応じて、設定ファイルにこのような行が多数存在する可能性があります)。 見つかったオカレンスを、文字列パラメーター(ヘッダーとフッター)の場合は$ 1 $ 3に、数値パラメーターの場合は$ 10 $ 3に置き換えます。 つまり 空の引用符または引用符で0を作成します。

ファイルに戻す置換後の文字列。



プログラムには奇妙な場所があります:

If Len(myMatch.Value)>1 Then

strText = re.Replace(strText, "$1$3")

End if







re.Global = trueで、この正規表現が空の一致に遭遇した場合、それらを置き換えると、設定ファイルが血まみれになります。 除外する条件が追加されます。 正規表現のエラーが疑われますが、この問題を自分で解決することはできませんでした。



スクリプト(たとえば、rem_headers_ff.vbs)を呼び出し、コマンドラインから実行できます。

cscript rem_headers_ff.vbs









これは元の問題をどのように解決しますか?



IEのフッター設定はレジストリに保存され、プログラムで簡単に変更できます。

上書きすることを学んだFF設定。

何らかの理由で、私以外は誰もChromeを使用していません。

あと1つ小さなステップがあります-Operaの問題を解決します。



All Articles