2013-08-05 2 views
0

У меня есть PDF-файл, созданный в Oracle BI Publisher. Он содержит график и некоторый текст. При попытке штамповать документ с изображением - изображение добавляется, но датские символы уничтожаются.При тиснении документа - Датские символы исчезают, а PDF становится недействительным

Я бегу IText Stamp так:

static void stampPdf() throws IOException, DocumentException { 
    PdfReader reader = new PdfReader(PDF_SOURCE_FILE); 
    PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(
      PDF_STAMPED_FILE)); 
    Image img = Image.getInstance(WATERMARK); 
    img.setAbsolutePosition(10, 100); 
    PdfContentByte under = stamper.getUnderContent(1); 
    under.addImage(img); 
    stamper.close(); 
} 

Как результат, я получаю следующее сообщение: документ недействительным. Но отображается документ, включая добавленное изображение. Датские персонажи стали заменены.

Все шрифты были удалены из свойств документа.

Кто-нибудь видел что-то подобное раньше? Я делал это несколько раз, без проблем.

+1

Я никогда не видел этого раньше. Какую версию iText вы используете? Можете ли вы поделиться PDF_SOURCE_FILE и WATERMARK? –

+0

Я пробовал с новейшей версией iText. Если вы хотите взглянуть на него, я могу отправить вам zip, содержащий af testcase? Как я могу в конечном итоге предоставить вам файлы? –

+0

Поместите их на сайт и укажите URL-адрес. –

ответ

1

Я взглянул на PDF, и это не проблема iText. Это проблема «Мусор, мусор». Пожалуйста, откройте PDF в Acrobat и проанализируйте его для синтаксических ошибок. Вы получите следующее сообщение:

Garbage In, Garbage Out

Поток содержание PDF неправильно таким образом, что даже Acrobat не может анализировать его и сказать вам, что это неправильно.

Итак, я заглянул в файл и, когда он выглядит так, как будто iText не видит ресурсы страницы для страницы. Ресурсы страниц относятся к шрифтам. Если iText не может видеть ресурсы страницы, iText не может видеть шрифты, и они теряются в процессе.

Если Acrobat разрешит мне «Анализировать и исправить», я мог бы создать фиксированный PDF-файл и сравнить то, что было исправлено. Но по мере того как Acrobat не может исправить файл, очень много работы, чтобы просмотреть полный файл вручную, чтобы узнать, что именно с ним не так. Из любопытства, я открыл документ в текстовом редакторе, и я нашел это:

4 0 obj 
<< 
/ProcSet [ /PDF /Text ] 
/Font << 
/F1 7 0 R 
/F2 8 0 R 
/F3 11 0 R 
>> 
/Shading << 
/grad0 10 0 R 
/grad0#2 15 0 R 
/grad1#2 17 0 R 
/grad2#2 19 0 R 
/grad3#2 21 0 R 
/grad4#2 23 0 R 
/grad5#2 25 0 R 
>> 
>> 
endobj 

Проблема вызвана именами /grad0#2, /grad1#2 и т.д ... Те, кто не являются допустимыми именами. Процитирую из ISO-32000-1:

При написании имени в файле PDF, SOLIDUS (2Fh) (/) используется ввести имя. SOLIDUS не является частью имени, но это приставка, указывающая на то, что следует последовательность символов представляющих имя в файле PDF и должны следовать этим правилам:

а) символ (23H) (#) в имени записывается с использованием его двухзначного шестнадцатеричного кода (23), которому предшествует NUMBER SIGN.

б) Любой символ в имени, которое является регулярным характером (кроме НОМЕРА SIGN) должен быть записан как таковые, либо с помощью его 2-значных шестнадцатеричного код, которому предшествует знак номера.

c) Любой символ, который не является обычным символом , записывается с использованием его двухзначного шестнадцатеричного кода, , которому предшествует только NUMBER SIGN.

В вашем случае у вас есть NUMBER SIGN (#), за которым следует 1-значный номер.Это не имеет никакого смысла. Недопустимый PDF-файл.

Короче говоря: обратитесь к производителю PDF и попросите его исправить проблему или никогда не использовать его инструменты.

+0

Я попытаюсь исправить шаблон. PDF создается с использованием шаблона, обработанного в старой версии Oracle BI Publisher. –

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