2

既存の PDF を開いて、個々のページが A4 かどうかを確認する小さなアプリケーションを作成しています。ページが A4 でない場合は、A4 に変換します。

私は今2つの問題に直面しています:

  1. PDFのページがA4かどうかを確認するには?
  2. A4 以外のページを A4 に変換する際、A4 ページの枠外のテキストは省略されます。したがって、コンテンツの一部が失われます。

この 2 つの問題を回避するにはどうすればよいですか?

4

2 に答える 2

1

PdfReaderクラスでファイルをロードします。

 PdfReader reader = new PdfReader("path to your file");
 Rectangle rect = reader.GetPageSizeWithRotation(i); // i page number, index starts at 1
 for (int i = 1; i <= reader.NumberOfPages; i++)
 {
      Rectangle rect = reader.GetPageSizeWithRotation(i);
      var a = rect.Width;
      var b = rect.Height;
 }

A4 ポートレート形式の場合、変数はa == 595, である必要がありb == 842ます。ページの寸法については、多少の誤差があります。詳しくは。

私はそのような方法を持っています:

public static bool CheckFirstPageSizeA4Portret(Document doc)
    {

        var a = doc.PageSize.Width;
        var b = doc.PageSize.Height;
        pageFormat format = PageFormat.GetPageFormat(a, b);
        if (format == pageFormat.A4_Portret)
            return true;
        else
            return false;
    }

pageFormat静的PageFormatクラスが返す列挙型です。 PageFormatclass は非常に長いですが、シンプルでここに投稿するのはばかげているでしょう。その長さは約 500 行です。どのクラスが何をするのか、指定された寸法が公式の A、B、または C ページ形式に対応しているかどうかをチェックし、形式の名前を返します。

2 番目の質問については、こちらをご覧ください。そこにはJavaコードがありますが、アイデアを得る必要があると思います。

于 2013-01-15T06:16:50.973 に答える
0

@masius は、メソッドを使用してページのサイズを取得する方法を回答ですでに示していますGetPageSizeWithRotation

ただし、そのメソッドによって返されるサイズは、ページ ディクショナリの/UserUnitエントリによって実際にスケーリングされる可能性があることも考慮してください。によって返される寸法はGetPageSizeWithRotation/UserUnitの値に 1 / 72 インチを掛けたものであり、その値のデフォルトは 1.0 です。

@masius が参照する「iText: 1 ページの pdf のサイズを正常に変更できますが、pdf ドキュメントに複数のページがある場合は失敗します」という質問への回答で示されているソリューションは、すべてのインタラクティブ機能 (Acroform フィールドおよびその他の注釈) を削除するため、やや最適ではありません。 .

ページ メディアボックスを拡張してアスペクト比を A4 フォーマットにし、/UserUnitページ ディクショナリ エントリを使用してページをスケーリングすることを提案します。

于 2013-01-15T08:33:55.653 に答える