2014-12-22 4 views
-1

PDF를 정확히 2 등분하여 "LeftPDF.pdf"및 "RightPDF.pdf"로 저장하려고합니다. ItextSharp를 사용하여 pdf exact equal half를 나눕니다.

나는 아래의 코드를 시도했지만 작동하지 않습니다 :
PdfReader reader = new PdfReader(filepath); 
int n = reader.NumberOfPages; 
iTextSharp.text.Rectangle psize = reader.GetPageSize(1); 
float width = psize.Width/2; 
float height = psize.Height; 
Document document = new Document(psize); 
// target.pdf is A5 Portrait format 
PdfWriter writer = PdfWriter.GetInstance(document, new FileStream(splitpath, FileMode.Create)); 
document.Open(); 
PdfContentByte cb = writer.DirectContent; 
document.NewPage(); 
PdfImportedPage page1 =writer.GetImportedPage(reader, 1); 
cb.AddTemplate(page1, 1, 0, 0, 1, 0, 0); 
document.Close(); 

나는이 어떻게 할 수

?

답변

-1

내 의견에 언급했듯이 귀하의 질문은 게시되어 이전에 답변되었습니다. Divide one page PDF file in two pages PDF file

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으로 표시하면 원본 페이지의 아래쪽 절반이 표시됩니다.

원본 문서의 모든 페이지가 다른 크기를 가질 수 있으므로 새로운 몇 개의 페이지마다 페이지 크기를 변경해야 할 수도 있습니다.

이 예에서는 위쪽과 아래쪽이 2 개인 페이지를 자릅니다. 간단한 수학을 사용하고 예제를 왼쪽 및 오른쪽 부분으로 두 개로자를 수 있습니다. 이것은 예를 TileInTwo2로 수행됩니다

예를 들면 : 당신은 다른 PDF 문서 대신 왼쪽과 오른쪽 부분을 포함하는 하나의 생성되도록이 예제를 적응 아무 문제가 없어야합니다

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, 0); 
     document.newPage(); 
     content.addTemplate(page, -mediabox.getWidth(), 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/2, height); 
} 

. 문제가있는 경우 다른 질문을 올리십시오.

+0

안녕하세요, 귀하의 회신을 보내 주셔서 감사합니다 사실 나는 PDF 파일을 세로로 나누기 위해 노력하고 있습니다 | L 파트 페이지 | | 오른쪽 파트 페이지 |. 위 코드를 위 부분과 아래 부분으로 나누는 코드 – Narasappa