C# 使用ItextSharp将pdf精确等分

C# 使用ItextSharp将pdf精确等分,c#,itextsharp,C#,Itextsharp,我试图将一个PDF文件分成正好相等的两部分,分别保存为“LeftPDF.PDF”和“RightPDF.PDF” 我尝试了下面的代码,但不起作用: PdfReader reader = new PdfReader(filepath); int n = reader.NumberOfPages; iTextSharp.text.Rectangle psize = reader.GetPageSize(1); float width = psize.Width/2; float height = ps

我试图将一个PDF文件分成正好相等的两部分,分别保存为“LeftPDF.PDF”和“RightPDF.PDF”

我尝试了下面的代码,但不起作用:

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

我怎样才能做到这一点呢?

正如我在评论中指出的,您的问题之前已经发布并得到了回答。这是你问题的另一个重复:

仔细看一下这个例子:

在本例中,我们询问
PdfReader
实例第一页的页面大小,并创建一个宽度相同、高度只有一半的新矩形

然后,我们导入文档中的每个页面,并在不同页面上添加两次:

  • 一旦在奇数页上使用负值
    y
    显示原始页的上半部分
  • 在y=0的偶数页上显示一次,以显示原始页的下半部分
由于原始文档中的每一页都有不同的大小,我们可能需要为每两个新页面更改页面大小

本例将页面分为两部分,一部分为上半部分,另一部分为下半部分。使用简单的数学,你可以修改这个例子,把它分成两部分,一部分是左,一部分是右。这在示例中完成:

例如:

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

您应该可以修改此示例,以便创建不同的PDF文档,而不是包含左右部分的PDF文档。如果这对您来说有问题,请发布另一个问题。

您好,谢谢您的回复。实际上,我正在尝试垂直分割pdf,就像| L部分页面| |右侧部分页面|。上面的代码将页面分为上半部分和下半部分
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);
}