PDF Отключить сглаживание на линиях - PullRequest
1 голос
/ 12 марта 2010

Я создаю динамически сгенерированный PDF с использованием FPDF.

Мой PDF требует много точно горизонтальных / вертикальных линий в сетке, и при визуализации они сглаживаются и выглядят очень размытыми и неприемлемыми для клиента. Мне нужно удалить сглаживание для этих (или всех) строк в документе.

Я знаю, что это возможно, потому что это правильно показано в спецификации Adobe PDF. http://www.adobe.com/devnet/acrobat/pdfs/PDF32000_2008.pdf (предупреждение: большой файл) как это должно выглядеть в рамке на странице 2.

Как бы я продублировал поле, показанное на этой странице?

- РЕДАКТИРОВАТЬ -

%PDF-1.6
3 0 obj
<</Type /Page
/Parent 1 0 R
/Resources 2 0 R
/Contents 4 0 R>>
endobj
4 0 obj
<</Length 44>>
stream
2 J
1.00 w
20.00 821.89 m 200.00 821.89 l S

endstream
endobj
1 0 obj
<</Type /Pages
/Kids [3 0 R ]
/Count 1
/MediaBox [0 0 595.28 841.89]
>>
endobj
2 0 obj
<<
/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
/Font <<
>>
/XObject <<
>>
>>
endobj
5 0 obj
<<
/Producer (FPDF 1.6)
/CreationDate (D:20100311190240)
>>
endobj
6 0 obj
<<
/Type /Catalog
/Pages 1 0 R
/OpenAction [3 0 R /FitH null]
/PageLayout /OneColumn
>>
endobj
xref
0 7
0000000000 65535 f 
0000000179 00000 n 
0000000266 00000 n 
0000000009 00000 n 
0000000087 00000 n 
0000000360 00000 n 
0000000435 00000 n 
trailer
<<
/Size 7
/Root 6 0 R
/Info 5 0 R
>>
startxref
538
%%EOF

Это очень простой файл PDF, который рисует одну линию, показывая проблему, с которой я столкнулся. Я понял, что хитрость заключается в том, чтобы добавить это:

/Type /ExtGState
/SA false

Но я пока не могу заставить его работать. SA определен в 10.6.5 в приведенных выше спецификациях PDF

1 Ответ

1 голос
/ 12 марта 2010

У меня нет точного ответа, но у меня есть идея, что это немного больше, чем комментарий ...

Поскольку вы уже знакомы со спецификациями PDF, вот что вы должны попробовать:

Выясните, как на самом деле fpdf рисует эти линии. Скорее всего, PDF-файл, который он выводит, сжат, поэтому вы должны скачать pdftk , чтобы распаковать его. Это можно сделать с помощью команды:

 pdftk fpdf_output.pdf output fdf_readable.pdf uncompress

Откройте PDF-файл в текстовом редакторе и посмотрите, отрисовываются ли линии так же, как в примере с PDF-спецификациями, которые вы просматриваете.

Если нет, посмотрите, есть ли в методе fpdf для рисования линий опция сглаживания (я имею в виду в спецификации PDF). Если fpdf рисует его таким же образом (или если у их пути есть опция), попробуйте изменить выходной документ (в текстовом редакторе), чтобы отключить сглаживание. Если документ не открывается после редактирования в текстовом редакторе, вы можете запустить:

 pdftk fdf_readable.pdf output fdf_fixed.pdf

и это должно исправить любые неработающие ссылки или количество байтов.

Затем откройте свой измененный PDF-файл, чтобы посмотреть, похоже ли это на то, что вы собираетесь.

Вот плохие новости: единственное, что выполняет вышеизложенное, это проверка того, что сглаживание возможно или невозможно с помощью методов, которые fpdf использует под капотом. Если это возможно, есть некоторая надежда на то, что эта функция уже существует или вы можете сделать запрос на функцию, или если вы чувствуете себя действительно уверенно, вы можете попытаться расширить fpdf, включив в него какой-то метод antialias("true|false"). Если метод, который они используют для рисования линий, не совпадает со спецификацией и не имеет возможности отключить сглаживание, лучше всего найти альтернативный генератор PDF, такой как tcpdf и посмотреть, предлагают ли они эту функцию.

Обновление

Хорошо, я хотел бы сначала указать, что я все еще не вижу размытость. Поэтому я не могу сказать, действительно ли это решает вашу проблему. Но я добавил правило автоматической регулировки обводки к вашему примеру, и PDF все еще открывается.

Чтобы не публиковать весь PDF снова, вот как вы можете обновить пример кода:

.........
/Font <<
>>
/XObject <<
>>

//Start my edit right below this point in your example, so at line 31, add:

/ExtGState << /GS1 10 0 R
>>
>>
endobj
10 0 obj
<<
/Type /ExtGState
/SA true
/TR 11 0 R
>>
endobj
31 0 obj
<< /FunctionType 0
/Domain [0.0 1.0]
/Range [0.0 1.0]
/Size 2
/BitsPerSample 8
/Length 7
/Filter /ASCIIHexDecode
>>
stream
01 00 >
endstream
endobj
// Your code picks back up with:

5 0 obj
<<
/Producer (FPDF 1.6)

По сути, все, что я сделал, это добавил ссылку на объект словаря к словарю основного ресурса, а затем создал реальный объект словаря с правилом регулировки штриха, установленным в значение true. Я также добавил передаточную функцию, которая есть в примере спецификации, потому что я не уверен, что это имеет значение. Его легко вынуть.

...