We're sorry Aspose doesn't work properply without JavaScript enabled.

Free Support Forum - aspose.com

Aspose.PDF for .NET如何在读取pdf时指定编码

当我载入文档时:
Document pdfDocument = new Document(“test.pdf”);
发现,在pdfDocument .Pages下有Contents属性
该属性中有PDF文件中所有内容
在静态成员中可以发现,文字内容使用了“cp866”,也就是西里尔字符编码
导致这些文字内容无法用中文显示,显示的都是类似于" !"#"这样的内容。
因为我需要直接操作Contents中的文字内容
请问,如何以指定编码载入PDF文档?或者如何将cp866的字符转换为中文?
谢谢!

@howze,

您能否共享源文件以进一步详细调查此问题。

@Adnan.Ahmad
感谢你的回复
我将使用的pdf文件及问题展示的截图作为附件上传
请参考
谢谢!
test.pdf (92.6 KB)
picture.jpg (300.7 KB)

@howze

我已经检查了问题。为了进一步调查,您可以共享完整的示例代码。

@Adnan.Ahmad
我将代码上传至:https://www.lanzous.com/ib00ryh
请查阅。

在page.contents下的内容中
英文都可以正常显示
中文都无法显示,应该是编码的问题
所以,是否有什么方法,可以在载入文件时指定编码,例如Document pdfDocument = new Document(@“C:\Users\Hao\Desktop\test.pdf”,“ASC||”);
或者有什么方法,能让我在page.contents下看到中文的内容,谢谢!

@howze,

您可以在通过C#中的TextReader读取文本时为文本指定Encoding。请检查以下代码段,其中我已读取UTF-8编码的文本文件,并在PDF中添加了文本. [也请检查此链接。](https://forum.aspose.com/t/text-to-pdf-with-extended-characters/163718)

System.IO.TextReader tr = new StreamReader(dataDir + "Sample File.txt", Encoding.UTF8, true);
Aspose.Pdf.Document doc = new Aspose.Pdf.Document();
Page page = doc.Pages.Add();
String strLine;
while ((strLine = tr.ReadLine()) != null)
{
    Aspose.Pdf.Text.TextFragment text = new Aspose.Pdf.Text.TextFragment(strLine);
    page.Paragraphs.Add(text);
}
doc.Save(dataDir + "TexttoPDF_out.pdf");
tr.Close();

@Adnan.Ahmad
感谢回复
但我不是要将文本写入pdf
我是询问如何在载入pdf时使用指定编码,以便我能读取这些内容。
我的应用场景是要操作page.contents下的内容
就是congtents中如果包含某些字符,我就会删除这个content
可是现在contents中,只有英文和数字可以正常显示,其他都不能正常显示
看不到中文,我就无法操作content。
所以问题依然是我开头问的,如何能让contents中的中文可以正常显示,谢谢!

@howze,

我想通知您以下示例代码将帮助您达到要求。如果仍有问题,请与我们分享反馈。

HtmlLoadOptions loadoptions = new HtmlLoadOptions(dataDir);
loadoptions.PageInfo.Height = Aspose.Pdf.PageSize.PageLetter.Height;
loadoptions.PageInfo.Width = Aspose.Pdf.PageSize.PageLetter.Width;
loadoptions.PageInfo.Margin.Left = 70;
loadoptions.PageInfo.Margin.Top = 30;
string HTMLcontent = File.ReadAllText(dataDir + “CoverLetter.HTML”, Encoding.UTF8);
MemoryStream ms = new MemoryStream();
TextWriter tw = new StreamWriter(ms);
tw.Write(HTMLcontent);
tw.Flush();
ms.Seek(0, SeekOrigin.Begin);
Document doc = new Document(ms, loadoptions);
doc.Save(dataDir + “CoverLetterWithImage.pdf”);

@Adnan.Ahmad
感谢您的答复

我使用如下代码:
HtmlLoadOptions loadoptions = new HtmlLoadOptions(@“C:\Users\howze\Desktop”);
loadoptions.PageInfo.Height = Aspose.Pdf.PageSize.PageLetter.Height;
loadoptions.PageInfo.Width = Aspose.Pdf.PageSize.PageLetter.Width;
loadoptions.PageInfo.Margin.Left = 70;
loadoptions.PageInfo.Margin.Top = 30;
string HTMLcontent = File.ReadAllText(@“C:\Users\howze\Desktop” + “test.pdf”, Encoding.UTF8);
MemoryStream ms = new MemoryStream();
TextWriter tw = new StreamWriter(ms);
tw.Write(HTMLcontent);
tw.Flush();
ms.Seek(0, SeekOrigin.Begin);
Document doc = new Document(ms, loadoptions);

但是发现,doc.Pages[1].Contents下的内容依然无法直接读取,还是乱码。
你的代码是将html写入stream在保存为pdf
但我是要直接读取pdf,不是读取html哦

@howze,

我已观察到您对问题的要求,并在我们的问题跟踪系统中将其记录为 PDFNET-47947。我们将进一步调查该问题的详细信息,并向您发布其纠正状态。请耐心等待,为我们节省时间。

对此造成的不便,我们表示歉意。