Jasper reports 锚不';使用iText合并两个不同的PDF文件后无法工作

Jasper reports 锚不';使用iText合并两个不同的PDF文件后无法工作,jasper-reports,itext,Jasper Reports,Itext,我使用Jasper创建了两个PDF报告,并将它们合并到一个PDF文件中。第一个PDF报告包含锚定链接,第二个PDF报告包含锚定目标。合并两个PDF后,锚定不起作用。我该如何解决这个问题 part1.jrxml代码 <?xml version="1.0" encoding="UTF-8"?> <!-- Created with Jaspersoft Studio version 5.6.1.final using JasperReports Library version 5.6

我使用Jasper创建了两个PDF报告,并将它们合并到一个PDF文件中。第一个PDF报告包含锚定链接,第二个PDF报告包含锚定目标。合并两个PDF后,锚定不起作用。我该如何解决这个问题

part1.jrxml代码

<?xml version="1.0" encoding="UTF-8"?>
<!-- Created with Jaspersoft Studio version 5.6.1.final using JasperReports Library version 5.6.1  -->
<!-- 2016-01-03T23:14:55 -->
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="part1" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="8d0dcb70-0391-45e2-9263-4ac8cfa5f0de">
    <property name="com.jaspersoft.studio.data.defaultdataadapter" value="One Empty Record"/>
    <queryString>
        <![CDATA[]]>
    </queryString>
    <background>
        <band splitType="Stretch"/>
    </background>
    <summary>
        <band height="405" splitType="Stretch">
            <textField>
                <reportElement x="320" y="370" width="100" height="30" uuid="0f29cf02-60d5-43d7-b360-3254134a6f77"/>
                <textFieldExpression><![CDATA["Anchor Name"]]></textFieldExpression>
                <anchorNameExpression><![CDATA["expert"]]></anchorNameExpression>
            </textField>
        </band>
    </summary>
</jasperReport>
<?xml version="1.0" encoding="UTF-8"?>
<!-- Created with Jaspersoft Studio version 5.6.1.final using JasperReports Library version 5.6.1  -->
<!-- 2016-01-03T23:24:42 -->
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="part2" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="3f401f6e-4962-4a54-9674-4b0c613f9e73">
    <property name="com.jaspersoft.studio.data.defaultdataadapter" value="One Empty Record"/>
    <queryString>
        <![CDATA[]]>
    </queryString>
    <background>
        <band splitType="Stretch"/>
    </background>
    <summary>
        <band height="389" splitType="Stretch">
            <textField hyperlinkType="LocalAnchor">
                <reportElement x="430" y="350" width="100" height="30" uuid="53f9f5fa-df7a-4fa3-bc1d-57b8be0c130a"/>
                <textFieldExpression><![CDATA["Anchor Target"]]></textFieldExpression>
                <hyperlinkReferenceExpression><![CDATA["./result.pdf"]]></hyperlinkReferenceExpression>
                <hyperlinkAnchorExpression><![CDATA["expert"]]></hyperlinkAnchorExpression>
            </textField>
        </band>
    </summary>
</jasperReport>


part2.jrxml代码

<?xml version="1.0" encoding="UTF-8"?>
<!-- Created with Jaspersoft Studio version 5.6.1.final using JasperReports Library version 5.6.1  -->
<!-- 2016-01-03T23:14:55 -->
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="part1" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="8d0dcb70-0391-45e2-9263-4ac8cfa5f0de">
    <property name="com.jaspersoft.studio.data.defaultdataadapter" value="One Empty Record"/>
    <queryString>
        <![CDATA[]]>
    </queryString>
    <background>
        <band splitType="Stretch"/>
    </background>
    <summary>
        <band height="405" splitType="Stretch">
            <textField>
                <reportElement x="320" y="370" width="100" height="30" uuid="0f29cf02-60d5-43d7-b360-3254134a6f77"/>
                <textFieldExpression><![CDATA["Anchor Name"]]></textFieldExpression>
                <anchorNameExpression><![CDATA["expert"]]></anchorNameExpression>
            </textField>
        </band>
    </summary>
</jasperReport>
<?xml version="1.0" encoding="UTF-8"?>
<!-- Created with Jaspersoft Studio version 5.6.1.final using JasperReports Library version 5.6.1  -->
<!-- 2016-01-03T23:24:42 -->
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="part2" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="3f401f6e-4962-4a54-9674-4b0c613f9e73">
    <property name="com.jaspersoft.studio.data.defaultdataadapter" value="One Empty Record"/>
    <queryString>
        <![CDATA[]]>
    </queryString>
    <background>
        <band splitType="Stretch"/>
    </background>
    <summary>
        <band height="389" splitType="Stretch">
            <textField hyperlinkType="LocalAnchor">
                <reportElement x="430" y="350" width="100" height="30" uuid="53f9f5fa-df7a-4fa3-bc1d-57b8be0c130a"/>
                <textFieldExpression><![CDATA["Anchor Target"]]></textFieldExpression>
                <hyperlinkReferenceExpression><![CDATA["./result.pdf"]]></hyperlinkReferenceExpression>
                <hyperlinkAnchorExpression><![CDATA["expert"]]></hyperlinkAnchorExpression>
            </textField>
        </band>
    </summary>
</jasperReport>


Merged.pdf

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.pdf.PdfCopy;
import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.PdfSmartCopy;


public class MergePdf {

    public static void main(String[] args)   throws IOException, DocumentException {
        String RESULT= "/home/expert/Desktop/result.pdf";
        String[] files = {"/home/expert/Desktop/part1.pdf", "/home/expert/Desktop/part2.pdf"};
        mergePDF(files,RESULT);
    }




    public static boolean mergePDF(String sourcefiles[],String targetfile){
        Document document = new Document();
        PdfCopy copy;
        try {
            //copy = new PdfCopy(document, new FileOutputStream(targetfile));
            copy = new PdfSmartCopy(document, new FileOutputStream(targetfile));

            document.open();
            PdfReader reader;
            int n;
            for (int i = 0; i < sourcefiles.length; i++) {
                reader = new PdfReader(sourcefiles[i]);
                n = reader.getNumberOfPages();
                for (int page = 0; page < n; ) 
                    copy.addPage(copy.getImportedPage(reader, ++page));
                copy.freeReader(reader);
                reader.close();
            }
            document.close();
            System.out.println("INFO :: Merging Complete of temp files");
        } catch (FileNotFoundException e) {
            e.printStackTrace();
            return false;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
        return true;
    }


}
import java.io.FileNotFoundException;
导入java.io.FileOutputStream;
导入java.io.IOException;
导入com.itextpdf.text.Document;
导入com.itextpdf.text.DocumentException;
导入com.itextpdf.text.pdf.PdfCopy;
导入com.itextpdf.text.pdf.PdfReader;
导入com.itextpdf.text.pdf.PdfSmartCopy;
公共类合并PDF{
公共静态void main(字符串[]args)引发IOException、DocumentException{
字符串RESULT=“/home/expert/Desktop/RESULT.pdf”;
字符串[]文件={“/home/expert/Desktop/part1.pdf”,“/home/expert/Desktop/part2.pdf”};
合并PDF(文件、结果);
}
公共静态布尔合并PDF(字符串源文件[],字符串目标文件){
文档=新文档();
PdfCopy副本;
试一试{
//复制=新的PdfCopy(文档,新文件输出流(targetfile));
copy=新PdfSmartCopy(文档,新文件输出流(targetfile));
document.open();
PDF阅读器;
int n;
对于(int i=0;i
考虑合并
JasperPrint
,然后使用
SimpleExporterInput.getInstance(List)
作为导出器输入导出为pdf

这将使书签和锚正常工作

范例

Map<String, Object> paramMap = new HashMap<String, Object>();

JasperReport report1 = JasperCompileManager.compileReport("part1.jrxml");
JasperReport report2 = JasperCompileManager.compileReport("part2.jrxml");

//Get all the JasperPrint and add them to my list
List<JasperPrint> jasperPrintList = new ArrayList<JasperPrint>();
JasperPrint jasperPrint1 = JasperFillManager.fillReport(report1, paramMap);
jasperPrintList.add(jasperPrint1);
JasperPrint jasperPrint2 = JasperFillManager.fillReport(report2, paramMap);
jasperPrintList.add(jasperPrint2);

JRPdfExporter exporter = new JRPdfExporter();
exporter.setExporterInput(SimpleExporterInput.getInstance(jasperPrintList)); //Set as export input my list with JasperPrint s
exporter.setExporterOutput(new SimpleOutputStreamExporterOutput("pdf/BookmarkTest.pdf"));
SimplePdfExporterConfiguration configuration = new SimplePdfExporterConfiguration();
configuration.setCreatingBatchModeBookmarks(true);
exporter.setConfiguration(configuration);
exporter.exportReport();
Map paramMap=newhashmap();
JasperReport report1=jaspecompilemanager.compileReport(“part1.jrxml”);
JasperReport report2=jaspecompilemanager.compileReport(“part2.jrxml”);
//把所有的茉莉花都加到我的名单上
List jasperPrintList=newarraylist();
JasperPrint jasperPrint1=JasperFillManager.fillReport(report1,paramMap);
jasperPrintList.add(jasperPrint1);
JasperPrint jasperPrint2=JasperFillManager.fillReport(report2,paramMap);
jasperPrintList.add(jasperPrint2);
JRPdfExporter exporter=新的JRPdfExporter();
setExporterInput(SimpleExporterInput.getInstance(jasperPrintList))//使用JasperPrint s设置为导出输入我的列表
exporter.setExporterOutput(新的SimpleOutputStreamExporterOutput(“pdf/BookmarkTest.pdf”);
SimplePDExporterConfiguration配置=新的SimplePDExporterConfiguration();
configuration.setCreatingBatchModeBookmarks(true);
exporter.setConfiguration(配置);
出口商。出口报告();

您能否提供一些简单的测试示例(jrxml文件示例和java代码)…源代码如何附加?您可以编辑问题。。。(与代码格式),请尽量保持简短只是一个简单的例子发生了什么。。。不是无关的代码。。。如果您在编辑问题时遇到困难,我可以帮助您设置格式。您好,锚点和超链接在合并的PDF中工作,但链接上的工具提示不起作用。理论上这是另一个问题,但我会检查一下工具提示是如何工作的,然后再给你回复……我也想知道如何接受前面的答案question@AshutoshKumar好的,我已经检查了工具提示使用JRPdfExport生成工具提示没有本机支持,唯一的解决方案似乎是覆盖setHyperlinkInfo并使用注释。。。然而,这是另一个问题(与PDF的合并无关),给我一些时间来测试它,同时考虑另一个关于如何在PDF中生成工具提示的问题…谢谢你接受答案,检查如何生成本地锚和工具提示,它不是很直接的……