0

iTextに問題があります。(具体的には、iTextSharp。) 1 つの大きな PDF ファイルを小さなファイルの束に分割しようとしています。それは問題ではありません。それが機能します。

私が見つけたのは、入力PDFファイルに埋め込まれているフォントの一部(1つだけ;残りは問題なく埋め込まれたままです)が、出力PDFファイルに埋め込まれなくなったことです。 iTextでコピーされているにもかかわらず。

最終的に、この出力 PDF ファイルは読み取り可能であり、Adobe Reader で開くと、「フォント 'ZurichBT-BoldItalic' には不正な /BBOX が含まれています。」というエラーが表示されます。元の入力ファイルに問題はありません。

理由がよくわかりません。

以下は、入力 PDF を単純にコピーするテスト ケース アプリケーションです。機密情報が含まれているため、私自身の入力 PDF のサンプルを提供することはできませんが、コードだけで答えられない場合は、小さくて単純なファイルで再現する方法についてすぐに確認します。


using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.IO;

using iTextSharp;
using iTextSharp.text;
using iTextSharp.text.pdf;

static void Main(string[] args)
{
    PdfReader reader = new PdfReader("input.pdf");

    Document doc = new Document();
    PdfSmartCopy writer = new PdfSmartCopy(doc, new FileStream("output.pdf", fileMode.OpenOrCreate, FileAccess.Write));

    doc.Open();

    for (int i = 1; i <= reader.NumberOfPages; i++)
    {
        //byte[] page = reader.GetPageContent(i);
        //string data = ExtractTextFromPDFBytes(page);
        if (true)//data.Contains("Search Token"))
        {
            doc.SetPageSize(reader.GetPageSizeWithRotation(i));
            doc.NewPage();
            PdfImportedPage iPage = writer.GetImportedPage(reader, i);
            writer.AddPage(iPage);
        }
    }
    doc.Close();
}

何か案は?:)

詳細情報を編集

私が使用していた入力 pdf の別のコピーを取得したところ、問題は入力 pdf にあるようですが、元の入力 pdf には Adob​​e Reader によって検出されるエラーはありません。正確なファイルを共有できないため、これが難しくなっていますが、これがどのように発生したかについて誰かが理論を持っているかどうか疑問に思っています? iText の pdfCopy または pdfSmartCopy 関数を実行した後に出力 PDF で明らかになる、ソース PDF では明らかでないファイルの破損またはエラー?

4

1 に答える 1

0

元のソース ファイルには明らかなエラーはありませんでしたが、これは入力 PDF の破損が原因であることが判明しました。BlackShadows が示すように、コードは問題ありません。元のソース ファイルの別のコピーを処理すると、正しい出力が得られました。

于 2012-08-14T23:40:04.617 に答える