簡體   English   中英

如何檢查PDF,DOC或DOCX文件在Ruby中是否受密碼保護?

[英]How to check if PDF, DOC or DOCX file is password protected in Ruby?

有沒有一種方法可以確定用戶上傳的文件是否受密碼保護? 我們有一種情況,我們不希望用戶在基於Ruby on Rails構建的應用程序中上載受密碼保護的文件。

文件類型將為PDF或Word文檔( DOCDOCX

我不知道任何可用於此類任務的Ruby庫。

但是您可以從Ruby代碼中pdftotext諸如docx2txtpdftotext類的外部工具。 對於加密文件,調用這些工具會導致將消息打印到STDERR,並返回非零退出代碼。

讓我們看一下這個演示代碼:

#!/usr/bin/env ruby
require 'open3'

file_names = ARGV   
command = ""

file_names.each do |file_name|
  case file_name
  when /.\.pdf$/i
    command = "pdftotext #{file_name} -"
  when /.\.docx$/i
    command = "docx2txt #{file_name} -"
  else
    next
  end

  stdout, stderr, status = Open3.capture3(command)

  puts "command: #{command}"
  puts "stdout:  #{stdout}"
  puts "stderr:  #{stderr}"
  puts "status:  #{status}"
  puts   
end

我為pdf和docx創建了四個文件,它們的解釋性名稱為: pass.docxpass.pdfno_pass.docxno_pass.pdf並在上述腳本中執行:

./tester.rb pass.pdf pass.docx no_pass.pdf no_pass.docx
command: pdftotext pass.pdf -
stdout:  
stderr:  Command Line Error: Incorrect password
status:  pid 5856 exit 1

command: docx2txt pass.docx -
stdout:  
stderr:  Failed to extract required information from <pass.docx>!
status:  pid 5860 exit 2

command: pdftotext no_pass.pdf -
stdout:  Hello world.
stderr:  
status:  pid 5866 exit 0

command: docx2txt no_pass.docx -
stdout:  Hello world.
stderr:  
status:  pid 5870 exit 0

至少對於PDF,如果您在沒有提供有效密碼(使用-upw參數指定)的情況下調用pdftotext則可以確定文件是否受密碼保護。 只要注意Command Line Error: Incorrect password stderr消息。

不幸的是,在那種情況下,我找不到用於docx的工具,該工具返回明確的錯誤消息-可能還有其他原因導致docx2txt無法轉換文件,並且Failed to extract required information from <pass.docx>! 消息,這將需要進一步調查。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM