既存の PDF を開いて、個々のページが A4 かどうかを確認する小さなアプリケーションを作成しています。ページが A4 でない場合は、A4 に変換します。
私は今2つの問題に直面しています:
- PDFのページがA4かどうかを確認するには?
- A4 以外のページを A4 に変換する際、A4 ページの枠外のテキストは省略されます。したがって、コンテンツの一部が失われます。
この 2 つの問題を回避するにはどうすればよいですか?
既存の PDF を開いて、個々のページが A4 かどうかを確認する小さなアプリケーションを作成しています。ページが A4 でない場合は、A4 に変換します。
私は今2つの問題に直面しています:
この 2 つの問題を回避するにはどうすればよいですか?
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
クラスが返す列挙型です。
PageFormat
class は非常に長いですが、シンプルでここに投稿するのはばかげているでしょう。その長さは約 500 行です。どのクラスが何をするのか、指定された寸法が公式の A、B、または C ページ形式に対応しているかどうかをチェックし、形式の名前を返します。
2 番目の質問については、こちらをご覧ください。そこにはJavaコードがありますが、アイデアを得る必要があると思います。
@masius は、メソッドを使用してページのサイズを取得する方法を回答ですでに示していますGetPageSizeWithRotation
。
ただし、そのメソッドによって返されるサイズは、ページ ディクショナリの/UserUnitエントリによって実際にスケーリングされる可能性があることも考慮してください。によって返される寸法はGetPageSizeWithRotation
、/UserUnitの値に 1 / 72 インチを掛けたものであり、その値のデフォルトは 1.0 です。
@masius が参照する「iText: 1 ページの pdf のサイズを正常に変更できますが、pdf ドキュメントに複数のページがある場合は失敗します」という質問への回答で示されているソリューションは、すべてのインタラクティブ機能 (Acroform フィールドおよびその他の注釈) を削除するため、やや最適ではありません。 .
ページ メディアボックスを拡張してアスペクト比を A4 フォーマットにし、/UserUnitページ ディクショナリ エントリを使用してページをスケーリングすることを提案します。