【发布时间】:2015-09-08 09:00:31
【问题描述】:
我有一个要求,我必须在垂直中心垂直分割 PDF 页面。 我搜索了各种帖子,但找不到正确的方法
我想通过 Java 使用 iText 库。
我使用了来自
的 SplitPDFFile.javaiText: split a PDF into several PDF (1 per page)
并像下面这样修改它,但页面没有被拆分,而是复制了整个页面。
import java.io.FileOutputStream;
import com.itextpdf.text.Document;
import com.itextpdf.text.Rectangle;
import com.itextpdf.text.pdf.PdfCopy;
import com.itextpdf.text.pdf.PdfImportedPage;
import com.itextpdf.text.pdf.PdfReader;
public class SplitPDFFile {
/**
* @param args
*/
public static void main(String[] args) {
try {
String inFile = "C:/input.pdf";
System.out.println ("Reading " + inFile);
PdfReader reader = new PdfReader(inFile);
Rectangle cropBox = reader.getCropBox(1);
Rectangle psize = reader.getPageSize(1);
cropBox.setRight(psize.getWidth()/2);
System.out.println(psize.getWidth());
System.out.println(psize.getHeight());
int n = reader.getNumberOfPages();
System.out.println ("Number of pages : " + n);
int i = 0;
while ( i < n ) {
String outFile = inFile.substring(0, inFile.indexOf(".pdf"))
+ "-" + String.format("%03d", i + 1) + ".pdf";
System.out.println ("Writing " + outFile);
Document document = new Document(cropBox);
PdfCopy writer = new PdfCopy(document, new FileOutputStream(outFile));
writer.setCropBoxSize(cropBox);
document.open();
PdfImportedPage page = writer.getImportedPage(reader, ++i);
writer.addPage(page);
document.close();
writer.close();
}
}
catch (Exception e) {
e.printStackTrace();
}
}
}
【问题讨论】:
-
原来的要求是在中心垂直分割单页,并将LHS复制到第一页,将RHS复制到第二页并保存到输出文件。
-
PdfCopy用于将页面原样复制到新的 PDF,即最常见的 PDF 合并用例。因此,您预先设置的裁剪框将被忽略。 -
是否有工作代码来完成拆分?
-
通过在中心垂直分割一个PDF页面你的意思是沿着一条垂直线分割,即分成左半部分和右半部分?或者你的意思是垂直范围必须被分割,即分成下半部分和上半部分?页面轮换是否重要?
-
我的意思是将一页分成两半,LHS 应该是第一页,RHS 应该是第二页。输入的 PDF 可能包含超过 1 页,并且所有页面都应该发生相同的情况,我需要如前所述,新的 PDF 页面已重新排列。