2008-09-16 2 views

ответ

17

Чтобы создать PDF-документ, используйте тег cfdocument (с форматом = "PDF"), разместив его вокруг создаваемой страницы. Вам нужно указать атрибут имени файла, иначе документ будет просто передаваться прямо в ваш браузер.

После того, как вы сохранили содержимое в формате PDF, используйте cfheader и cfcontent в комбинации для вывода PDF в качестве вложения («Сохранить как») и добавьте файл в поток ответов. Я также добавил deletefile = «Да» в тег cfcontent, чтобы поддерживать файловую систему в чистоте файлов.

<cfdocument format="PDF" filename="file.pdf" overwrite="Yes"> 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 
<html> 
<head> 
    <title>Hello World</title> 
</head> 
<body> 
    Hello World 
</body> 
</html> 
</cfdocument> 
<cfheader name="Content-Disposition" value="attachment;filename=file.pdf"> 
<cfcontent type="application/octet-stream" file="#expandPath('.')#\file.pdf" deletefile="Yes"> 

Как и в сторону: Я просто использую файл file.pdf имя файла в приведенном ниже примере, но вы можете использовать некоторые случайные или сессионный генерируемый строку для имени файла, чтобы избежать проблем, связанных с условиями гонки.

1

Я не знаком с ColdFusion, но вам нужно установить Content-Type страницы, когда пользователь запрашивает ее как приложение/октет-поток. Это будет запрашивать их для загрузки каждый раз.

Надеюсь, это поможет!

3

Если вы хотите вообще не хранить PDF-файл, использование cfdocument без имени файла отправит pdf (флэш-документ) непосредственно в браузер без использования cfheader и cfcontent.

Предостережение. Как и при использовании cfheader/cfcontent, вам необходимо сделать это до того, как кэш будет очищен от браузера, поскольку он в основном делает то же самое, не сохраняя файл.

Чтобы получить контент, я бы, вероятно, использовал cfsavecontent, обернутый вокруг тех же вызовов/включая/etc. которые генерируют страницу с двумя основными исключениями. cfdocument, похоже, имеет проблемы с внешними таблицами стилей, поэтому использование include для размещения стилей непосредственно в документе, вероятно, является хорошей идеей. Вместо этого вы можете попробовать использовать @import - это работает для некоторых людей. Кроме того, я буду осторожен относительно относительных связей с изображениями, поскольку они могут иногда ломаться.

3

Подход <cfdocument> - это санкционированный способ сделать это, однако он не предлагает все возможное, чтобы манипулировать существующими документами PDF. У меня был проект, где мне нужно было создавать купоны на основе предварительно разработанного PDF-шаблона с разрешением на печать. <cfdocument> позволил бы мне приблизиться к выходу, но только с растровыми изображениями, встроенными в HTML. Правда, я мог подделать разрешение печати, сделав большое изображение и масштабируя его в HTML, но оригинал был красивым, чистым файлом векторного изображения, и я хотел использовать его вместо этого.

Я закончил использовать копию <cfx_pdf>, чтобы выполнить эту работу. (Developer's Site, CF Tag Store) Это оболочка CF вокруг библиотеки Java PDF, которая позволяет вам манипулировать существующими документами PDF, включая заполнение форм PDF, установку разрешений, объединение файлов, рисование векторной графики, таблиц и текста, использование пользовательских шрифтов и т. Д. И т. Д. Если вы готовы работать с ним, вы можете получить довольно эффектные результаты.

Единственным недостатком является то, что разработчик покинул этот продукт на пастбище в течение длительного времени. Сайт разработчика по-прежнему является авторским правом 2003 года и не упоминает ничего о ColdFusion MX 6.1. В итоге мне пришлось сломать некоторые зашифрованные шаблоны, чтобы исправить пару ошибок и заставить их работать так, как мне было нужно. Тем не менее, это мощный инструмент.

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