我使用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));
还有其他几个人。结果总是一样的:我的文件只有原始页面的后半部分。
答案 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
的偶数页面上显示原始页面的下半部分。由于原始文档中的每个页面都可以有不同的大小,我们可能需要更改每个新页面的页面大小。