Я использую itextpdf версии 5.0.1 для разбивки страниц на указанные номера страниц. У меня проблема, когда я пытаюсь вырезать PDF, который ориентирован в ландшафте. Когда я использую следующий код, ориентированные на ландшафт pdf-файлы становятся обрезанными, как pdf-файл, ориентированный на портреты, а остальное отсутствует. Код я использую:iText Ориентация в PDF
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import com.itextpdf.text.Document;
import com.itextpdf.text.pdf.PdfContentByte;
import com.itextpdf.text.pdf.PdfImportedPage;
import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.PdfWriter;
public class PDFSplitExample {
static void splitPdfFile(InputStream inputPdf,
OutputStream outputStream, int startPage,
int endPage) throws Exception{
//Create document and pdfReader objects.
Document document = new Document();
PdfReader pdfReader = new PdfReader(inputPdf);
//Get total no. of pages in the pdf file.
int totalPages = pdfReader.getNumberOfPages();
//Check the startPage should not be greater than the endPage
//and endPage should not be greater than total no. of pages.
if(startPage > endPage || endPage > totalPages) {
System.out.println("Kindly pass the valid values " +
"for startPage and endPage.");
}else{
// Create writer for the outputStream
PdfWriter writer =
PdfWriter.getInstance(document, outputStream);
//Open document
document.open();
//Contain the pdf data.
PdfContentByte pdfContentByte =
writer.getDirectContent();
PdfImportedPage page;
while(startPage <= endPage) {
document.newPage();
page=writer.getImportedPage(pdfReader, startPage);
pdfContentByte.addTemplate(page, 0, 0);
startPage++;
}
//Close document and outputStream.
outputStream.flush();
document.close();
outputStream.close();
}
}
public static void main(String args[]){
try {
//Prepare output stream for
//new pdf file after split process.
OutputStream outputStream1 =
new FileOutputStream("SplitFile1.pdf");
OutputStream outputStream2 =
new FileOutputStream("SplitFile2.pdf");
//call method to split pdf file.
splitPdfFile(new FileInputStream("TestFile.pdf"),
outputStream1, 1, 10);
splitPdfFile(new FileInputStream("TestFile.pdf"),
outputStream2, 11, 20);
System.out.println("Pdf file splitted successfully.");
} catch (Exception e) {
e.printStackTrace();
}
}
}
Для вашей задачи вы действительно должны использовать 'реализации на основе PdfCopy' (которые среди других преимуществ не требует, чтобы контролировать вращение страницы) вместо ваших' PdfWriter' основе один. – mkl
Я не могу получить то, что вы пытаетесь сказать. Не могли бы вы объяснить это более подробно? –