Java 使用Itext合并PDF
我在合并由IText生成的两个PDF时遇到了一个问题 PDF创建的代码片段: 文档配置如下:Java 使用Itext合并PDF,java,itext,Java,Itext,我在合并由IText生成的两个PDF时遇到了一个问题 PDF创建的代码片段: 文档配置如下: iText_xls_2_pdf = new Document(PageSize.A4.rotate(),10,0,30,0); 使用此配置可以创建2个PDF 创建这些pdf后,需要将它们合并为单个pdf 以下代码用于合并PDF: Document document = new Document(PageSize.A4.rotate(),10,0,30,0); try { List<Inp
iText_xls_2_pdf = new Document(PageSize.A4.rotate(),10,0,30,0);
使用此配置可以创建2个PDF
创建这些pdf后,需要将它们合并为单个pdf
以下代码用于合并PDF:
Document document = new Document(PageSize.A4.rotate(),10,0,30,0);
try {
List<InputStream> pdfs = streamOfPDFFiles;
List<PdfReader> readers = new ArrayList<PdfReader>();
int totalPages = 0;
Iterator<InputStream> iteratorPDFs = pdfs.iterator();
// Create Readers for the pdfs.
while (iteratorPDFs.hasNext()) {
InputStream pdf = iteratorPDFs.next();
PdfReader pdfReader = new PdfReader(pdf);
readers.add(pdfReader);
totalPages += pdfReader.getNumberOfPages();
}
// Create a writer for the outputstream
PdfWriter writer = PdfWriter.getInstance(document, outputStream);
document.open();
BaseFont bf = BaseFont.createFont(BaseFont.HELVETICA,
BaseFont.CP1252, BaseFont.NOT_EMBEDDED);
PdfContentByte cb = writer.getDirectContent(); // Holds the PDF
// data
PdfImportedPage page;
int currentPageNumber = 0;
int pageOfCurrentReaderPDF = 0;
Iterator<PdfReader> iteratorPDFReader = readers.iterator();
// Loop through the PDF files and add to the output.
while (iteratorPDFReader.hasNext()) {
PdfReader pdfReader = iteratorPDFReader.next();
// Create a new page in the target for each source page.
while (pageOfCurrentReaderPDF < pdfReader.getNumberOfPages()) {
document.newPage();
pageOfCurrentReaderPDF++;
currentPageNumber++;
page = writer.getImportedPage(pdfReader,
pageOfCurrentReaderPDF);
cb.addTemplate(page, 0, 0);
// Code for pagination.
if (paginate) {
cb.beginText();
cb.setFontAndSize(bf, 9);
cb.showTextAligned(PdfContentByte.ALIGN_CENTER, ""
+ currentPageNumber + " of " + totalPages, 520,
5, 0);
cb.endText();
}
}
pageOfCurrentReaderPDF = 0;
}
outputStream.flush();
document.close();
outputStream.close();
} catch (Exception e) {
e.printStackTrace();
} finally {
if (document.isOpen())
document.close();
try {
if (outputStream != null)
outputStream.close();
} catch (IOException ioe) {
ioe.printStackTrace();
}
}
Document Document=新文档(PageSize.A4.rotate(),10,0,30,0);
试一试{
列出PDF=StreamofPDF文件;
列表读取器=新的ArrayList();
int totalPages=0;
迭代器迭代器DFS=pdfs.Iterator();
//为PDF创建读卡器。
while(iteratorPDFs.hasNext()){
InputStream pdf=iteratorPDFs.next();
PdfReader PdfReader=新PdfReader(pdf);
readers.add(pdfReader);
totalPages+=pdfReader.getNumberOfPages();
}
//为outputstream创建写入程序
PdfWriter writer=PdfWriter.getInstance(文档,outputStream);
document.open();
BaseFont bf=BaseFont.createFont(BaseFont.HELVETICA,
BaseFont.CP1252,BaseFont.NOT_EMBEDDED);
PdfContentByte cb=writer.getDirectContent();//保存PDF文件
//资料
PDF导入页面;
int currentPageNumber=0;
int pageOfCurrentReaderPDF=0;
Iterator IteratorPDReader=readers.Iterator();
//循环浏览PDF文件并添加到输出中。
while(iteratorPDReader.hasNext()){
PdfReader PdfReader=iteratorpdfreeader.next();
//在目标中为每个源页面创建一个新页面。
而(pageOfCurrentReaderPDF
这将创建合并的PDF。但因为我在文档配置中使用了.rotate,所以合并的pdf是横向格式的。如何避免这种情况。请查看中的表6.1,您将发现使用
PdfWriter
合并文档并没有完成。如果要合并文档,需要使用PdfCopy
例如,请参见以下问题:
PdfReader reader1 = new PdfReader(file1);
PdfReader reader2 = new PdfReader(file2);
Document document = new Document();
FileOutputStream fos = new FileOutputStream();
PdfCopy copy = new PdfCopy(document, fs);
document.open();
PdfImportedPage page;
PdfCopy.PageStamp stamp;
Phrase phrase;
BaseFont bf = BaseFont.createFont();
Font font = new Font(bf, 9);
int n = reader1.getNumberOfPages();
for (int i = 1; i <= reader1.getNumberOfPages(); i++) {
page = copy.getImportedPage(reader1, i);
stamp = copy.createPageStamp(page);
phrase = new Phrase("page " + i, font);
ColumnText.showTextAligned(stamp.getOverContent(), Element.ALIGN_CENTER, phrase, 520, 5, 0);
stamp.alterContents();
copy.addPage(page);
}
for (int i = 1; i <= reader2.getNumberOfPages(); i++) {
page = copy.getImportedPage(reader2, i);
stamp = copy.createPageStamp(page);
phrase = new Phrase("page " + (n + i), font);
ColumnText.showTextAligned(stamp.getOverContent(), Element.ALIGN_CENTER, phrase, 520, 5, 0);
stamp.alterContents();
copy.addPage(page);
}
document.close();
reader1.close();
reader2.close();
PdfReader reader1=新的PdfReader(文件1);
PdfReader reader2=新PdfReader(文件2);
文档=新文档();
FileOutputStream fos=新的FileOutputStream();
PdfCopy副本=新的PdfCopy(文件,fs);
document.open();
PDF导入页面;
PdfCopy.PageStamp;
短语;
BaseFont bf=BaseFont.createFont();
Font Font=新字体(bf,9);
int n=reader1.getNumberOfPages();
对于(int i=1;i您做得都不对,因为您没有阅读文档,或者,如果您阅读了文档,您就听从了错误的人的建议。不要使用PdfWriter
合并文档!使用PdfCopy
或PdfSmartCopy
!谢谢您,先生。这解决了我的问题。我不确定您是否可以接受一个问题的答案已经结束的问题。你能试一试吗?是的,我试过了。我现在没有足够的分数可以投票。我得到足够的分数后会投票吗接受和投票不一样。接受是检查投票下面的V标记。谢谢主席先生提供的信息。我试过投票,但不能这样做