あなたの問題に対する答えは見つかりましたか?私は今週、同じシナリオに直面しています。
ヘッダー、フッター、およびフォームを含む標準のレター サイズ (8.5" x 11") の PDF A があります。その PDF の生成を制御できないため、ヘッダーとフッターが少し汚れているため、それらを削除する必要があります。私の最初のアプローチは、フォームをボックス (どのタイプのボックスでも機能します) に抽出し、それを新しい PDF ページとしてエクスポートすることでした。問題は、私の新しい Box が特定のサイズ (たとえば 6" x 7") であり、ドキュメントを徹底的に調査した後、それを 8.5" x 11" の PDF B に埋め込む方法を見つけることができなかったことです。出力 PDF は、私の Box と同じサイズでした。すべてのシナリオで、適切なサイズの空白の PDF ファイルが生成されるか、フォームが含まれているがサイズが間違っている PDF が生成されます。
その後、別のアプローチを使用するしかありませんでした。あまりきれいではありませんが、PDF を操作するときは、ブラック マジックと回避策が主なトピックです。元の PDF A を残し、不要な部分をすべて消去しました。つまり、長方形を作成し、それらを白で塗りつぶし、隠したいセクションを覆いました。結果は、私のフォームのみを含む、適切な次元の PDF ファイルです。万歳!技術的には、ヘッダーとフッターはまだページに存在しており、実際にそれらを削除する方法はありませんでした。私はそれらを非表示にすることしかできませんでした (機密データを非表示にしない限り、これはエンド ユーザーに何の違いもありません)。
あなたの質問が 2 年前に送信されたことは承知していますが、私の質問に対する適切な回答をオンラインで見つけるのに非常に苦労しました。そのため、ここでコミュニティに恩返しをし、将来の開発者が時間を節約できるように支援できることを願っています。ボックスを抽出して標準サイズのページに埋め込む方法を実際に見つけた場合は、回答を投稿してください。
ちなみに私のコードは次のとおりです。
import org.apache.pdfbox.exceptions.COSVisitorException;
import org.apache.pdfbox.pdmodel.*;
import org.apache.pdfbox.pdmodel.edit.PDPageContentStream;
import java.awt.Color;
import java.io.*;
import java.util.List;
// This code doesn't actually extract PDF elements per say
// It fills 2 rectangles in white to hide the header and the footer of our PDF page
public class ex {
// Arbitrary values obtained in a very obscure way
static int PAGE_WIDTH = 615;
static int PAGE_HEIGHT = 815;
@SuppressWarnings("unchecked")
public static void main(String[] args) throws IOException, COSVisitorException {
File inputFile = new File("C:\\input.pdf");
File outputFile = new File("C:\\output.pdf");
PDDocument inputDoc = PDDocument.load(inputFile);
PDDocument outputDoc = new PDDocument();
List<PDPage> pages = inputDoc.getDocumentCatalog().getAllPages();
PDPageContentStream pageCS = null;
// Lets paint our pages white !
for (PDPage page : pages) {
pageCS = new PDPageContentStream(inputDoc, page, true, false);
pageCS.setNonStrokingColor(Color.white);
// Top rectangle
pageCS.fillRect(0, 0, PAGE_WIDTH, 30);
// Bottom rectangle
pageCS.fillRect(0, PAGE_HEIGHT-30, PAGE_WIDTH, 30);
pageCS.close();
outputDoc.addPage(page);
}
// Save to file
outputFile.delete();
outputDoc.save(outputFile);
// Wait until the end to close all documents, or else you get an error
inputDoc.close();
outputDoc.close();
}
}