2014-11-19 2 views
0

Я использую iTextSharp для обработки pdf-файлов. Я хотел бы знать, как я могу разделить страницу пополам и сделать две разные страницы из двух частей. Я много пробовал, но сейчас ничего не работает.Разделить одностраничный PDF-файл на две страницы PDF-файл

Сначала попробуйте

iTextSharp.text.Rectangle size = new iTextSharp.text.Rectangle(0, pdfReader.GetPageSize(1).Height/2, pdfReader.GetPageSize(1).Width, 0); 

Второй попробовать

iTextSharp.text.Rectangle size = pdfReader.GetPageSizeWithRotation(1); 
iTextSharp.text.Document document = new iTextSharp.text.Document(size.GetRectangle(0, size.Height/2)); 

И несколько других. Результаты всегда одни и те же: у меня есть файл с только второй половиной исходной страницы.

ответ

2

Я не понимаю ваши фрагменты кода, но опять же: возможно, вы их тоже не понимаете, поэтому давайте не будем смотреть на то, что вы написали до сих пор, и давайте более подробно рассмотрим пример TileInTwo:

public void manipulatePdf(String src, String dest) 
    throws IOException, DocumentException { 
    // Creating a reader 
    PdfReader reader = new PdfReader(src); 
    int n = reader.getNumberOfPages(); 
    // step 1 
    Rectangle mediabox = new Rectangle(getHalfPageSize(reader.getPageSizeWithRotation(1))); 
    Document document = new Document(mediabox); 
    // step 2 
    PdfWriter writer 
     = PdfWriter.getInstance(document, new FileOutputStream(dest)); 
    // step 3 
    document.open(); 
    // step 4 
    PdfContentByte content = writer.getDirectContent(); 
    PdfImportedPage page; 
    int i = 1; 
    while (true) { 
     page = writer.getImportedPage(reader, i); 
     content.addTemplate(page, 0, -mediabox.getHeight()); 
     document.newPage(); 
     content.addTemplate(page, 0, 0); 
     if (++i > n) 
      break; 
     mediabox = new Rectangle(getHalfPageSize(reader.getPageSizeWithRotation(i))); 
     document.setPageSize(mediabox); 
     document.newPage(); 
    } 
    // step 5 
    document.close(); 
    reader.close(); 
} 

public Rectangle getHalfPageSize(Rectangle pagesize) { 
    float width = pagesize.getWidth(); 
    float height = pagesize.getHeight(); 
    return new Rectangle(width, height/2); 
} 

В этом примере, мы задаем экземпляр PdfReader для размера страницы первой страницы, и мы создаем новый прямоугольник с той же шириной, и только половину высоты.

Затем импортируйте каждую страницу документа, и мы добавим его в два раза на разных страницах:

  • один раз на нечетных страницах с отрицательным y значения, чтобы показать верхнюю часть исходной страницы,
  • один раз на четных страницах с y = 0, чтобы показать нижнюю половину исходной страницы.

Поскольку каждая страница оригинального документа может иметь разный размер, нам может потребоваться изменить размер страницы для каждой новой пары страниц.

Смежные вопросы