середа, 11 січня 2012 р.

PDF + .NET
Довольно часто у заказчиков возникает шальная мысль прикрутить к разрабатываемому сайту модуль репортов, и чтоб данные не просто выводились на экран - но чтобы их обязательно можно было сохранить в каком-нить интересном формате. Это может быть либо Microsoft Excel (благо эту блажь достаточно легко реализовать - мелкософтяне выдумали xml формат, который поддерживается начиная с Excel 2003 (глядеть здесь)), а иногда заказчик даже знает о существовании Pdf. К счастью для нас с Вами, в этом случае - как и в предыдущем, мы легко можем обойтись без проприетарных библиотек для формирования документов.
В среде JAVA програмистов давно пользуеться заслуженой популярностью библиотека FOP. Название - абревиатура: Formated Object Processor. Позжей она была портирована на платформу .NET. Этот вариант библиотеки называеться NFOP. Для получения pdf документа (и не только) на выходе, на вход нужно подать валидный документ xsl:fo (подвид xml, который служит для описания содержимого и разметка документа). А xml-документ в любых его проявлениях, нам плучить - плёвое дело, не так ли? Итак, для изучения возможностей испытуемого объекта, нам понадобяться исходный код, который лежит здесь , и компилятор, который нам соберёт собственно бинарнык (исходники написаны на редком ныне языке J#, компилятор под который шёл в комплекте MS Visual Studio 2005 - я нашел образ Visual Studio Express в блоге какого-то индуса - за что ему большое спасибо :). Студия нам будет нужна ровно на протяжении секунд 20-20 - пока будет компилироваться наша библиотека. После этого - про неё можно смело забыть) Поскольку мне в проекте нужно было сделать COM application, то я написал простенький враппер на C#, через которые можно бы было обращаться к собственно методам библиотеки. Однако - для учебных целей - отлично сгодиться консольный проект - из архива с исходниками (называеться NFopApp). в папку с скомпилироваными бинарниками надо положить документ xsl:fo (можно также два документа: xml - с данными и xsl - с образцом для трансформации в xsl:fo), и c командной строки запустить утилиту (о порядке использования можно узнать, запустив утилиту без ключей - она выведет короткую справку). пример наипройстейшего документа для преобразования в pdf:

<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
 <fo:layout-master-set>
  <fo:simple-page-master margin-bottom="1in" margin-left="1in" margin-right="1in" margin-top="1in" master-name="hello" page-height="11in" page-width="8.5in">
   <fo:region-body margin-bottom=".5in" margin-top="1in">
   <fo:region-before background-color="silver" extent=".5in">
   <fo:region-after background-color="silver" extent=".5in">
  </fo:region-after></fo:region-before></fo:region-body></fo:simple-page-master>
 </fo:layout-master-set>

 <fo:page-sequence master-reference="hello">
  <fo:static-content flow-name="xsl-region-before">
   <fo:block font-size="24pt">Hello World!</fo:block>
  </fo:static-content>
  <fo:static-content flow-name="xsl-region-after">
   <fo:block font-size="24pt" text-align="right">
    Page <fo:page-number> of <fo:page-number-citation ref-id="last-page">
   </fo:page-number-citation></fo:page-number></fo:block>
  </fo:static-content>
  <fo:flow flow-name="xsl-region-body">
   <fo:block font-size="36pt" font-weight="bold" text-align="center">
    Hello World!
   </fo:block>
   <fo:block id="last-page">
  </fo:block></fo:flow>
 </fo:page-sequence>
</fo:root>

В этом случае, при условии что документ выше, был назван doc.xml, команда на преобразование в документ pdf, будет следующей:

nfop.exe -fo doc.xml -pdf doc.pdf
После исполнения которой, мы обнаружим в каталоге с программой новый файл doc.pdf.
Дополнительная литература по теме:

Немає коментарів:

Дописати коментар