将EPUB转换为PDF
Aspose.PDF for C++ 允许您简单地将EPUB文件转换为PDF格式。
EPUB(电子出版物的缩写)是国际数字出版论坛(IDPF)制定的免费和开放的电子书标准。文件的扩展名为.epub。EPUB旨在用于可重排内容,这意味着EPUB阅读器可以为特定的显示设备优化文本。
EPUB还支持固定布局内容。 格式旨在作为出版商和转换公司可在内部使用的单一格式,也用于分发和销售。它取代了 Open eBook 标准。EPUB 3 版本还得到了图书行业研究小组(BISG)的认可,该小组是一个领先的图书贸易协会,致力于标准化最佳实践、研究、信息和活动,用于内容包装。
转换步骤:
- 为路径名和文件名创建一个String Class。
- 创建一个EpubLoadOptions类的实例。
- 创建一个带有指定源文件名和选项的Document类的实例。
- 加载并保存输入文件。
下面的代码片段展示了如何使用 C++ 将 EPUB 文件转换为 PDF 格式。
void ConvertEPUBtoPDF()
{
std::clog << "EPUB to PDF convert: Start" << std::endl;
String _dataDir("C:\\Samples\\Conversion\\");
String infilename("aliceDynamic.epub");
String outfilename("epub_test.pdf");
auto options = MakeObject<EpubLoadOptions>();
try {
auto document = MakeObject<Document>(_dataDir + infilename, options);
document->Save(_dataDir + outfilename);
}
catch (System::Exception ex) {
std::cerr << ex->get_Message() << std::endl;
}
std::clog << "EPUB to PDF convert: End" << std::endl;
}
将文本转换为PDF
Aspose.PDF for C++ 支持将纯文本和预格式化文本文件转换为PDF格式的功能。
将文本转换为PDF意味着将文本片段添加到PDF页面。对于文本文件,我们处理两种类型的文本:预格式化文本(例如,每行80个字符的25行)和非格式化文本(纯文本)。根据我们的需要,我们可以自行控制这种添加,或者将其委托给库的算法。
将纯文本文件转换为PDF
对于纯文本文件,我们可以使用以下技术:
- 创建一个用于路径名和文件名的String Class。
- 使用[TextReader](https://reference.aspose.com/pdf/cpp/class/system.i_o.text_reader/.)读取源文本文件。
- 实例化Document对象。
- 向文档的页面集合中添加一个Page。
- 创建一个新的TextFragment对象,并将TextReader对象传递给其构造函数。
- 在段落集合中添加一个新的文本段落,并传递TextFragment对象。
- 加载并保存输入文件。
void ConvertTextToPDF()
{
std::clog << "Text to PDF convert: Start" << std::endl;
String _dataDir("C:\\Samples\\Conversion\\");
String infilename("sample.txt");
String outfilename("TextToPDF.pdf");
// 读取源文本文件
String content = System::IO::File::ReadAllText(_dataDir + infilename);
// 通过调用其空构造函数实例化一个Document对象
auto document = MakeObject<Document>();
// 在Document的Pages集合中添加一个新页面
auto page = document->get_Pages()->Add();
// 创建一个TextFragment实例,并将reader对象中的文本作为参数传递给其构造函数
auto text = MakeObject<TextFragment>(content);
// 在段落集合中添加一个新的文本段落,并传递TextFragment对象
auto paragraphs = page->get_Paragraphs();
paragraphs->Add(text);
// 保存生成的PDF文件
document->Save(_dataDir + outfilename);
std::clog << "Text to PDF convert: End" << std::endl;
}
将预格式化文本文件转换为PDF
转换预格式化文本类似于纯文本,但您需要进行一些额外的操作,例如设置边距、字体类型和大小。显然,该字体应为等宽字体(例如Courier New)。
按照以下步骤使用C++将预格式化文本转换为PDF:
void ConvertPreFormattedTextToPdf()
{
std::clog << "Performatted Text to PDF convert: Start" << std::endl;
String _dataDir("C:\\Samples\\Conversion\\");
String infilename("rfc822.txt");
String outfilename("TextToPDF.pdf");
// 将文本文件读取为字符串数组
auto lines = System::IO::File::ReadAllLines(_dataDir + infilename);
// 通过调用其空构造函数实例化Document对象
auto document = MakeObject<Document>();
// 在Document的Pages集合中添加新页面
auto page = document->get_Pages()->Add();
// 设置左右边距以获得更好的展示效果
page->get_PageInfo()->get_Margin()->set_Left(20);
page->get_PageInfo()->get_Margin()->set_Right(10);
page->get_PageInfo()->get_DefaultTextState()->set_Font(FontRepository::FindFont(u"Courier New"));
page->get_PageInfo()->get_DefaultTextState()->set_FontSize(12);
for (int index = 0; index < lines->get_Length(); index++)
{
// 检查行是否包含“换页”字符
// 参见 https://en.wikipedia.org/wiki/Page_break
auto line = lines->idx_get(index);
if (line.StartsWith(u"\x0c"))
{
if (document->get_Pages()->get_Count() > 3) break;
page = document->get_Pages()->Add();
// 设置左右边距以获得更好的展示效果
page->get_PageInfo()->get_Margin()->set_Left(20);
page->get_PageInfo()->get_Margin()->set_Right(10);
page->get_PageInfo()->get_DefaultTextState()->set_Font(FontRepository::FindFont(u"Courier New"));
page->get_PageInfo()->get_DefaultTextState()->set_FontSize(12);
}
else
{
// 创建TextFragment实例
// 并将该行作为参数传递给其构造函数
auto text = MakeObject<TextFragment>(line);
// 在段落集合中添加新文本段落并传递TextFragment对象
page->get_Paragraphs()->Add(text);
}
}
// 保存生成的PDF文件
document->Save(_dataDir + outfilename);
std::clog << "Performatted Text to PDF convert: End" << std::endl;
}
将XPS转换为PDF
Aspose.PDF for C++ 支持将XPS文件转换为PDF格式的功能。查看本文以解决您的任务。
XPS文件类型主要与Microsoft Corporation的XML Paper Specification相关联。XML Paper Specification (XPS),以前代号为Metro,并包含下一代打印路径(NGPP)营销概念,是Microsoft将文档创建和查看集成到其Windows操作系统中的举措。
为了使用Aspose.PDF for C++将XPS转换为PDF,我们引入了一个名为XpsLoadOption的类,用于初始化LoadOptions对象。随后,此对象在Document对象初始化期间作为参数传递,它帮助PDF渲染引擎确定源文档的输入格式。
以下代码段显示了使用C++将XPS文件转换为PDF格式的过程。
void ConvertXPStoPDF()
{
std::clog << "XPS to PDF convert: Start" << std::endl;
String _dataDir("C:\\Samples\\Conversion\\");
String infilename("sample.oxps");
String outfilename("XPStoPDF.pdf");
auto options = MakeObject<XpsLoadOptions>();
try {
auto document = MakeObject<Document>(_dataDir + infilename, options);
document->Save(_dataDir + outfilename);
}
catch (System::Exception ex) {
std::cerr << ex->get_Message() << std::endl;
};
std::clog << "XPS to PDF convert: Finish" << std::endl;
}
将XML转换为PDF
XML格式用于存储结构化数据。在Aspose.PDF中有几种方法可以将XML转换为PDF。
将XSL-FO转换为PDF
- 创建路径名和文件名的String类。
- 实例化XslFoLoadOption对象。
- 设置错误处理策略。
- 实例化Document对象。
- 保存 输入图像文件。
void Convert_XSLFO_to_PDF()
{
std::clog << "XSL-FO 转换为 PDF:开始" << std::endl;
String _dataDir("C:\\Samples\\Conversion\\");
String infilenameXSL("c:\\samples\\employees.xslt");
String infilenameXML("c:\\samples\\employees.xml");
String outfilename("XMLFOtoPDF.pdf");
// 实例化 XslFoLoadOption 对象
auto options = new XslFoLoadOptions(infilenameXSL);
// 设置错误处理策略
options->ParsingErrorsHandlingType = XslFoLoadOptions::ParsingErrorsHandlingTypes::ThrowExceptionImmediately;
// 创建 Document 对象
auto document = MakeObject<Document>(infilenameXML, options);
document->Save(_dataDir + outfilename);
}
尝试在线将 XML 转换为 PDF
Aspose.PDF for C++ 为您提供在线免费应用程序 “XML to PDF”,您可以尝试研究其功能和工作质量。