C# 为什么用iText复制PDF会取消嵌入某些字体?

C# 为什么用iText复制PDF会取消嵌入某些字体?,c#,pdf,fonts,itextsharp,itext,C#,Pdf,Fonts,Itextsharp,Itext,我和你有一些问题。(特别是iTextSharp。)我正试图将一个大的PDF文件拆分成一堆小的文件。这不是问题所在;这很有效 我发现,输入PDF文件中的一些字体(只有一种;其余的仍然嵌入得很好)虽然嵌入到输入PDF文件中,但它们不再嵌入到输出PDF文件中,尽管是用iText复制的 最终,这会产生一个可读的输出PDF文件,当在Adobe Reader中打开该文件时,会出现错误:“字体‘ZurichBT BoldItalic’包含一个坏的/BBOX。”。原始输入文件没有问题 我真的不明白为什么 下面是

我和你有一些问题。(特别是iTextSharp。)我正试图将一个大的PDF文件拆分成一堆小的文件。这不是问题所在;这很有效

我发现,输入PDF文件中的一些字体(只有一种;其余的仍然嵌入得很好)虽然嵌入到输入PDF文件中,但它们不再嵌入到输出PDF文件中,尽管是用iText复制的

最终,这会产生一个可读的输出PDF文件,当在Adobe Reader中打开该文件时,会出现错误:“字体‘ZurichBT BoldItalic’包含一个坏的/BBOX。”。原始输入文件没有问题

我真的不明白为什么

下面是一个简单复制输入PDF的测试用例应用程序。我不能提供我自己的输入PDF的示例,因为它包含机密信息,但如果不能完全用代码回答这一问题,我会尽快用一个小而简单的文件复制它


using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.IO;

using iTextSharp;
using iTextSharp.text;
using iTextSharp.text.pdf;

static void Main(string[] args)
{
    PdfReader reader = new PdfReader("input.pdf");

    Document doc = new Document();
    PdfSmartCopy writer = new PdfSmartCopy(doc, new FileStream("output.pdf", fileMode.OpenOrCreate, FileAccess.Write));

    doc.Open();

    for (int i = 1; i <= reader.NumberOfPages; i++)
    {
        //byte[] page = reader.GetPageContent(i);
        //string data = ExtractTextFromPDFBytes(page);
        if (true)//data.Contains("Search Token"))
        {
            doc.SetPageSize(reader.GetPageSizeWithRotation(i));
            doc.NewPage();
            PdfImportedPage iPage = writer.GetImportedPage(reader, i);
            writer.AddPage(iPage);
        }
    }
    doc.Close();
}

使用制度;
使用系统集合;
使用System.Collections.Generic;
使用System.Linq;
使用系统文本;
使用System.Text.RegularExpressions;
使用System.IO;
使用iTextSharp;
使用iTextSharp.text;
使用iTextSharp.text.pdf;
静态void Main(字符串[]参数)
{
PdfReader reader=新的PdfReader(“input.pdf”);
单据单据=新单据();
PdfSmartCopy writer=newpdfsmartcopy(doc,newfilestream(“output.pdf”,fileMode.OpenOrCreate,FileAccess.Write));
doc.Open();

对于(int i=1;i这是由于输入PDF损坏所致,尽管原始源文件中没有明显错误。正如BlackShadows所示,代码很好。处理原始源文件的不同副本可获得正确的输出。

嗨,我复制了您的代码,尝试使用我的PDF(PDF/a-1B)。很好。