c# ofd 转 pdf
c是英文字母表中的第三个字母,也是大多数现代语言中的一个重要字母。
c在英文中有两种发音,分别是/k/和/s/。发音/k/通常出现在c后面接a、o、u等辅音字母时,如cat(猫)、cool(酷)、cup(杯子)等;而发音/s/则出现在c后面接e、i、y等元音字母时,如centre(中心)、city(城市)、cycle(周期)等。
c还有许多重要的用途。首先,在英语中,c表示摄氏度(Celsius),也是国际上常用的温度度量单位之一。其次,在化学中,c是元素碳(carbon)的化学符号,碳是地球上最常见的元素之一,常用于构成有机物质。此外,在机械工程中,c还常用来表示音速(speed of sound),即声波在空气中传播的速度。
此外,c还可以代表一些特定的意义。比如,c可以代表光的速度(speed of light),即光在真空中传播的速度,它是一个巨大的常数,约为每秒30万千米。在数学中,c是代表复数(complex number)的一个常用符号,通常用来表示一个由实数部分和虚数部分组成的数字。
总而言之,c是英文字母表中的一个重要字母,它在语言、科学和数学领域都有广泛的应用。
ofd转换成pdf C#源码
要将OFD转换为PDF格式的C#代码,可以使用以下步骤:
引入OFD解析库:使用OFD解析库(如ofdparser)解析OFD文档,并提取其中的内容。
引入PDF生成库:使用PDF生成库(如iTextSharp)生成PDF文档,并将OFD文档中的内容转换为PDF格式。
以下是使用C#语言实现OFD转换为PDF的示例代码:
using iTextSharp.text;
using iTextSharp.text.pdf;
using Org.Ofdrw.Reader;
public class OFD2PDF {
public static void Main(string[] args) {
// 加载OFD文件
string ofdFile = "example.ofd";
OFDReader reader = new OFDReader(ofdFile);
// 转换为PDF格式
string pdfFile = "example.pdf";
Document pdfDoc = new Document();
PdfWriter.GetInstance(pdfDoc, new FileStream(pdfFile, FileMode.Create));
pdfDoc.Open();
OFD2PDFConverter converter = new OFD2PDFConverter(reader, pdfDoc);
converter.Convert();
pdfDoc.Close();
}
}
需要注意的是,OFD和PDF是两种不同的电子文档格式,转换过程中可能会有一些格式丢失或转换不完全的情况。因此在实际应用中,需要根据具体情况进行调整和优化。
C#将OFD文件转换成PDF文件
你可以使用第三方库iTextSharp来将OFD文件转换成PDF文件。首先需要将OFD文件解压缩,然后将解压缩后的XML文件转换成PDF文件。
以下是一个示例代码:
using iTextSharp.text;
using iTextSharp.text.pdf;
using System.IO;
using System.Xml;
public static void ConvertOFDToPDF(string ofdFilePath, string pdfFilePath)
{
// 解压缩OFD文件
string tempFolderPath = Path.Combine(Path.GetTempPath(), Path.GetRandomFileName());
Directory.CreateDirectory(tempFolderPath);
ZipFile.ExtractToDirectory(ofdFilePath, tempFolderPath);
// 获取OFD文档的页面尺寸
string documentXmlPath = Path.Combine(tempFolderPath, "Documents", "Document.xml");
XmlDocument documentXml = new XmlDocument();
documentXml.Load(documentXmlPath);
XmlNamespaceManager nsManager = new XmlNamespaceManager(documentXml.NameTable);
nsManager.AddNamespace("ofd", "http://www.ofdspec.org");
XmlNode pageAreaNode = documentXml.SelectSingleNode("/ofd:Document/ofd:Pages/ofd:PageArea", nsManager);
float pageWidth = float.Parse(pageAreaNode.Attributes["PageWidth"].Value);
float pageHeight = float.Parse(pageAreaNode.Attributes["PageHeight"].Value);
// 创建PDF文档
using (FileStream pdfFileStream = new FileStream(pdfFilePath, FileMode.Create))
{
using (Document pdfDocument = new Document(new Rectangle(pageWidth, pageHeight)))
{
using (PdfWriter pdfWriter = PdfWriter.GetInstance(pdfDocument, pdfFileStream))
{
pdfDocument.Open();
// 遍历OFD文档的页面,将每个页面转换成PDF页面
XmlNodeList pageNodes = documentXml.SelectNodes("/ofd:Document/ofd:Pages/ofd:Page", nsManager);
foreach (XmlNode pageNode in pageNodes)
{
string pageFileNodeValue = pageNode.Attributes["BaseLoc"].Value;
string pageFilePath = Path.Combine(tempFolderPath, pageFileNodeValue);
using (FileStream pageFileStream = new FileStream(pageFilePath, FileMode.Open))
{
using (MemoryStream pageMemoryStream = new MemoryStream())
{
pageFileStream.CopyTo(pageMemoryStream);
byte[] pageBytes = pageMemoryStream.ToArray();
// 将OFD页面转换成PDF页面
using (MemoryStream pdfMemoryStream = new MemoryStream())
{
using (Document pageDocument = new Document())
{
using (PdfWriter pdfPageWriter = PdfWriter.GetInstance(pageDocument, pdfMemoryStream))
{
pageDocument.Open();
using (MemoryStream pageXmlStream = new MemoryStream(pageBytes))
{
XmlDocument pageXml = new XmlDocument();
pageXml.Load(pageXmlStream);
XmlNode pageContentNode = pageXml.SelectSingleNode("/ofd:Page/ofd:Content", nsManager);
string pageContent = pageContentNode.InnerXml;
using (MemoryStream pageContentStream = new MemoryStream())
{
using (StreamWriter pageContentWriter = new StreamWriter(pageContentStream))
{
pageContentWriter.Write(pageContent);
pageContentWriter.Flush();
pageContentStream.Position = 0;
XmlParserContext xmlParserContext = new XmlParserContext(null, nsManager, null, XmlSpace.None);
XmlReaderSettings xmlReaderSettings = new XmlReaderSettings();
xmlReaderSettings.ConformanceLevel = ConformanceLevel.Fragment;
using (XmlReader xmlReader = XmlReader.Create(pageContentStream, xmlReaderSettings, xmlParserContext))
{
while (xmlReader.Read())
{
if (xmlReader.NodeType == XmlNodeType.Element)
{
string elementName = xmlReader.Name;
if (elementName == "ofd:TextObject")
{
string fontId = xmlReader.GetAttribute("Font");
string fontSizeString = xmlReader.GetAttribute("Size");
float fontSize = float.Parse(fontSizeString);
string fontFamily = null;
XmlNode fontNode = documentXml.SelectSingleNode($"/ofd:Document/ofd:Fonts/ofd:Font[@ID='{fontId}']", nsManager);
if (fontNode != null)
{
fontFamily = fontNode.Attributes["FontName"].Value;
}
if (string.IsNullOrEmpty(fontFamily))
{
fontFamily = "宋体";
}
BaseFont baseFont = BaseFont.CreateFont($"{fontFamily},Bold", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
Font font = new Font(baseFont, fontSize);
string text = xmlReader.ReadElementContentAsString();
pdfDocument.Add(new Paragraph(text, font));
}
else if (elementName == "ofd:PathObject")
{
// 处理OFD路径对象
}
else if (elementName == "ofd:ImageObject")
{
// 处理OFD图像对象
}
}
}
}
}
}
}
pageDocument.Close();
}
}
byte[] pdfBytes = pdfMemoryStream.ToArray();
PdfReader pdfReader = new PdfReader(pdfBytes);
pdfWriter.DirectContent.AddTemplate(pdfWriter.GetImportedPage(pdfReader, 1), 0, 0);
}
}
}
}
pdfDocument.Close();
}
}
}
Directory.Delete(tempFolderPath, true);
}
请注意,这段代码只是一个示例,可能需要根据你的具体情况进行修改和调整。