20

PDFドキュメントiTextSharpの内容を読むために使用しています:

PdfReader reader = new PdfReader(pdfPath);
using (StringWriter output = new StringWriter())
{
    for (int i = 1; i <= reader.NumberOfPages; i++)
        output.WriteLine(PdfTextExtractor.GetTextFromPage(reader, i, new SimpleTextExtractionStrategy()));

    reader.Close();
    pdfText = output.ToString();
}

99%の場合、問題なく動作します。ただし、この例外をスローすることがあるPDFファイルが 1 つあります。

PDF ヘッダー署名が見つかりません。StackTrace:リーダーで iTextSharp.text.pdf.PdfReader..ctor(String filename, Byte[]> ownerPassword)で iTextSharp.text.pdf.PdfReader.ReadPdf()

iTextSharp.text.pdf.PRTokeniser.CheckPdfHeader() で 。 PDF.DownloadPdf(String url) in

厄介なのは、常にエラーを再現できるとは限らないことです。うまくいくこともあれば、うまくいかないこともあります。誰かがこの問題に遭遇しましたか?

4

4 に答える 4

24

調査の結果、この問題はPDF生成中にファイルが破損しているか、iTextSharpに実装されているPDF標準に準拠していないドキュメント内のオブジェクトに関連するエラーに関連していることがわかりました。また、ディスクからPDFファイルを読み取った場合にのみ発生するようです。

問題の完全な解決策は見つかりませんでしたが、回避策のみが見つかりました。私が行ったことは、PdfReader itextsharpオブジェクトを使用してPDFドキュメントを読み取り、通常の操作でファイルを読み取る前にエラーまたは例外が発生するかどうかを確認することです。

したがって、これに似たものを実行します。

private bool IsValidPdf(string filepath)
{
    bool Ret = true;

    PdfReader reader = null;

    try
    {
        reader = new PdfReader(filepath);
    }
    catch
    {
        Ret = false;
    }

    return Ret;
}
于 2012-05-20T19:50:59.487 に答える