Я знаю, что мой ответ немного опоздал.Но я использую следующий код для чтения определенных страниц из файлов PDF.У меня не было проблем с чтением столбцов, без объединенного текста, каждый столбец печатается отдельно от другого.
/**
* Get plain text from a specific page in a pdf file.
* @param pdfPath
* @return
* @throws IOException
*/
public static String getPageContent(String pdfPath, int pageNumber) throws IOException
{
PdfReader reader = new PdfReader(pdfPath);
StringWriter output = new StringWriter();
try {
output.append(PdfTextExtractor.getTextFromPage(reader, pageNumber, new SimpleTextExtractionStrategy()));
} catch (OutOfMemoryError e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return output.toString();
}
Если вы хотите извлечь часть страницы, скажем, только 1 столбец,тогда вам нужно получить размеры столбца.Это все еще немного сложно, но вы могли бы понять это, если вы уже знали начальный текст столбца (таким образом, чтобы оценить ширину и высоту).Это можно сделать с помощью прямоугольной области.Смотрите код ниже, и извините, если я неправильно понял точку.В приведенном ниже коде я пытаюсь получить измерение всей страницы.
public static String getPageContent(String pdfPath, int pageNumber) throws IOException
{
PDDocument pdDoc = PDDocument.load(pdfPath);
PDPage specPage = (PDPage)pdDoc.getDocumentCatalog().getAllPages().get( 0 );
PDFTextStripperByArea stripper = new PDFTextStripperByArea();
stripper.setSortByPosition( true );
float width = (specPage.getMediaBox().getHeight())*25.4f;
float height = (specPage.getMediaBox().getWidth())*25.4f;
Rectangle rect = new Rectangle( 0, 0, Math.round(width), Math.round(height));
stripper.addRegion( "class1", rect );
List allPages = pdDoc.getDocumentCatalog().getAllPages();
PDPage firstPage = (PDPage)allPages.get( pageNumber-1 );
stripper.extractRegions( firstPage );
return stripper.getTextForRegion( "class1" );
}