1

Visual Studio 2010 で C# を使用して iTextSharp を使用していますが、最近次のような状況に遭遇しました。多数の PDF ファイルに分割された複数の電子ブックを受け取りました。これらのファイルには境界線にゲラ マークが含まれており、次のコードを使用してそれらを削除しました。

    x = reader.GetPageSize(i).Width;
    y = reader.GetPageSize(i).Height;
    iTextSharp.text.Rectangle tRect = 
      new iTextSharp.text.Rectangle(x - 52, y - 52);
    Document document = new Document(tRect);
    PdfWriter writer = PdfWriter.GetInstance(document, 
      new FileStream(dest, FileMode.OpenOrCreate));

    document.Open();
    PdfContentByte content = writer.DirectContent;
    PdfImportedPage page = writer.GetImportedPage(reader, i);

    content.AddTemplate(page, -offset, -offset);

    document.NewPage();

    document.SetMargins(0, 0, 0, 0);
    document.Close();
    reader.Close();

もちろん、これは i を序数とする For ループで囲まれています。作業中の部分の各ページを反復処理した後、次のコードを使用してそれらをマージします。

    private void mergePDF(string fName, string folderPath)
    {
        string[] files = Directory.GetFiles(folderPath);
        iTextSharp.text.Document tDoc = new iTextSharp.text.Document();
        iTextSharp.text.pdf.PdfCopy copy = 
          new iTextSharp.text.pdf.PdfCopy(tDoc, 
            new FileStream(fName, FileMode.Create));
        tDoc.Open();
        iTextSharp.text.pdf.PdfReader reader;
        int n = 0;
        for (int i = 0; i < files.Length; i++)
        {
            reader = new iTextSharp.text.pdf.PdfReader(files[i]);
            n = reader.NumberOfPages;
            for (int page = 0; page < n; )
            {
                copy.AddPage(copy.GetImportedPage(reader, ++page));
            }
            copy.FreeReader(reader);
            reader.Close();
        }
        tDoc.Close();
    }        

これが完了すると、ファイル サイズが 2 倍になっていることがわかりました (特に 1 つのファイルは、処理前は 20,180 KB、処理後は 41,322 KB でした)。

iTextSharp で PDF を分割すると、分割された各 PDF に完全な PDF のすべてのフォントが埋め込まれ、ファイル サイズの 50 ~ 80% を占めているようです。

そうは言っても、iTextSharp を使用して PDF から埋め込みフォントを削除する方法を知っている人はいますか。私の計画は、それらを最初の PDF ファイルにのみ含めることです。その後、PDF が再コンパイルされると、ドキュメント内のフォントのコピーが 1 つだけになり、私のサイズがより適切になります。

また、このコードは実際のコードに近いものです。ロジックは同じですが、サイズとフローを考慮していくつかの変数が追加されています。

4

0 に答える 0