Создание PDF из XML
Следующий фрагмент кода также работает с библиотекой Aspose.PDF.Drawing.
Создание PDF-документа из XML-документа — это нетривиальная задача, потому что XML-документ может описывать различное содержимое. Aspose.PDF for .NET имеет несколько способов создания PDF на основе XML-документа:
- использование XSLT-преобразования
- использование разметки XSL-FO (XSL Formatting Objects)
- использование собственной схемы Aspose.PDF XML
Создание PDF-документа с использованием XSLT-преобразования
XSL (eXtensible Stylesheet Language) — это язык стилей для преобразования XML-документов в другие XML-документы или HTML. В нашем случае мы можем использовать преобразование XML в HTML, а затем создать PDF на основе HTML-данных.
Предположим, у нас есть XML-файл с простым каталогом CD (см. ниже).
<?xml version="1.0" encoding="utf-8" ?>
<catalog>
<cd>
<title>Empire Burlesque</title>
<artist>Bob Dylan</artist>
<country>USA</country>
<company>Columbia</company>
<price>10.90</price>
<year>1985</year>
</cd>
<cd>
<title>Hide your heart</title>
<artist>Bonnie Tyler</artist>
<country>UK</country>
<company>CBS Records</company>
<price>9.90</price>
<year>1988</year>
</cd>
<cd>
<title>Greatest Hits</title>
<artist>Dolly Parton</artist>
<country>USA</country>
<company>RCA</company>
<price>9.90</price>
<year>1982</year>
</cd>
<cd>
<title>Still got the blues</title>
<artist>Gary Moore</artist>
<country>UK</country>
<company>Virgin records</company>
<price>10.20</price>
<year>1990</year>
</cd>
<cd>
<title>Eros</title>
<artist>Eros Ramazzotti</artist>
<country>EU</country>
<company>BMG</company>
<price>9.90</price>
<year>1997</year>
</cd>
<cd>
<title>One night only</title>
<artist>Bee Gees</artist>
<country>UK</country>
<company>Polydor</company>
<price>10.90</price>
<year>1998</year>
</cd>
<cd>
<title>Sylvias Mother</title>
<artist>Dr.Hook</artist>
<country>UK</country>
<company>CBS</company>
<price>8.10</price>
<year>1973</year>
</cd>
<cd>
<title>Maggie May</title>
<artist>Rod Stewart</artist>
<country>UK</country>
<company>Pickwick</company>
<price>8.50</price>
<year>1990</year>
</cd>
<cd>
<title>Romanza</title>
<artist>Andrea Bocelli</artist>
<country>EU</country>
<company>Polydor</company>
<price>10.80</price>
<year>1996</year>
</cd>
<cd>
<title>When a man loves a woman</title>
<artist>Percy Sledge</artist>
<country>USA</country>
<company>Atlantic</company>
<price>8.70</price>
<year>1987</year>
</cd>
<cd>
<title>Black angel</title>
<artist>Savage Rose</artist>
<country>EU</country>
<company>Mega</company>
<price>10.90</price>
<year>1995</year>
</cd>
<cd>
<title>1999 Grammy Nominees</title>
<artist>Many</artist>
<country>USA</country>
<company>Grammy</company>
<price>10.20</price>
<year>1999</year>
</cd>
<cd>
<title>For the good times</title>
<artist>Kenny Rogers</artist>
<country>UK</country>
<company>Mucik Master</company>
<price>8.70</price>
<year>1995</year>
</cd>
<cd>
<title>Big Willie style</title>
<artist>Will Smith</artist>
<country>USA</country>
<company>Columbia</company>
<price>9.90</price>
<year>1997</year>
</cd>
<cd>
<title>Tupelo Honey</title>
<artist>Van Morrison</artist>
<country>UK</country>
<company>Polydor</company>
<price>8.20</price>
<year>1971</year>
</cd>
<cd>
<title>Soulsville</title>
<artist>Jorn Hoel</artist>
<country>Norway</country>
<company>WEA</company>
<price>7.90</price>
<year>1996</year>
</cd>
<cd>
<title>The very best of</title>
<artist>Cat Stevens</artist>
<country>UK</country>
<company>Island</company>
<price>8.90</price>
<year>1990</year>
</cd>
<cd>
<title>Stop</title>
<artist>Sam Brown</artist>
<country>UK</country>
<company>A and M</company>
<price>8.90</price>
<year>1988</year>
</cd>
<cd>
<title>Bridge of Spies</title>
<artist>T`Pau</artist>
<country>UK</country>
<company>Siren</company>
<price>7.90</price>
<year>1987</year>
</cd>
<cd>
<title>Private Dancer</title>
<artist>Tina Turner</artist>
<country>UK</country>
<company>Capitol</company>
<price>8.90</price>
<year>1983</year>
</cd>
<cd>
<title>Midt om natten</title>
<artist>Kim Larsen</artist>
<country>EU</country>
<company>Medley</company>
<price>7.80</price>
<year>1983</year>
</cd>
<cd>
<title>Pavarotti Gala Concert</title>
<artist>Luciano Pavarotti</artist>
<country>UK</country>
<company>DECCA</company>
<price>9.90</price>
<year>1991</year>
</cd>
<cd>
<title>The dock of the bay</title>
<artist>Otis Redding</artist>
<country>USA</country>
<company>Stax Records</company>
<price>7.90</price>
<year>1968</year>
</cd>
<cd>
<title>Picture book</title>
<artist>Simply Red</artist>
<country>EU</country>
<company>Elektra</company>
<price>7.20</price>
<year>1985</year>
</cd>
<cd>
<title>Red</title>
<artist>The Communards</artist>
<country>UK</country>
<company>London</company>
<price>7.80</price>
<year>1987</year>
</cd>
<cd>
<title>Unchain my heart</title>
<artist>Joe Cocker</artist>
<country>USA</country>
<company>EMI</company>
<price>8.20</price>
<year>1987</year>
</cd>
</catalog>
To convert this file to PDF we should create an XSL with HTML layout. Let’s render our data in table. The XSL file that will help us do this might look something like this:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<h2>Моя коллекция CD</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th style="text-align:left">Название</th>
<th style="text-align:left">Исполнитель</th>
</tr>
<xsl:for-each select="catalog/cd">
<tr>
<td>
<xsl:value-of select="title"/>
</td>
<td>
<xsl:value-of select="artist"/>
</td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
So, we need to transform XML and load into PDF document. Так, нам нужно преобразовать XML и загрузить в PDF документ.
private static void ExampleXSLTtoPDF()
{
var _dataDir = @"C:\tmp\";
var XmlContent = File.ReadAllText(@"XMLFile1.xml");
var XsltContent = File.ReadAllText(@"XSLTFile1.xslt");
var options = new Aspose.Pdf.HtmlLoadOptions();
// установить размер страницы на A5
options.PageInfo.Height = 595;
options.PageInfo.Width = 420;
var pdfDocument = new Aspose.Pdf.Document(TransformXmltoHtml(XmlContent, XsltContent), options);
pdfDocument.Save(_dataDir + "data_xml.pdf");
}
public static MemoryStream TransformXmltoHtml(string inputXml, string xsltString)
{
var transform = new XslCompiledTransform();
using (var reader = XmlReader.Create(new StringReader(xsltString)))
{
transform.Load(reader);
}
var memoryStream = new MemoryStream();
var results = new StreamWriter(memoryStream);
using (var reader = XmlReader.Create(new StringReader(inputXml)))
{
transform.Transform(reader, null, results);
}
memoryStream.Position = 0;
return memoryStream;
}
Генерация PDF документа с использованием разметки XSL-FO
XSL-FO — это язык разметки на основе XML, описывающий форматирование данных XML для вывода на экран, бумагу или другие носители. Aspose.PDF имеет специальный класс, который позволяет применять разметку XSL-FO и получать PDF-документ.
Давайте рассмотрим пример. Вот XML-файл с примерными данными сотрудников.
<?xml version="1.0" encoding="utf-8" ?>
<employees>
<companyname>ABC Inc.</companyname>
<employee>
<id>101</id>
<name>Andrew</name>
<designation>Manager</designation>
</employee>
<employee>
<id>102</id>
<name>Eduard</name>
<designation>Executive</designation>
</employee>
<employee>
<id>103</id>
<name>Peter</name>
<designation>Executive</designation>
</employee>
</employees>
Давайте создадим еще один файл - файл разметки XSL-FO для преобразования данных сотрудников в таблицу.
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.1" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:fo="http://www.w3.org/1999/XSL/Format" exclude-result-prefixes="fo">
<xsl:template match="employees">
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
<fo:layout-master-set>
<fo:simple-page-master master-name="simpleA4" page-height="29.7cm" page-width="21cm" margin-top="2cm" margin-bottom="2cm" margin-left="2cm" margin-right="2cm">
<fo:region-body/>
</fo:simple-page-master>
</fo:layout-master-set>
<fo:page-sequence master-reference="simpleA4">
<fo:flow flow-name="xsl-region-body">
<fo:block font-size="16pt" font-weight="bold" space-after="5mm">
Company Name: <xsl:value-of select="companyname"/>
</fo:block>
<fo:block font-size="10pt">
<fo:table table-layout="fixed" width="100%" border-collapse="separate">
<fo:table-column column-width="4cm"/>
<fo:table-column column-width="4cm"/>
<fo:table-column column-width="5cm"/>
<fo:table-body>
<xsl:apply-templates select="employee"/>
</fo:table-body>
</fo:table>
</fo:block>
</fo:flow>
</fo:page-sequence>
</fo:root>
</xsl:template>
<xsl:template match="employee">
<fo:table-row>
<xsl:if test="designation = 'Manager'">
<xsl:attribute name="font-weight">bold</xsl:attribute>
</xsl:if>
<fo:table-cell>
<fo:block>
<xsl:value-of select="id"/>
</fo:block>
</fo:table-cell>
<fo:table-cell>
<fo:block>
<xsl:value-of select="name"/>
</fo:block>
</fo:table-cell>
<fo:table-cell>
<fo:block>
<xsl:value-of select="designation"/>
</fo:block>
</fo:table-cell>
</fo:table-row>
</xsl:template>
</xsl:stylesheet>
Aspose.PDF имеет специальный класс XslFoLoadOptions, который позволяет применять XSL-FO трансформацию. Следующий пример показывает, как использовать этот класс с описанными выше файлами.
public static void Example_XSLFO_to_PDF()
{
var _dataDir = @"C:\tmp\";
// Instantiate XslFoLoadOption object
var options = new Pdf.XslFoLoadOptions("employees.xslt");
// Create Document object
var pdfDocument = new Aspose.Pdf.Document("employees.xml", options);
pdfDocument.Save(_dataDir + "data_xml.pdf");
}
Генерация PDF документа с использованием XSL-FO разметки и XSL параметров
Иногда нам нужно использовать XSL:param. Элемент <xsl:param>
устанавливает параметр по имени и, при необходимости, значение по умолчанию для этого параметра.
Возьмем тот же пример, что и в предыдущем случае, но с небольшими изменениями (добавление параметров). XML файл с примерами данных остается нетронутым, …
<?xml version="1.0" encoding="utf-8" ?>
<employees>
<companyname>ABC Inc.</companyname>
<employee>
<id>101</id>
<name>Andrew</name>
<designation>Менеджер</designation>
</employee>
<employee>
<id>102</id>
<name>Eduard</name>
<designation>Исполнительный директор</designation>
</employee>
<employee>
<id>103</id>
<name>Peter</name>
<designation>Исполнительный директор</designation>
</employee>
</employees>
но в файле разметки XSL-FO мы добавим параметр: <xsl:param name="isBoldName"></xsl:param>
и применим его к столбцу Name
.
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.1" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:fo="http://www.w3.org/1999/XSL/Format" exclude-result-prefixes="fo">
<xsl:param name="isBoldName"></xsl:param>
<xsl:template match="employees">
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
<fo:layout-master-set>
<fo:simple-page-master master-name="simpleA4" page-height="29.7cm" page-width="21cm" margin-top="2cm" margin-bottom="2cm" margin-left="2cm" margin-right="2cm">
<fo:region-body/>
</fo:simple-page-master>
</fo:layout-master-set>
<fo:page-sequence master-reference="simpleA4">
<fo:flow flow-name="xsl-region-body">
<fo:block font-size="16pt" font-weight="bold" space-after="5mm">
Название компании: <xsl:value-of select="companyname"/>
</fo:block>
<fo:block font-size="10pt">
<fo:table table-layout="fixed" width="100%" border-collapse="separate">
<fo:table-column column-width="4cm"/>
<fo:table-column column-width="4cm"/>
<fo:table-column column-width="5cm"/>
<fo:table-body>
<xsl:apply-templates select="employee"/>
</fo:table-body>
</fo:table>
</fo:block>
</fo:flow>
</fo:page-sequence>
</fo:root>
</xsl:template>
<xsl:template match="employee">
<fo:table-row>
<xsl:if test="designation = 'Менеджер'">
<xsl:attribute name="font-weight">bold</xsl:attribute>
</xsl:if>
<fo:table-cell>
<fo:block>
<xsl:value-of select="id"/>
</fo:block>
</fo:table-cell>
<fo:table-cell>
<xsl:if test="$isBoldName='yes'">
<xsl:attribute name="font-weight">bold</xsl:attribute>
</xsl:if>
<fo:block>
<xsl:value-of select="name"/>
</fo:block>
</fo:table-cell>
<fo:table-cell>
<fo:block>
<xsl:value-of select="designation"/>
</fo:block>
</fo:table-cell>
</fo:table-row>
</xsl:template>
</xsl:stylesheet>
Для добавления параметров XSL нам нужно создать собственный XsltArgumentList и установить его как свойство в XslFoLoadOptions. Следующий пример показывает, как использовать этот класс с описанными выше файлами.
public static void Example_XSLFO_to_PDF_Param_21_7()
{
string xmlInputFile = Path.Combine(_dataDir, "employees.xml");
string xsltInputFile = Path.Combine(_dataDir, "employees.xslt");
string outputFile = Path.Combine(_dataDir, "out.pdf");
XslFoLoadOptions options = new XslFoLoadOptions(xsltInputFile);
options.XsltArgumentList = new XsltArgumentList();
options.XsltArgumentList.AddParam("isBoldName", "", "yes");
Document document = new Document(xmlInputFile, options);
document.Save(outputFile);
}
Если вы используете версию ранее 21.7, пожалуйста, используйте следующий метод:
public static void Example_XSLFO_to_PDF_Param_21_6()
{
var XmlContent = File.ReadAllText(_dataDir + "employees.xml");
var XsltContent = File.ReadAllText(_dataDir + "employees.xslt");
var options = new Aspose.Pdf.XslFoLoadOptions();
var pdfDocument = new Aspose.Pdf.Document(TransformXSL(XmlContent, XsltContent), options);
pdfDocument.Save(_dataDir + "data_xml.pdf");
}
public static MemoryStream TransformXSL(string inputXml, string xsltString)
{
var transform = new XslCompiledTransform();
//Create own XsltArgumentList
XsltArgumentList argsList = new XsltArgumentList();
argsList.AddParam("isBoldName", "", "no");
//---------------------
using (var reader = XmlReader.Create(new StringReader(xsltString)))
{
transform.Load(reader);
}
var memoryStream = new MemoryStream();
var results = new StreamWriter(memoryStream);
using (var reader = XmlReader.Create(new StringReader(inputXml)))
{
transform.Transform(reader, argsList, results);
}
memoryStream.Position = 0;
return memoryStream;
}
}
Генерация PDF документа на основе Aspose.PDF XML Schema
Другой способ создать PDF документ из XML - использовать Aspose.PDF XML Schema. С помощью этой схемы вы можете описать макет страницы так же, как если бы вы использовали табличный макет в HTML. Давайте рассмотрим работу этого метода более подробно.
Определение страницы
Давайте определим страницу с параметрами по умолчанию. Наша страница будет иметь размер A4 и содержать только один фрагмент текста.
<?xml version="1.0" encoding="utf-8" ?>
<Document xmlns="Aspose.Pdf">
<Page>
<TextFragment>
<TextSegment>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla odio lorem, luctus in lorem vitae, accumsan semper lectus. Cras a auctor leo, et tincidunt lacus.</TextSegment>
</TextFragment>
</Page>
</Document>
Для генерации PDF документа мы будем использовать метод BindXml.
private static void Example_XML_to_PDF()
{
var _dataDir = @"C:\tmp\";
var pdfDocument = new Aspose.Pdf.Document();
pdfDocument.BindXml(_dataDir + "aspose_pdf_demo.xml");
pdfDocument.Save(_dataDir + "data_xml.pdf");
}
Чтобы задать новый размер страницы, мы должны добавить элемент PageInfo
. В следующем примере мы установили размер страницы A5 и поля 25 мм и 10 мм.
<?xml version="1.0" encoding="utf-8" ?>
<Document xmlns="Aspose.Pdf">
<Page>
<PageInfo IsLandscape="true" Height="595" Width="420">
<Margin Top="70.8661" Bottom="70.8661" Left="28.3465" Right="28.3465" />
</PageInfo>
<TextFragment>
<TextSegment>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla odio lorem, luctus in lorem vitae, accumsan semper lectus. Cras a auctor leo, et tincidunt lacus.</TextSegment>
</TextFragment>
</Page>
</Document>
Добавление элемента HtmlFragment в XML файл
Поскольку HTML содержит теги, подобные XML, при написании HTML внутри любого тега XML, парсер рассматривает его как разметку XML, и они просто не могут быть распознаны как теги XML.
Так как HTML содержит теги, подобные XML, то, когда вы пишете HTML внутри любого XML-тега, парсер рассматривает его как XML-разметку, и они просто не могут быть распознаны как XML-теги.
<?xml version="1.0" encoding="utf-8" ?>
<Document xmlns="Aspose.Pdf">
<Page id="mainSection">
<HtmlFragment>
<![CDATA[
<font style="font-family:Tahoma; font-size:40px;">This is Html String.</font>
]]>
</HtmlFragment>
</Page>
</Document>
Добавление элемента Table в XML файл
Элементы Table
, Row
, Cell
используются для описания таблиц. Следующий фрагмент показывает использование простой таблицы. В этом примере некоторые ячейки имеют атрибут Alignment
, и этот атрибут имеет числовое значение:
- Выравнивание по левому краю
- Выравнивание по центру
- Выравнивание по правому краю
- Выравнивание по ширине. Текст будет выравнен по левому и правому краям.
<?xml version="1.0" encoding="utf-8" ?>
<Document xmlns="Aspose.Pdf">
<Page>
<PageInfo IsLandscape="false" Height="595" Width="420">
<Margin Top="71" Bottom="71" Left="28" Right="28" />
</PageInfo>
<HtmlFragment>
<![CDATA[
<h1 style="font-family:Tahoma; font-size:16pt;">РАСПИСАНИЯ НА МАРШРУТЕ ГРИНТАУН-БЛЮБЕРГ</h1>
]]>
</HtmlFragment>
<TextFragment>
<TextSegment>4.1.-28.3.2021 | ГРИНТАУН → БЛЮБЕРГ</TextSegment>
</TextFragment>
<Table ColumnAdjustment="AutoFitToWindow" ColumnWidths ="10 10 10 10">
<DefaultCellPadding Top="5" Left="0" Right="0" Bottom="5" />
<Border>
<Top Color="Black"></Top>
<Bottom Color="Black"></Bottom>
<Left Color="Black"></Left>
<Right Color="Black"></Right>
</Border>
<Margin Top="15" />
<Row BackgroundColor="LightGray" MinRowHeight="20">
<Border>
<Bottom Color="Black"></Bottom>
</Border>
<Cell Alignment="2">
<TextFragment>
<TextSegment>Отправление</TextSegment>
</TextFragment>
</Cell>
<Cell>
<TextFragment>
<TextSegment>Прибытие</TextSegment>
</TextFragment>
</Cell>
<Cell>
<TextFragment>
<TextSegment>День недели</TextSegment>
</TextFragment>
</Cell>
<Cell>
<TextFragment>
<TextSegment>Корабль</TextSegment>
</TextFragment>
</Cell>
</Row>
<Row>
<Cell Alignment="2">
<TextFragment>
<TextSegment>07.30</TextSegment>
</TextFragment>
</Cell>
<Cell>
<TextFragment>
<TextSegment>09.30</TextSegment>
</TextFragment>
</Cell>
<Cell>
<TextFragment>
<TextSegment>Пн-Сб</TextSegment>
</TextFragment>
</Cell>
<Cell>
<TextFragment>
<TextSegment>Star</TextSegment>
</TextFragment>
</Cell>
</Row>
<Row>
<Cell Alignment="2">
<TextFragment>
<TextSegment>10.30</TextSegment>
</TextFragment>
</Cell>
<Cell>
<TextFragment>
<TextSegment>12.30</TextSegment>
</TextFragment>
</Cell>
<Cell>
<TextFragment>
<TextSegment>каждый день</TextSegment>
</TextFragment>
</Cell>
<Cell>
<TextFragment>
<TextSegment>Megastar</TextSegment>
</TextFragment>
</Cell>
</Row>
<Row>
<Cell Alignment="2">
<TextFragment>
<TextSegment>13.30</TextSegment>
</TextFragment>
</Cell>
<Cell>
<TextFragment>
<TextSegment>15.30</TextSegment>
</TextFragment>
</Cell>
<Cell>
<TextFragment>
<TextSegment>каждый день</TextSegment>
</TextFragment>
</Cell>
<Cell>
<TextFragment>
<TextSegment>Star</TextSegment>
</TextFragment>
</Cell>
</Row>
<Row>
<Cell Alignment="2">
<TextFragment>
<TextSegment>16.30</TextSegment>
</TextFragment>
</Cell>
<Cell>
<TextFragment>
<TextSegment>18.30</TextSegment>
</TextFragment>
</Cell>
<Cell>
<TextFragment>
<TextSegment>каждый день</TextSegment>
</TextFragment>
</Cell>
<Cell>
<TextFragment>
<TextSegment>Megastar</TextSegment>
</TextFragment>
</Cell>
</Row>
<Row>
<Cell Alignment="2">
<TextFragment>
<TextSegment>19.30</TextSegment>
</TextFragment>
</Cell>
<Cell>
<TextFragment>
<TextSegment>21.30</TextSegment>
</TextFragment>
</Cell>
<Cell>
<TextFragment>
<TextSegment>каждый день</TextSegment>
</TextFragment>
</Cell>
<Cell>
<TextFragment>
<TextSegment>Star</TextSegment>
</TextFragment>
</Cell>
</Row>
<Row>
<Cell Alignment="2">
<TextFragment>
<TextSegment>22.30</TextSegment>
</TextFragment>
</Cell>
<Cell>
<TextFragment>
<TextSegment>00.30</TextSegment>
</TextFragment>
</Cell>
<Cell>
<TextFragment>
<TextSegment>Пн-Пт, Вс</TextSegment>
</TextFragment>
</Cell>
<Cell>
<TextFragment>
<TextSegment>Megastar</TextSegment>
</TextFragment>
</Cell>
</Row>
</Table>
</Page>
</Document>
Tables используются для создания макета документов. Например, мы можем настроить заголовок страницы. В этом случае таблица используется для разделения заголовка на 2 колонки.
<?xml version="1.0" encoding="utf-8" ?>
<Document xmlns="Aspose.Pdf">
<Page>
<PageInfo IsLandscape="false" Height="595" Width="420">
<Margin Top="71" Bottom="71" Left="28" Right="28" />
</PageInfo>
<Header>
<Margin Top="20" />
<Table ColumnAdjustment="AutoFitToWindow">
<Row>
<Cell Alignment="1">
<TextFragment>
<TextSegment>Дата: 01/01/2021</TextSegment>
</TextFragment>
</Cell>
<Cell Alignment="3">
<TextFragment>
<TextSegment>Страница $p / $P</TextSegment>
</TextFragment>
</Cell>
</Row>
</Table>
</Header>
<HtmlFragment>
<![CDATA[
<h1 style="font-family:Tahoma; font-size:16pt;">РАСПИСАНИЕ НА МАРШРУТЕ ГРИНТАУН-БЛЮБЕРГ</h1>
]]>
</HtmlFragment>
<TextFragment>
<TextSegment>4.1.-28.3.2021 | ГРИНТАУН → БЛЮБЕРГ</TextSegment>
</TextFragment>
<Table ColumnAdjustment="AutoFitToWindow" ColumnWidths ="10 10 10 10">
<DefaultCellPadding Top="5" Left="0" Right="0" Bottom="5" />
<Border>
<Top Color="Black"></Top>
<Bottom Color="Black"></Bottom>
<Left Color="Black"></Left>
<Right Color="Black"></Right>
</Border>
<Margin Top="15" />
<Row BackgroundColor="LightGray" MinRowHeight="20">
<Border>
<Bottom Color="Black"></Bottom>
</Border>
<Cell Alignment="2">
<TextFragment>
<TextSegment>Отправление</TextSegment>
</TextFragment>
</Cell>
<Cell>
<TextFragment>
<TextSegment>Прибытие</TextSegment>
</TextFragment>
</Cell>
<Cell>
<TextFragment>
<TextSegment>Будний день</TextSegment>
</TextFragment>
</Cell>
<Cell>
<TextFragment>
<TextSegment>Корабль</TextSegment>
</TextFragment>
</Cell>
</Row>
<Row>
<Cell Alignment="2">
<TextFragment>
<TextSegment>07.30</TextSegment>
</TextFragment>
</Cell>
<Cell>
<TextFragment>
<TextSegment>09.30</TextSegment>
</TextFragment>
</Cell>
<Cell>
<TextFragment>
<TextSegment>Пн-Сб</TextSegment>
</TextFragment>
</Cell>
<Cell>
<TextFragment>
<TextSegment>Стар</TextSegment>
</TextFragment>
</Cell>
</Row>
<Row>
<Cell Alignment="2">
<TextFragment>
<TextSegment>10.30</TextSegment>
</TextFragment>
</Cell>
<Cell>
<TextFragment>
<TextSegment>12.30</TextSegment>
</TextFragment>
</Cell>
<Cell>
<TextFragment>
<TextSegment>каждый день</TextSegment>
</TextFragment>
</Cell>
<Cell>
<TextFragment>
<TextSegment>Мегастар</TextSegment>
</TextFragment>
</Cell>
</Row>
<Row>
<Cell Alignment="2">
<TextFragment>
<TextSegment>13.30</TextSegment>
</TextFragment>
</Cell>
<Cell>
<TextFragment>
<TextSegment>15.30</TextSegment>
</TextFragment>
</Cell>
<Cell>
<TextFragment>
<TextSegment>каждый день</TextSegment>
</TextFragment>
</Cell>
<Cell>
<TextFragment>
<TextSegment>Стар</TextSegment>
</TextFragment>
</Cell>
</Row>
<Row>
<Cell Alignment="2">
<TextFragment>
<TextSegment>16.30</TextSegment>
</TextFragment>
</Cell>
<Cell>
<TextFragment>
<TextSegment>18.30</TextSegment>
</TextFragment>
</Cell>
<Cell>
<TextFragment>
<TextSegment>каждый день</TextSegment>
</TextFragment>
</Cell>
<Cell>
<TextFragment>
<TextSegment>Мегастар</TextSegment>
</TextFragment>
</Cell>
</Row>
<Row>
<Cell Alignment="2">
<TextFragment>
<TextSegment>19.30</TextSegment>
</TextFragment>
</Cell>
<Cell>
<TextFragment>
<TextSegment>21.30</TextSegment>
</TextFragment>
</Cell>
<Cell>
<TextFragment>
<TextSegment>каждый день</TextSegment>
</TextFragment>
</Cell>
<Cell>
<TextFragment>
<TextSegment>Стар</TextSegment>
</TextFragment>
</Cell>
</Row>
<Row>
<Cell Alignment="2">
<TextFragment>
<TextSegment>22.30</TextSegment>
</TextFragment>
</Cell>
<Cell>
<TextFragment>
<TextSegment>00.30</TextSegment>
</TextFragment>
</Cell>
<Cell>
<TextFragment>
<TextSegment>Пн-Пт, Вс</TextSegment>
</TextFragment>
</Cell>
<Cell>
<TextFragment>
<TextSegment>Мегастар</TextSegment>
</TextFragment>
</Cell>
</Row>
</Table>
</Page>
</Document>
Обновление контента динамически
Метод BindXML() предлагает функцию загрузки содержимого XML файла, а метод Document.save() может использоваться для сохранения результата в формате PDF. Однако, во время преобразования, мы также можем получить доступ к отдельным элементам внутри XML и использовать XML в качестве шаблона. Следующий фрагмент кода показывает шаги для доступа к TextSegments из XML файла.
<?xml version="1.0" encoding="utf-8" ?>
<Document xmlns="Aspose.Pdf">
<Page id="mainSection">
<TextFragment>
<TextSegment id="boldHtml">segment1</TextSegment>
</TextFragment>
<TextFragment>
<TextSegment id="strongHtml">segment2</TextSegment>
</TextFragment>
</Page>
</Document>
// For complete examples and data files, please go to https://github.com/aspose-pdf/Aspose.PDF-for-.NET
// The path to the documents directory.
string dataDir = RunExamples.GetDataDir_AsposePdf_DocumentConversion();
// Instantiate Document object
Document doc = new Document();
// Bind source XML file
doc.BindXml( dataDir + "log.xml");
// Get reference of page object from XML
Page page = (Page)doc.GetObjectById("mainSection");
// Get reference of first TextSegment with ID boldHtml
TextSegment segment = (TextSegment)doc.GetObjectById("boldHtml");
// Get reference of second TextSegment with ID strongHtml
segment = (TextSegment)doc.GetObjectById("strongHtml");
// Save resultant PDF file
doc.Save(dataDir + "XMLToPDF_out.pdf");
Добавление графических элементов на страницу
Мы можем добавить другие дополнительные элементы в XML-документ: объекты Image или Graph. Следующий пример показывает, как добавить эти элементы в документ
<Graph Width="20" Height="20">
<Circle PosX="30" PosY="30" Radius="10">
<GraphInfo Color="Red" FillColor="Blue"></GraphInfo>
</Circle>
</Graph>
<Image File="logo.png" Id = "testImg"></Image>
Установка пути изображения при преобразовании XML в PDF
Следующий шаблон XML содержит тег <Image>
с идентификатором “testImg”. В случае, если вы хотите установить путь к изображению из вашего кода, вы можете получить доступ к элементу Image из шаблона XML во время процесса преобразования и установить путь к нужному адресу для изображения.
<?xml version="1.0" encoding="utf-8" ?>
<Document xmlns="Aspose.Pdf">
<Page id="mainSection">
<PageInfo IsLandscape="true">
<Margin Left="20" Right="20" Top="10" Bottom="30" />
</PageInfo>
<Header>
<Margin Top="20" />
<Table ColumnAdjustment="AutoFitToWindow">
<Row>
<Cell Alignment="1">
<Image File="logo.png" Id = "testImg"></Image>
</Cell>
<Cell Alignment="3">
<TextFragment>
<TextSegment>Page $p / $P</TextSegment>
</TextFragment>
</Cell>
</Row>
</Table>
</Header>
<Table ColumnAdjustment="AutoFitToWindow" ColumnWidths="8 10">
<DefaultCellPadding Top="0" Left="0" Right="0" Bottom="0" />
<Margin Top="15" />
<Row>
<Cell Alignment="1">
<!--Logo-->
<TextFragment>
<TextSegment> Request ID</TextSegment>
<TextState FontSize="14" ForegroundColor="#0e4f9c" FontStyle="1" />
</TextFragment>
<TextFragment>
<TextSegment></TextSegment>
</TextFragment>
<TextFragment>
<TextSegment id="boldtext">Some Bold Text</TextSegment>
<TextState FontSize="14" FontStyle="1"></TextState>
</TextFragment>
</Cell>
</Row>
</Table>
</Page>
</Document>
Code to set image path in XML template is as follows:
// The path to the documents directory.
string dataDir = RunExamples.GetDataDir_AsposePdf_DocumentConversion();
string inXml = dataDir + "input.xml";
string inFile = dataDir + "aspose-logo.jpg";
string outFile = dataDir + "output_out.pdf";
Document doc = new Document();
doc.BindXml(inXml);
Image image = (Image)doc.GetObjectById("testImg");
image.File = inFile;
doc.Save(outFile);
title: “Руководство по API” description: “Подробное руководство по использованию нашего API.” lead: “Узнайте, как интегрировать и использовать наш API для максимальной эффективности.” date: 2023-03-15 changefreq: “monthly” type: docs
Добро пожаловать в наше API
Наш API предоставляет доступ к множеству функций, которые помогут вам интегрировать наши сервисы в ваше приложение.
Начало работы
Чтобы начать работу с нашим API, вам необходимо получить API-ключ. Для этого:
- Перейдите на страницу настройки аккаунта.
- Нажмите на “Создать новый API-ключ”.
- Сохраните ваш API-ключ в безопасном месте.
Аутентификация
Все запросы к нашему API должны быть аутентифицированы с использованием вашего API-ключа. Добавьте следующий заголовок к вашим запросам:
Authorization: Bearer YOUR_API_KEY
Примеры использования
Получение списка пользователей
Для получения списка всех пользователей отправьте GET-запрос на следующий URL:
GET /api/users
Создание нового пользователя
Чтобы создать нового пользователя, отправьте POST-запрос на следующий URL с телом запроса в формате JSON:
POST /api/users
Content-Type: application/json
{
"name": "Иван Иванов",
"email": "ivan@example.com"
}
Обновление информации о пользователе
Для обновления информации о пользователе отправьте PUT-запрос на следующий URL с телом запроса в формате JSON:
PUT /api/users/{id}
Content-Type: application/json
{
"name": "Иван Петров",
"email": "ivan.petrov@example.com"
}
Удаление пользователя
Чтобы удалить пользователя, отправьте DELETE-запрос на следующий URL:
DELETE /api/users/{id}
Заключение
Мы надеемся, что это руководство поможет вам эффективно использовать наш API. Если у вас возникнут вопросы, пожалуйста, обратитесь в нашу службу поддержки.