IText7使用new PdfDocument(new PdfWriter(new MemoryStream()))创建PDF报错Unknown PdfException
时间: 2024-05-16 10:19:34 浏览: 173
这个错误通常是由于缺少必要的字体文件或者字体文件错误导致的。你可以尝试添加字体文件或者更换字体文件,具体可以按照以下步骤操作:
1. 确认你使用的字体文件是正确的,并且包含了所需要的字形信息。
2. 将字体文件添加到应用程序的资源文件夹中。
3. 使用`PdfFontFactory.CreateFont()`方法加载字体文件,并将返回的字体对象设置给所需的元素(如段落、表格等)。
4. 在创建PDF文档的时候,使用`PdfWriter`类的构造函数传入一个文件路径或者一个流对象,而不是使用`MemoryStream`。
如果你仍然遇到问题,可以提供更多的详细信息,我会尽力帮助你解决问题。
相关问题
C# IText7获取Pdf具体一页的PdfDocument
在 iText7 中,你可以使用 `PdfDocument` 对象来操作 PDF 文件,包括获取指定页的内容。下面是一个示例代码,展示如何获取指定页的 `PdfDocument` 对象:
```csharp
using iText.Kernel.Pdf;
using System.IO;
class Program
{
static void Main(string[] args)
{
string inputFilePath = "input.pdf";
int pageIndex = 1;
// 创建一个新的 PDF 文档
PdfDocument pdfDoc = new PdfDocument(new PdfReader(inputFilePath));
// 获取指定页的 PDF 文档对象
PdfDocument pageDoc = new PdfDocument(new PdfWriter(new MemoryStream()));
pdfDoc.CopyPagesTo(pageIndex, pageIndex, pageDoc);
// 在这里进行对指定页的操作
// ...
// 关闭 PDF 文档对象
pageDoc.Close();
// 关闭源 PDF 文档对象
pdfDoc.Close();
}
}
```
在以上代码中,我们首先创建了一个源 PDF 文档对象 `pdfDoc`,然后使用 `CopyPagesTo` 方法将指定页复制到一个新的 PDF 文档对象 `pageDoc` 中。在 `pageDoc` 中,我们可以进行任何操作,例如读取、修改或添加内容。完成操作后,我们需要调用 `Close` 方法来关闭 `pageDoc`。
需要注意的是,以上代码中我们使用了一个 `MemoryStream` 对象来作为输出流,这是为了避免在磁盘上创建临时文件。如果需要将输出保存到文件中,可以使用 `PdfWriter` 类的构造函数来指定输出文件路径。
C# iText 使用 MemoryStream 初始化
在C#中,iText是一个流行的用于处理PDF文档的库。如果你想要使用`MemoryStream`初始化一个iText PDF文档,首先需要创建一个`MemoryStream`对象,然后你可以通过`Document`类的构造函数将这个流作为基础来创建一个新的PDF文档。以下是简单的步骤:
```csharp
using iText.Kernel.Pdf;
using System.IO;
// 创建一个MemoryStream实例
MemoryStream ms = new MemoryStream();
// 初始化Document,传入MemoryStream
using (PdfDocument pdfDoc = new PdfDocument(new PdfWriter(ms)))
{
// 在这里添加页面、文本、图像等PDF内容
AddPage(pdfDoc);
AddContentToPage(pdfDoc);
// 等待所有操作完成后...
}
// 写入完PDF后,可以设置MemoryStream的位置回开头以便读取
ms.Seek(0, SeekOrigin.Begin);
// 如果需要,你可以从这里获取或保存PDF文件,例如:
File.WriteAllBytes("output.pdf", ms.ToArray());
```
在这个例子中,你需要自定义`AddPage`和`AddContentToPage`方法来实际地添加PDF元素。记住,在完成对PDF的操作后,最好关闭`PdfDocument`并释放资源。
阅读全文
相关推荐













