将一页PDF文件分为两页PDF文件

时间:2014-11-19 08:08:15

标签: c# pdf itextsharp

我使用iTextSharp来处理pdf文件。我想知道如何将页面分成两半并从两个页面中分成2个不同的页面。我尝试了很多,但现在似乎没有任何工作。

首先尝试

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));

还有其他几个人。结果总是一样的:我的文件只有原始页面的后半部分。

1 个答案:

答案 0 :(得分:2)

我不明白你的代码片段,但是又一次:也许你也不理解它们,所以我们不要看你到目前为止所写的内容,让我们仔细看看{{3}例子:

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的偶数页面上显示原始页面的下半部分。

由于原始文档中的每个页面都可以有不同的大小,我们可能需要更改每个新页面的页面大小。