3

Adobe IFilterは、パスワードで保護されたPDFファイルを開くためのパスワードを提供するメカニズムを提供していないため、パスワードで保護されたファイルを開くために使用することはできません。

PDFファイル内の実際の暗号化データをプログラムで取得し、標準の暗号化APIを使用して復号化し、復号化されたデータを使用して新しいPDFファイルを作成する比較的簡単な方法はありますか?

4

2 に答える 2

2

パスワードで保護されたPDFを開くには、少なくともPDFパーサー、復号化、およびジェネレーターを開発する必要があります。ただし、そうすることはお勧めしません。達成するのは簡単な作業にはほど遠いです。

PDFライブラリの助けを借りて、すべてがはるかに簡単になります。タスクにDocotic.Pdfライブラリを試してみることをお勧めします(免責事項:私はライブラリのベンダーで働いています)。

これがあなたのタスクのサンプルです:

public static void unprotectPdf(string input, string output)
{
    bool passwordProtected = PdfDocument.IsPasswordProtected(input);
    if (passwordProtected)
    {
        string password = null; // retrieve the password somehow

        using (PdfDocument doc = new PdfDocument(input, password))
        {
            // clear both passwords in order
            // to produce unprotected document
            doc.OwnerPassword = "";
            doc.UserPassword = "";

            doc.Save(output);
        }
    }
    else
    {
        // no decryption is required
        File.Copy(input, output, true);
    }
}

Docotic.Pdfは、PDFからテキスト(フォーマットされているかどうかに関係なく)を抽出することもできます。インデックス作成に役立つ場合があります(Adobe IFilterについて言及したので、これで問題ないと思います)

于 2012-06-06T06:10:08.840 に答える
2

SpirePDF を使用すると、次のように暗号化された PDF からページの画像を取得できます。

using System;
using System.Drawing;
using Spire.Pdf;
namespace PDFDecrypt
{
    class Decrypt
    {
        static void Main(string[] args)
        {
            //Create Document
            String encryptedPdf = @"D:\work\My Documents\Encryption.pdf";
            PdfDocument doc = new PdfDocument(encryptedPdf, "123456");

            //Extract Image
            Image image = doc.Pages[0].ImagesInfo[0].Image;

            doc.Close();

            //Save
            image.Save("EmployeeInfo.png", System.Drawing.Imaging.ImageFormat.Png);

            //Launch
            System.Diagnostics.Process.Start("EmployeeInfo.png");
        }
    }
}
于 2012-06-05T23:48:57.423 に答える