如何在itext7中提取页面的一部分并写入新的PDF文件?

如何在itext7中提取页面的一部分并写入新的PDF文件?,pdf,itext7,text-extraction,Pdf,Itext7,Text Extraction,我想把一个PDF页面分成4个象限。然后将每个象限写入单独的PDF页面(或文档)。我不想裁剪现有页面,而是提取每个象限的内容并将其写入新的PDF文件。使用itext7有什么方法可以做到这一点吗?我想提一提的是,itextsharp和itext7的文档很糟糕,而且在很多方面都很缺乏——如果你愿意阅读一本书,那么《iText-in-Action第二版》是唯一的帮助,而且这些示例仅用Java编写,有些代码是用C#以不同的方式实现的,更不用说这只在iText5上 作为将来的参考-假设您需要相等的部件拆分,

我想把一个PDF页面分成4个象限。然后将每个象限写入单独的PDF页面(或文档)。我不想裁剪现有页面,而是提取每个象限的内容并将其写入新的PDF文件。使用itext7有什么方法可以做到这一点吗?

我想提一提的是,itextsharp和itext7的文档很糟糕,而且在很多方面都很缺乏——如果你愿意阅读一本书,那么《iText-in-Action第二版》是唯一的帮助,而且这些示例仅用Java编写,有些代码是用C#以不同的方式实现的,更不用说这只在iText5上

作为将来的参考-假设您需要相等的部件拆分,下面是实现该技巧的方法(适用于4x4-即16个部件):

public void操作EPDF(string src,string dest)
{  
PdfReader读取器=新PdfReader(src);
iTextSharp.text.Rectangle pagesize=reader.GetPageSizeWithRotation(1);
文档=新文档(页面大小);
PdfWriter writer=PdfWriter.GetInstance(文档,
新的文件流(dest,FileMode.OpenOrCreate,FileAccess.ReadWrite,FileShare.ReadWrite));
document.Open();
PdfContentByte content=writer.DirectContent;
PDFIImportedPage=writer.GetImportedPage(读取器,1);
浮动x,y;
对于(int i=0;i<16;i++)
{    
x=-pagesize.Width*(i%4);
y=页面大小。高度*(i/4-3);
content.AddTemplate(第4、0、0、4、x、y页);
document.NewPage();
}
document.Close();
}
“我不想裁剪现有页面,但要提取每个象限的内容并将其写入新的PDF文件”-以何种方式排除裁剪?拥有四份页面副本并分别进行裁剪应该可以,不是吗?“《iText-in-Action第二版》这本书是唯一的帮助”-如果你看看itextpdf网站,尤其是那里的知识库,你可能会感到惊讶。也就是说,您的代码是针对itext 5的,而不是针对itext 7的。
public void manipulatePdf(string src, string dest)
    {  
        PdfReader reader = new PdfReader(src);
        iTextSharp.text.Rectangle pagesize = reader.GetPageSizeWithRotation(1); 
        Document document = new Document(pagesize); 
        PdfWriter writer = PdfWriter.GetInstance(document, 
            new FileStream(dest, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite)); 
        document.Open();  
        PdfContentByte content = writer.DirectContent; 
        PdfImportedPage page = writer.GetImportedPage(reader, 1); 
        float x, y;  
        
        for (int i = 0; i< 16; i++) 
        {    
            x = -pagesize.Width * (i % 4);    
            y = pagesize.Height * (i / 4 - 3);    
            content.AddTemplate(page, 4, 0, 0, 4, x, y);    
            document.NewPage();  
        }
        document.Close(); 
    }