【发布时间】:2011-04-20 21:10:29
【问题描述】:
我想要的是:给定一个 10 页的 pdf 文件,我想在网络上的表格中显示该 pdf 的每一页。实现这一目标的最佳方法是什么?我想一种方法是将这个 10-pages-pdf-file 拆分为 10 个 1-pages pdf,并以编程方式将每个 pdf 显示到表格的一行上。我可以用 iText 做到这一点吗?有没有更好的方法来做到这一点?
【问题讨论】:
我想要的是:给定一个 10 页的 pdf 文件,我想在网络上的表格中显示该 pdf 的每一页。实现这一目标的最佳方法是什么?我想一种方法是将这个 10-pages-pdf-file 拆分为 10 个 1-pages pdf,并以编程方式将每个 pdf 显示到表格的一行上。我可以用 iText 做到这一点吗?有没有更好的方法来做到这一点?
【问题讨论】:
使用PDDocument,您可以非常轻松地做到这一点。
您只需要使用PDDocument 类型的Java List 和Splitter 函数来拆分文档。
List<PDDocument> Pages=new ArrayList<PDDocument>();
PDDocument.load(filePath);
try {
Splitter splitter = new Splitter();
Pages = splitter.split(document);
}
catch(Exception e) {
e.printStackTrace(); // print reason and line number where error exist
}
【讨论】:
来自Split a PDF file (using iText)
import java.io.FileOutputStream;
import com.lowagie.text.Document;
import com.lowagie.text.pdf.PdfCopy;
import com.lowagie.text.pdf.PdfImportedPage;
import com.lowagie.text.pdf.PdfReader;
public class SplitPDFFile {
/**
* @param args
*/
public static void main(String[] args) {
try {
String inFile = args[0].toLowerCase();
System.out.println ("Reading " + inFile);
PdfReader reader = new PdfReader(inFile);
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(reader.getPageSizeWithRotation(1));
PdfCopy writer = new PdfCopy(document, new FileOutputStream(outFile));
document.open();
PdfImportedPage page = writer.getImportedPage(reader, ++i);
writer.addPage(page);
document.close();
writer.close();
}
}
catch (Exception e) {
e.printStackTrace();
}
/* example :
java SplitPDFFile d:\temp\x\tx.pdf
Reading d:\temp\x\tx.pdf
Number of pages : 3
Writing d:\temp\x\tx-001.pdf
Writing d:\temp\x\tx-002.pdf
Writing d:\temp\x\tx-003.pdf
*/
}
}
许多 iText 示例here。
【讨论】:
我无法发表评论,但这一行在投票最多的答案中
Document document = new Document(reader.getPageSizeWithRotation(1));
应该是
Document document = new Document(reader.getPageSizeWithRotation(i+1));
如果其他页面的页面大小不同,则获取正确的 pdf 大小(它知道这种情况很少见)
【讨论】: