PDFページからxy座標で指定された領域を抽出したい。抽出された領域は、新しい pdf ドキュメントのページとして保存される場合があります。これは数回行う必要があるため、プロセスをスクリプト化する必要があります。これを行うのに役立つツール/ライブラリはありますか?
3 に答える
iText (Java 用) または iText(Sharp) (.Net 用) が受け入れ可能なライブラリである場合、それらを使用して、PDF から既存のページをインポートし、そのセクションを別の PDF に表示することができます。
iText in Action — 2nd Editionの第 6 章のTilingHero.java / TilingHero.csの例を見てください。中心的なコードは次のとおりです。
PdfImportedPage page = writer.getImportedPage(reader, 1);
// adding the same page 16 times with a different offset
float x, y;
for (int i = 0; i < 16; i++) {
x = -pagesize.getWidth() * (i % 4);
y = pagesize.getHeight() * (i / 4 - 3);
content.addTemplate(page, 4, 0, 0, 4, x, y);
document.newPage();
}
ご覧のとおり、元のページが 1 回インポートされ、そのさまざまなセクションがさまざまなページに表示されます。
(iText と iTextSharp は、無料で --- AGPL に従って --- または商用で利用できます)
を使用するghostscript
と、次の方法で pdf をトリミングできます。
gs -f original.pdf -o final.pdf -sDEVICE=pdfwrite \
-c "[/CropBox [x-left y-bottom x-right y-top] /PAGES pdfmark"
x-left
、y-bottom
など、座標は必要な座標に置き換えることができます。gs
の場合、座標(0, 0)
はページの左下にあることに注意してください。
これは簡単にスクリプト化できます。
このタスクを実行するには、「pdftoppm」を使用できます。
pdftoppm -f <first page> -l <last page> -jpeg -x <start x> -y <start y> -W <width> -H <height> -jpeg <in file> > <out file>
たとえば、トリミング領域の左上隅である点 (x,y) = (100,200) から最初の PDF ページの領域を、幅 50、高さ 80 でトリミングし、JPEG に保存します。ファイルは次を使用して行われます。
pdftoppm -f 1 -l 1 -jpeg -x 100 -y 200 -W 50 -H 80 'my.pdf' > 'crop.jpg'
ドキュメントの解像度に問題がある場合は、'pdftoppm' の '-r' オプションを使用できます (詳細については、'pdftoppm' のマニュアル ページを参照してください)。
確かに、必要に応じて JPEG ファイルを PDF に簡単に変換できます。