Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将PDF与iText 2.1.7合并会导致它们收缩_Java_Pdf_Itext - Fatal编程技术网

Java 将PDF与iText 2.1.7合并会导致它们收缩

Java 将PDF与iText 2.1.7合并会导致它们收缩,java,pdf,itext,Java,Pdf,Itext,我正在使用iText2.1.7将一些文档PDF合并到单个PDF中。下面的代码似乎工作得很好,但在某些情况下,渲染的PDF的缩放比例会稍微小一些,如在处理之前直接打印,则缩放比例为PDF的90% 有没有办法保持当前的大小 private void doMerge(List<InputStream> list, OutputStream outputStream) throws DocumentException, IOException { Document docum

我正在使用iText2.1.7将一些文档PDF合并到单个PDF中。下面的代码似乎工作得很好,但在某些情况下,渲染的PDF的缩放比例会稍微小一些,如在处理之前直接打印,则缩放比例为PDF的90%

有没有办法保持当前的大小

private void doMerge(List<InputStream> list, OutputStream outputStream) throws DocumentException, IOException {
        Document document = new Document();
        PdfWriter writer = PdfWriter.getInstance(document, outputStream);
        document.open();
        PdfContentByte cb = writer.getDirectContent();

        for (InputStream in : list) {
            PdfReader reader = new PdfReader(in);
            for (int i = 1; i <= reader.getNumberOfPages(); i++) {
                document.newPage();
                //import the page from source pdf
                PdfImportedPage page = writer.getImportedPage(reader, i);
                //add the page to the destination pdf
                cb.addTemplate(page, 0, 0);
            }
        }
        outputStream.flush();
        document.close();
        outputStream.close();
    }

该API已与该版本一起提供。如果表单字段在其中,我甚至建议使用PdfSmartCopy而不是PdfCopy或PdfCopyFields

private PdfSmartCopy copier;

public void SomeMainMethod(){

 Document finalPdf = new Document();
 copier = new PdfSmartCopy(finalPdf, outputstream);
 //Start adding pdfs
 finalPdf.open();

 //add n documents
 addDocuments(...);

 finalPdf.close();
 formCopier.close();
}

public void addDocument(InputStream pdfDocument, int startPage, int endPage){
 PdfReader reader= new PdfReader(pdfDocument);

 int startPage = 1;
 int endPage = reader.getNumberOfPages();

 for (int i = startPage; i <= endPage; i++) {
    copier.addPage(this.copier.getImportedPage(reader,i));
 }

 if(copier!=null){
 //Important: Free Memory!
    copier.flush();
    copier.freeReader(reader);
 }
 if (reader!=null) {
    reader.close();
    reader=null;
 }
 pdfDocument.close();
}

你能用最新版本的iText重现这一点吗?你的合并代码遵循一种众所周知的反iText使用模式。请在此处搜索使用PdfCopy而不是普通PdfWriter实现合并例程的答案。我尝试使用pdf copy,但这些都是较新版本,api不可用。