2012-05-04 5 views
0

iTextに問題があります。 (具体的には、iTextSharp)私は1つの大きなPDFファイルを小さなものに分割しようとしています。それは問題ではない。それは動作します。iTextでPDFをコピーすると、フォントの一部が埋め込まれないのはなぜですか?

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

最終的には、Adobe Readerで開くと、「フォント 'ZurichBT-BoldItalic'に悪い/ BBOXが含まれています」という出力可能なPDFファイルです。元の入力ファイルに問題はありません。

なぜ私は本当に理解できません。

以下は、入力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であると思われますアドビリーダー。私は正確なファイルを共有することはできませんが、これは難しいですが、どのようにこのことが起こるかについて誰かが理論を持っているのだろうかと思います。 pdfCopyまたはpdfSmartCopy関数を実行した後の出力pdfで明らかになる、ファイルの破損またはソースpdfには見られないエラー?

+1

こんにちは、自分のコードをコピーしてPDF/A-1BのPDFで試してみましょう。それは結構です。 –

答えて

0

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

関連する問題