2015-07-22 2 views
1

Если я использую тот же ITextRenderer для создания двух файлов PDF из двух разных файлов XHTML, второй PDF-документ будет иметь тот же заголовок, что и первый.ITextRenderer повторяет одно и то же название во всех pdf-файлах

В XHTML файлы:

file1.xhtml:

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
    <title>Title 1</title> 
</head> 
<body> 
    Body 1 
</body> 
</html> 

file2.xhtml:

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
    <title>Title 2</title> 
</head> 
<body> 
    Body 2 
</body> 
</html> 

И тестирование Java код, который повторно использует ITextRenderer экземпляр:

import java.io.FileOutputStream; 
import org.xhtmlrenderer.pdf.ITextRenderer; 

public class TitleTest { 

    public static void main(String[] args) throws Exception { 

     ITextRenderer renderer = new ITextRenderer(); 

     renderer.setDocument("file:file1.xhtml"); 
     renderer.layout(); 
     renderer.createPDF(new FileOutputStream("file1.pdf")); 

     renderer.setDocument("file:file2.xhtml"); 
     renderer.layout(); 
     renderer.createPDF(new FileOutputStream("file2.pdf")); 
    } 
} 

Созданное file2.pdf будет «Body 2», как его содержание, но его название (Ф мета-информация) будет «Заголовок 1».

Неправильно ли повторно использовать ITextRenderer instace? Или это ошибка iText? Есть ли для этого какой-то «понятный» метод?

ответ

0

TLDR: добавить эту строку

renderer.getOutputDevice().setMetadata("title", null); 

перед повторным использованием renderer. Как это:

renderer.setDocument("file:file1.xhtml"); 
    renderer.layout(); 
    renderer.createPDF(new FileOutputStream("file1.pdf")); 

    renderer.getOutputDevice().setMetadata("title", null); // <----- 

    renderer.setDocument("file:file2.xhtml"); 
    renderer.layout(); 
    renderer.createPDF(new FileOutputStream("file2.pdf")); 

Объяснение:ITextRenderer повторно его экземпляр ITextOutputDevice, который использует только заголовок Xhtml, если заголовок не был установлен ранее в п.п.м. мета-данных. Это происходит на this line of the source code.

По-прежнему неясно, является ли это ошибкой или если повторное использование ITextRenderer является неправильным для начала.

Смежные вопросы